From 4da76cb51b4fcb24194c0ed8b01aa81b93360a7f Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Mon, 1 Mar 2021 15:55:39 +0000 Subject: [PATCH] vkd3d: Simplify properties/features tracing Simplifies this to make it easier to add new properties/features so we don't have a bunch of pointers to things that are just a child of the device info structure. Fixes warnings when compiling without traces too. Signed-off-by: Joshua Ashton --- libs/vkd3d/device.c | 521 +++++++++++++++++++++----------------------- 1 file changed, 246 insertions(+), 275 deletions(-) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 7f43f100..ade564a7 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -1101,16 +1101,20 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i static void vkd3d_trace_physical_device_properties(const VkPhysicalDeviceProperties *properties) { - const uint32_t driver_version = properties->driverVersion; - const uint32_t api_version = properties->apiVersion; - TRACE("Device name: %s.\n", properties->deviceName); TRACE("Vendor ID: %#x, Device ID: %#x.\n", properties->vendorID, properties->deviceID); - TRACE("Driver version: %#x (%u.%u.%u, %u.%u.%u.%u).\n", driver_version, - VK_VERSION_MAJOR(driver_version), VK_VERSION_MINOR(driver_version), VK_VERSION_PATCH(driver_version), - driver_version >> 22, (driver_version >> 14) & 0xff, (driver_version >> 6) & 0xff, driver_version & 0x3f); + TRACE("Driver version: %#x (%u.%u.%u, %u.%u.%u.%u).\n", properties->driverVersion, + VK_VERSION_MAJOR(properties->driverVersion), + VK_VERSION_MINOR(properties->driverVersion), + VK_VERSION_PATCH(properties->driverVersion), + (properties->driverVersion >> 22), + (properties->driverVersion >> 14) & 0xff, + (properties->driverVersion >> 6) & 0xff, + (properties->driverVersion >> 0) & 0x3f); TRACE("API version: %u.%u.%u.\n", - VK_VERSION_MAJOR(api_version), VK_VERSION_MINOR(api_version), VK_VERSION_PATCH(api_version)); + VK_VERSION_MAJOR(properties->apiVersion), + VK_VERSION_MINOR(properties->apiVersion), + VK_VERSION_PATCH(properties->apiVersion)); } static void vkd3d_trace_physical_device(VkPhysicalDevice device, @@ -1143,7 +1147,7 @@ static void vkd3d_trace_physical_device(VkPhysicalDevice device, VK_CALL(vkGetPhysicalDeviceMemoryProperties(device, &memory_properties)); for (i = 0; i < memory_properties.memoryHeapCount; ++i) { - const VkMemoryHeap *heap = &memory_properties.memoryHeaps[i]; + VKD3D_UNUSED const VkMemoryHeap *heap = &memory_properties.memoryHeaps[i]; TRACE("Memory heap [%u]: size %#"PRIx64" (%"PRIu64" MiB), flags %s, memory types:\n", i, heap->size, heap->size / 1024 / 1024, debug_vk_memory_heap_flags(heap->flags)); for (j = 0; j < memory_properties.memoryTypeCount; ++j) @@ -1158,366 +1162,333 @@ static void vkd3d_trace_physical_device(VkPhysicalDevice device, static void vkd3d_trace_physical_device_limits(const struct vkd3d_physical_device_info *info) { - const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *divisor_properties; - const VkPhysicalDeviceLimits *limits = &info->properties2.properties.limits; - const VkPhysicalDeviceDescriptorIndexingPropertiesEXT *descriptor_indexing; - const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT *buffer_alignment; - const VkPhysicalDeviceMaintenance3Properties *maintenance3; - const VkPhysicalDeviceTransformFeedbackPropertiesEXT *xfb; - TRACE("Device limits:\n"); - TRACE(" maxImageDimension1D: %u.\n", limits->maxImageDimension1D); - TRACE(" maxImageDimension2D: %u.\n", limits->maxImageDimension2D); - TRACE(" maxImageDimension3D: %u.\n", limits->maxImageDimension3D); - TRACE(" maxImageDimensionCube: %u.\n", limits->maxImageDimensionCube); - TRACE(" maxImageArrayLayers: %u.\n", limits->maxImageArrayLayers); - TRACE(" maxTexelBufferElements: %u.\n", limits->maxTexelBufferElements); - TRACE(" maxUniformBufferRange: %u.\n", limits->maxUniformBufferRange); - TRACE(" maxStorageBufferRange: %u.\n", limits->maxStorageBufferRange); - TRACE(" maxPushConstantsSize: %u.\n", limits->maxPushConstantsSize); - TRACE(" maxMemoryAllocationCount: %u.\n", limits->maxMemoryAllocationCount); - TRACE(" maxSamplerAllocationCount: %u.\n", limits->maxSamplerAllocationCount); - TRACE(" bufferImageGranularity: %#"PRIx64".\n", limits->bufferImageGranularity); - TRACE(" sparseAddressSpaceSize: %#"PRIx64".\n", limits->sparseAddressSpaceSize); - TRACE(" maxBoundDescriptorSets: %u.\n", limits->maxBoundDescriptorSets); - TRACE(" maxPerStageDescriptorSamplers: %u.\n", limits->maxPerStageDescriptorSamplers); - TRACE(" maxPerStageDescriptorUniformBuffers: %u.\n", limits->maxPerStageDescriptorUniformBuffers); - TRACE(" maxPerStageDescriptorStorageBuffers: %u.\n", limits->maxPerStageDescriptorStorageBuffers); - TRACE(" maxPerStageDescriptorSampledImages: %u.\n", limits->maxPerStageDescriptorSampledImages); - TRACE(" maxPerStageDescriptorStorageImages: %u.\n", limits->maxPerStageDescriptorStorageImages); - TRACE(" maxPerStageDescriptorInputAttachments: %u.\n", limits->maxPerStageDescriptorInputAttachments); - TRACE(" maxPerStageResources: %u.\n", limits->maxPerStageResources); - TRACE(" maxDescriptorSetSamplers: %u.\n", limits->maxDescriptorSetSamplers); - TRACE(" maxDescriptorSetUniformBuffers: %u.\n", limits->maxDescriptorSetUniformBuffers); - TRACE(" maxDescriptorSetUniformBuffersDynamic: %u.\n", limits->maxDescriptorSetUniformBuffersDynamic); - TRACE(" maxDescriptorSetStorageBuffers: %u.\n", limits->maxDescriptorSetStorageBuffers); - TRACE(" maxDescriptorSetStorageBuffersDynamic: %u.\n", limits->maxDescriptorSetStorageBuffersDynamic); - TRACE(" maxDescriptorSetSampledImages: %u.\n", limits->maxDescriptorSetSampledImages); - TRACE(" maxDescriptorSetStorageImages: %u.\n", limits->maxDescriptorSetStorageImages); - TRACE(" maxDescriptorSetInputAttachments: %u.\n", limits->maxDescriptorSetInputAttachments); - TRACE(" maxVertexInputAttributes: %u.\n", limits->maxVertexInputAttributes); - TRACE(" maxVertexInputBindings: %u.\n", limits->maxVertexInputBindings); - TRACE(" maxVertexInputAttributeOffset: %u.\n", limits->maxVertexInputAttributeOffset); - TRACE(" maxVertexInputBindingStride: %u.\n", limits->maxVertexInputBindingStride); - TRACE(" maxVertexOutputComponents: %u.\n", limits->maxVertexOutputComponents); - TRACE(" maxTessellationGenerationLevel: %u.\n", limits->maxTessellationGenerationLevel); - TRACE(" maxTessellationPatchSize: %u.\n", limits->maxTessellationPatchSize); + TRACE(" maxImageDimension1D: %u.\n", info->properties2.properties.limits.maxImageDimension1D); + TRACE(" maxImageDimension2D: %u.\n", info->properties2.properties.limits.maxImageDimension2D); + TRACE(" maxImageDimension3D: %u.\n", info->properties2.properties.limits.maxImageDimension3D); + TRACE(" maxImageDimensionCube: %u.\n", info->properties2.properties.limits.maxImageDimensionCube); + TRACE(" maxImageArrayLayers: %u.\n", info->properties2.properties.limits.maxImageArrayLayers); + TRACE(" maxTexelBufferElements: %u.\n", info->properties2.properties.limits.maxTexelBufferElements); + TRACE(" maxUniformBufferRange: %u.\n", info->properties2.properties.limits.maxUniformBufferRange); + TRACE(" maxStorageBufferRange: %u.\n", info->properties2.properties.limits.maxStorageBufferRange); + TRACE(" maxPushConstantsSize: %u.\n", info->properties2.properties.limits.maxPushConstantsSize); + TRACE(" maxMemoryAllocationCount: %u.\n", info->properties2.properties.limits.maxMemoryAllocationCount); + TRACE(" maxSamplerAllocationCount: %u.\n", info->properties2.properties.limits.maxSamplerAllocationCount); + TRACE(" bufferImageGranularity: %#"PRIx64".\n", info->properties2.properties.limits.bufferImageGranularity); + TRACE(" sparseAddressSpaceSize: %#"PRIx64".\n", info->properties2.properties.limits.sparseAddressSpaceSize); + TRACE(" maxBoundDescriptorSets: %u.\n", info->properties2.properties.limits.maxBoundDescriptorSets); + TRACE(" maxPerStageDescriptorSamplers: %u.\n", info->properties2.properties.limits.maxPerStageDescriptorSamplers); + TRACE(" maxPerStageDescriptorUniformBuffers: %u.\n", info->properties2.properties.limits.maxPerStageDescriptorUniformBuffers); + TRACE(" maxPerStageDescriptorStorageBuffers: %u.\n", info->properties2.properties.limits.maxPerStageDescriptorStorageBuffers); + TRACE(" maxPerStageDescriptorSampledImages: %u.\n", info->properties2.properties.limits.maxPerStageDescriptorSampledImages); + TRACE(" maxPerStageDescriptorStorageImages: %u.\n", info->properties2.properties.limits.maxPerStageDescriptorStorageImages); + TRACE(" maxPerStageDescriptorInputAttachments: %u.\n", info->properties2.properties.limits.maxPerStageDescriptorInputAttachments); + TRACE(" maxPerStageResources: %u.\n", info->properties2.properties.limits.maxPerStageResources); + TRACE(" maxDescriptorSetSamplers: %u.\n", info->properties2.properties.limits.maxDescriptorSetSamplers); + TRACE(" maxDescriptorSetUniformBuffers: %u.\n", info->properties2.properties.limits.maxDescriptorSetUniformBuffers); + TRACE(" maxDescriptorSetUniformBuffersDynamic: %u.\n", info->properties2.properties.limits.maxDescriptorSetUniformBuffersDynamic); + TRACE(" maxDescriptorSetStorageBuffers: %u.\n", info->properties2.properties.limits.maxDescriptorSetStorageBuffers); + TRACE(" maxDescriptorSetStorageBuffersDynamic: %u.\n", info->properties2.properties.limits.maxDescriptorSetStorageBuffersDynamic); + TRACE(" maxDescriptorSetSampledImages: %u.\n", info->properties2.properties.limits.maxDescriptorSetSampledImages); + TRACE(" maxDescriptorSetStorageImages: %u.\n", info->properties2.properties.limits.maxDescriptorSetStorageImages); + TRACE(" maxDescriptorSetInputAttachments: %u.\n", info->properties2.properties.limits.maxDescriptorSetInputAttachments); + TRACE(" maxVertexInputAttributes: %u.\n", info->properties2.properties.limits.maxVertexInputAttributes); + TRACE(" maxVertexInputBindings: %u.\n", info->properties2.properties.limits.maxVertexInputBindings); + TRACE(" maxVertexInputAttributeOffset: %u.\n", info->properties2.properties.limits.maxVertexInputAttributeOffset); + TRACE(" maxVertexInputBindingStride: %u.\n", info->properties2.properties.limits.maxVertexInputBindingStride); + TRACE(" maxVertexOutputComponents: %u.\n", info->properties2.properties.limits.maxVertexOutputComponents); + TRACE(" maxTessellationGenerationLevel: %u.\n", info->properties2.properties.limits.maxTessellationGenerationLevel); + TRACE(" maxTessellationPatchSize: %u.\n", info->properties2.properties.limits.maxTessellationPatchSize); TRACE(" maxTessellationControlPerVertexInputComponents: %u.\n", - limits->maxTessellationControlPerVertexInputComponents); + info->properties2.properties.limits.maxTessellationControlPerVertexInputComponents); TRACE(" maxTessellationControlPerVertexOutputComponents: %u.\n", - limits->maxTessellationControlPerVertexOutputComponents); + info->properties2.properties.limits.maxTessellationControlPerVertexOutputComponents); TRACE(" maxTessellationControlPerPatchOutputComponents: %u.\n", - limits->maxTessellationControlPerPatchOutputComponents); + info->properties2.properties.limits.maxTessellationControlPerPatchOutputComponents); TRACE(" maxTessellationControlTotalOutputComponents: %u.\n", - limits->maxTessellationControlTotalOutputComponents); + info->properties2.properties.limits.maxTessellationControlTotalOutputComponents); TRACE(" maxTessellationEvaluationInputComponents: %u.\n", - limits->maxTessellationEvaluationInputComponents); + info->properties2.properties.limits.maxTessellationEvaluationInputComponents); TRACE(" maxTessellationEvaluationOutputComponents: %u.\n", - limits->maxTessellationEvaluationOutputComponents); - TRACE(" maxGeometryShaderInvocations: %u.\n", limits->maxGeometryShaderInvocations); - TRACE(" maxGeometryInputComponents: %u.\n", limits->maxGeometryInputComponents); - TRACE(" maxGeometryOutputComponents: %u.\n", limits->maxGeometryOutputComponents); - TRACE(" maxGeometryOutputVertices: %u.\n", limits->maxGeometryOutputVertices); - TRACE(" maxGeometryTotalOutputComponents: %u.\n", limits->maxGeometryTotalOutputComponents); - TRACE(" maxFragmentInputComponents: %u.\n", limits->maxFragmentInputComponents); - TRACE(" maxFragmentOutputAttachments: %u.\n", limits->maxFragmentOutputAttachments); - TRACE(" maxFragmentDualSrcAttachments: %u.\n", limits->maxFragmentDualSrcAttachments); - TRACE(" maxFragmentCombinedOutputResources: %u.\n", limits->maxFragmentCombinedOutputResources); - TRACE(" maxComputeSharedMemorySize: %u.\n", limits->maxComputeSharedMemorySize); - TRACE(" maxComputeWorkGroupCount: %u, %u, %u.\n", limits->maxComputeWorkGroupCount[0], - limits->maxComputeWorkGroupCount[1], limits->maxComputeWorkGroupCount[2]); - TRACE(" maxComputeWorkGroupInvocations: %u.\n", limits->maxComputeWorkGroupInvocations); - TRACE(" maxComputeWorkGroupSize: %u, %u, %u.\n", limits->maxComputeWorkGroupSize[0], - limits->maxComputeWorkGroupSize[1], limits->maxComputeWorkGroupSize[2]); - TRACE(" subPixelPrecisionBits: %u.\n", limits->subPixelPrecisionBits); - TRACE(" subTexelPrecisionBits: %u.\n", limits->subTexelPrecisionBits); - TRACE(" mipmapPrecisionBits: %u.\n", limits->mipmapPrecisionBits); - TRACE(" maxDrawIndexedIndexValue: %u.\n", limits->maxDrawIndexedIndexValue); - TRACE(" maxDrawIndirectCount: %u.\n", limits->maxDrawIndirectCount); - TRACE(" maxSamplerLodBias: %f.\n", limits->maxSamplerLodBias); - TRACE(" maxSamplerAnisotropy: %f.\n", limits->maxSamplerAnisotropy); - TRACE(" maxViewports: %u.\n", limits->maxViewports); - TRACE(" maxViewportDimensions: %u, %u.\n", limits->maxViewportDimensions[0], - limits->maxViewportDimensions[1]); - TRACE(" viewportBoundsRange: %f, %f.\n", limits->viewportBoundsRange[0], limits->viewportBoundsRange[1]); - TRACE(" viewportSubPixelBits: %u.\n", limits->viewportSubPixelBits); - TRACE(" minMemoryMapAlignment: %u.\n", (unsigned int)limits->minMemoryMapAlignment); - TRACE(" minTexelBufferOffsetAlignment: %#"PRIx64".\n", limits->minTexelBufferOffsetAlignment); - TRACE(" minUniformBufferOffsetAlignment: %#"PRIx64".\n", limits->minUniformBufferOffsetAlignment); - TRACE(" minStorageBufferOffsetAlignment: %#"PRIx64".\n", limits->minStorageBufferOffsetAlignment); - TRACE(" minTexelOffset: %d.\n", limits->minTexelOffset); - TRACE(" maxTexelOffset: %u.\n", limits->maxTexelOffset); - TRACE(" minTexelGatherOffset: %d.\n", limits->minTexelGatherOffset); - TRACE(" maxTexelGatherOffset: %u.\n", limits->maxTexelGatherOffset); - TRACE(" minInterpolationOffset: %f.\n", limits->minInterpolationOffset); - TRACE(" maxInterpolationOffset: %f.\n", limits->maxInterpolationOffset); - TRACE(" subPixelInterpolationOffsetBits: %u.\n", limits->subPixelInterpolationOffsetBits); - TRACE(" maxFramebufferWidth: %u.\n", limits->maxFramebufferWidth); - TRACE(" maxFramebufferHeight: %u.\n", limits->maxFramebufferHeight); - TRACE(" maxFramebufferLayers: %u.\n", limits->maxFramebufferLayers); - TRACE(" framebufferColorSampleCounts: %#x.\n", limits->framebufferColorSampleCounts); - TRACE(" framebufferDepthSampleCounts: %#x.\n", limits->framebufferDepthSampleCounts); - TRACE(" framebufferStencilSampleCounts: %#x.\n", limits->framebufferStencilSampleCounts); - TRACE(" framebufferNoAttachmentsSampleCounts: %#x.\n", limits->framebufferNoAttachmentsSampleCounts); - TRACE(" maxColorAttachments: %u.\n", limits->maxColorAttachments); - TRACE(" sampledImageColorSampleCounts: %#x.\n", limits->sampledImageColorSampleCounts); - TRACE(" sampledImageIntegerSampleCounts: %#x.\n", limits->sampledImageIntegerSampleCounts); - TRACE(" sampledImageDepthSampleCounts: %#x.\n", limits->sampledImageDepthSampleCounts); - TRACE(" sampledImageStencilSampleCounts: %#x.\n", limits->sampledImageStencilSampleCounts); - TRACE(" storageImageSampleCounts: %#x.\n", limits->storageImageSampleCounts); - TRACE(" maxSampleMaskWords: %u.\n", limits->maxSampleMaskWords); - TRACE(" timestampComputeAndGraphics: %#x.\n", limits->timestampComputeAndGraphics); - TRACE(" timestampPeriod: %f.\n", limits->timestampPeriod); - TRACE(" maxClipDistances: %u.\n", limits->maxClipDistances); - TRACE(" maxCullDistances: %u.\n", limits->maxCullDistances); - TRACE(" maxCombinedClipAndCullDistances: %u.\n", limits->maxCombinedClipAndCullDistances); - TRACE(" discreteQueuePriorities: %u.\n", limits->discreteQueuePriorities); - TRACE(" pointSizeRange: %f, %f.\n", limits->pointSizeRange[0], limits->pointSizeRange[1]); - TRACE(" lineWidthRange: %f, %f,\n", limits->lineWidthRange[0], limits->lineWidthRange[1]); - TRACE(" pointSizeGranularity: %f.\n", limits->pointSizeGranularity); - TRACE(" lineWidthGranularity: %f.\n", limits->lineWidthGranularity); - TRACE(" strictLines: %#x.\n", limits->strictLines); - TRACE(" standardSampleLocations: %#x.\n", limits->standardSampleLocations); - TRACE(" optimalBufferCopyOffsetAlignment: %#"PRIx64".\n", limits->optimalBufferCopyOffsetAlignment); - TRACE(" optimalBufferCopyRowPitchAlignment: %#"PRIx64".\n", limits->optimalBufferCopyRowPitchAlignment); - TRACE(" nonCoherentAtomSize: %#"PRIx64".\n", limits->nonCoherentAtomSize); + info->properties2.properties.limits.maxTessellationEvaluationOutputComponents); + TRACE(" maxGeometryShaderInvocations: %u.\n", info->properties2.properties.limits.maxGeometryShaderInvocations); + TRACE(" maxGeometryInputComponents: %u.\n", info->properties2.properties.limits.maxGeometryInputComponents); + TRACE(" maxGeometryOutputComponents: %u.\n", info->properties2.properties.limits.maxGeometryOutputComponents); + TRACE(" maxGeometryOutputVertices: %u.\n", info->properties2.properties.limits.maxGeometryOutputVertices); + TRACE(" maxGeometryTotalOutputComponents: %u.\n", info->properties2.properties.limits.maxGeometryTotalOutputComponents); + TRACE(" maxFragmentInputComponents: %u.\n", info->properties2.properties.limits.maxFragmentInputComponents); + TRACE(" maxFragmentOutputAttachments: %u.\n", info->properties2.properties.limits.maxFragmentOutputAttachments); + TRACE(" maxFragmentDualSrcAttachments: %u.\n", info->properties2.properties.limits.maxFragmentDualSrcAttachments); + TRACE(" maxFragmentCombinedOutputResources: %u.\n", info->properties2.properties.limits.maxFragmentCombinedOutputResources); + TRACE(" maxComputeSharedMemorySize: %u.\n", info->properties2.properties.limits.maxComputeSharedMemorySize); + TRACE(" maxComputeWorkGroupCount: %u, %u, %u.\n", info->properties2.properties.limits.maxComputeWorkGroupCount[0], + info->properties2.properties.limits.maxComputeWorkGroupCount[1], info->properties2.properties.limits.maxComputeWorkGroupCount[2]); + TRACE(" maxComputeWorkGroupInvocations: %u.\n", info->properties2.properties.limits.maxComputeWorkGroupInvocations); + TRACE(" maxComputeWorkGroupSize: %u, %u, %u.\n", info->properties2.properties.limits.maxComputeWorkGroupSize[0], + info->properties2.properties.limits.maxComputeWorkGroupSize[1], info->properties2.properties.limits.maxComputeWorkGroupSize[2]); + TRACE(" subPixelPrecisionBits: %u.\n", info->properties2.properties.limits.subPixelPrecisionBits); + TRACE(" subTexelPrecisionBits: %u.\n", info->properties2.properties.limits.subTexelPrecisionBits); + TRACE(" mipmapPrecisionBits: %u.\n", info->properties2.properties.limits.mipmapPrecisionBits); + TRACE(" maxDrawIndexedIndexValue: %u.\n", info->properties2.properties.limits.maxDrawIndexedIndexValue); + TRACE(" maxDrawIndirectCount: %u.\n", info->properties2.properties.limits.maxDrawIndirectCount); + TRACE(" maxSamplerLodBias: %f.\n", info->properties2.properties.limits.maxSamplerLodBias); + TRACE(" maxSamplerAnisotropy: %f.\n", info->properties2.properties.limits.maxSamplerAnisotropy); + TRACE(" maxViewports: %u.\n", info->properties2.properties.limits.maxViewports); + TRACE(" maxViewportDimensions: %u, %u.\n", info->properties2.properties.limits.maxViewportDimensions[0], + info->properties2.properties.limits.maxViewportDimensions[1]); + TRACE(" viewportBoundsRange: %f, %f.\n", info->properties2.properties.limits.viewportBoundsRange[0], info->properties2.properties.limits.viewportBoundsRange[1]); + TRACE(" viewportSubPixelBits: %u.\n", info->properties2.properties.limits.viewportSubPixelBits); + TRACE(" minMemoryMapAlignment: %u.\n", (unsigned int)info->properties2.properties.limits.minMemoryMapAlignment); + TRACE(" minTexelBufferOffsetAlignment: %#"PRIx64".\n", info->properties2.properties.limits.minTexelBufferOffsetAlignment); + TRACE(" minUniformBufferOffsetAlignment: %#"PRIx64".\n", info->properties2.properties.limits.minUniformBufferOffsetAlignment); + TRACE(" minStorageBufferOffsetAlignment: %#"PRIx64".\n", info->properties2.properties.limits.minStorageBufferOffsetAlignment); + TRACE(" minTexelOffset: %d.\n", info->properties2.properties.limits.minTexelOffset); + TRACE(" maxTexelOffset: %u.\n", info->properties2.properties.limits.maxTexelOffset); + TRACE(" minTexelGatherOffset: %d.\n", info->properties2.properties.limits.minTexelGatherOffset); + TRACE(" maxTexelGatherOffset: %u.\n", info->properties2.properties.limits.maxTexelGatherOffset); + TRACE(" minInterpolationOffset: %f.\n", info->properties2.properties.limits.minInterpolationOffset); + TRACE(" maxInterpolationOffset: %f.\n", info->properties2.properties.limits.maxInterpolationOffset); + TRACE(" subPixelInterpolationOffsetBits: %u.\n", info->properties2.properties.limits.subPixelInterpolationOffsetBits); + TRACE(" maxFramebufferWidth: %u.\n", info->properties2.properties.limits.maxFramebufferWidth); + TRACE(" maxFramebufferHeight: %u.\n", info->properties2.properties.limits.maxFramebufferHeight); + TRACE(" maxFramebufferLayers: %u.\n", info->properties2.properties.limits.maxFramebufferLayers); + TRACE(" framebufferColorSampleCounts: %#x.\n", info->properties2.properties.limits.framebufferColorSampleCounts); + TRACE(" framebufferDepthSampleCounts: %#x.\n", info->properties2.properties.limits.framebufferDepthSampleCounts); + TRACE(" framebufferStencilSampleCounts: %#x.\n", info->properties2.properties.limits.framebufferStencilSampleCounts); + TRACE(" framebufferNoAttachmentsSampleCounts: %#x.\n", info->properties2.properties.limits.framebufferNoAttachmentsSampleCounts); + TRACE(" maxColorAttachments: %u.\n", info->properties2.properties.limits.maxColorAttachments); + TRACE(" sampledImageColorSampleCounts: %#x.\n", info->properties2.properties.limits.sampledImageColorSampleCounts); + TRACE(" sampledImageIntegerSampleCounts: %#x.\n", info->properties2.properties.limits.sampledImageIntegerSampleCounts); + TRACE(" sampledImageDepthSampleCounts: %#x.\n", info->properties2.properties.limits.sampledImageDepthSampleCounts); + TRACE(" sampledImageStencilSampleCounts: %#x.\n", info->properties2.properties.limits.sampledImageStencilSampleCounts); + TRACE(" storageImageSampleCounts: %#x.\n", info->properties2.properties.limits.storageImageSampleCounts); + TRACE(" maxSampleMaskWords: %u.\n", info->properties2.properties.limits.maxSampleMaskWords); + TRACE(" timestampComputeAndGraphics: %#x.\n", info->properties2.properties.limits.timestampComputeAndGraphics); + TRACE(" timestampPeriod: %f.\n", info->properties2.properties.limits.timestampPeriod); + TRACE(" maxClipDistances: %u.\n", info->properties2.properties.limits.maxClipDistances); + TRACE(" maxCullDistances: %u.\n", info->properties2.properties.limits.maxCullDistances); + TRACE(" maxCombinedClipAndCullDistances: %u.\n", info->properties2.properties.limits.maxCombinedClipAndCullDistances); + TRACE(" discreteQueuePriorities: %u.\n", info->properties2.properties.limits.discreteQueuePriorities); + TRACE(" pointSizeRange: %f, %f.\n", info->properties2.properties.limits.pointSizeRange[0], info->properties2.properties.limits.pointSizeRange[1]); + TRACE(" lineWidthRange: %f, %f,\n", info->properties2.properties.limits.lineWidthRange[0], info->properties2.properties.limits.lineWidthRange[1]); + TRACE(" pointSizeGranularity: %f.\n", info->properties2.properties.limits.pointSizeGranularity); + TRACE(" lineWidthGranularity: %f.\n", info->properties2.properties.limits.lineWidthGranularity); + TRACE(" strictLines: %#x.\n", info->properties2.properties.limits.strictLines); + TRACE(" standardSampleLocations: %#x.\n", info->properties2.properties.limits.standardSampleLocations); + TRACE(" optimalBufferCopyOffsetAlignment: %#"PRIx64".\n", info->properties2.properties.limits.optimalBufferCopyOffsetAlignment); + TRACE(" optimalBufferCopyRowPitchAlignment: %#"PRIx64".\n", info->properties2.properties.limits.optimalBufferCopyRowPitchAlignment); + TRACE(" nonCoherentAtomSize: %#"PRIx64".\n", info->properties2.properties.limits.nonCoherentAtomSize); - descriptor_indexing = &info->descriptor_indexing_properties; TRACE(" VkPhysicalDeviceDescriptorIndexingPropertiesEXT:\n"); - TRACE(" maxUpdateAfterBindDescriptorsInAllPools: %u.\n", - descriptor_indexing->maxUpdateAfterBindDescriptorsInAllPools); + info->descriptor_indexing_properties.maxUpdateAfterBindDescriptorsInAllPools); TRACE(" shaderUniformBufferArrayNonUniformIndexingNative: %#x.\n", - descriptor_indexing->shaderUniformBufferArrayNonUniformIndexingNative); + info->descriptor_indexing_properties.shaderUniformBufferArrayNonUniformIndexingNative); TRACE(" shaderSampledImageArrayNonUniformIndexingNative: %#x.\n", - descriptor_indexing->shaderSampledImageArrayNonUniformIndexingNative); + info->descriptor_indexing_properties.shaderSampledImageArrayNonUniformIndexingNative); TRACE(" shaderStorageBufferArrayNonUniformIndexingNative: %#x.\n", - descriptor_indexing->shaderStorageBufferArrayNonUniformIndexingNative); + info->descriptor_indexing_properties.shaderStorageBufferArrayNonUniformIndexingNative); TRACE(" shaderStorageImageArrayNonUniformIndexingNative: %#x.\n", - descriptor_indexing->shaderStorageImageArrayNonUniformIndexingNative); + info->descriptor_indexing_properties.shaderStorageImageArrayNonUniformIndexingNative); TRACE(" shaderInputAttachmentArrayNonUniformIndexingNative: %#x.\n", - descriptor_indexing->shaderInputAttachmentArrayNonUniformIndexingNative); + info->descriptor_indexing_properties.shaderInputAttachmentArrayNonUniformIndexingNative); TRACE(" robustBufferAccessUpdateAfterBind: %#x.\n", - descriptor_indexing->robustBufferAccessUpdateAfterBind); + info->descriptor_indexing_properties.robustBufferAccessUpdateAfterBind); TRACE(" quadDivergentImplicitLod: %#x.\n", - descriptor_indexing->quadDivergentImplicitLod); + info->descriptor_indexing_properties.quadDivergentImplicitLod); TRACE(" maxPerStageDescriptorUpdateAfterBindSamplers: %u.\n", - descriptor_indexing->maxPerStageDescriptorUpdateAfterBindSamplers); + info->descriptor_indexing_properties.maxPerStageDescriptorUpdateAfterBindSamplers); TRACE(" maxPerStageDescriptorUpdateAfterBindUniformBuffers: %u.\n", - descriptor_indexing->maxPerStageDescriptorUpdateAfterBindUniformBuffers); + info->descriptor_indexing_properties.maxPerStageDescriptorUpdateAfterBindUniformBuffers); TRACE(" maxPerStageDescriptorUpdateAfterBindStorageBuffers: %u.\n", - descriptor_indexing->maxPerStageDescriptorUpdateAfterBindStorageBuffers); + info->descriptor_indexing_properties.maxPerStageDescriptorUpdateAfterBindStorageBuffers); TRACE(" maxPerStageDescriptorUpdateAfterBindSampledImages: %u.\n", - descriptor_indexing->maxPerStageDescriptorUpdateAfterBindSampledImages); + info->descriptor_indexing_properties.maxPerStageDescriptorUpdateAfterBindSampledImages); TRACE(" maxPerStageDescriptorUpdateAfterBindStorageImages: %u.\n", - descriptor_indexing->maxPerStageDescriptorUpdateAfterBindStorageImages); + info->descriptor_indexing_properties.maxPerStageDescriptorUpdateAfterBindStorageImages); TRACE(" maxPerStageDescriptorUpdateAfterBindInputAttachments: %u.\n", - descriptor_indexing->maxPerStageDescriptorUpdateAfterBindInputAttachments); + info->descriptor_indexing_properties.maxPerStageDescriptorUpdateAfterBindInputAttachments); TRACE(" maxPerStageUpdateAfterBindResources: %u.\n", - descriptor_indexing->maxPerStageUpdateAfterBindResources); + info->descriptor_indexing_properties.maxPerStageUpdateAfterBindResources); TRACE(" maxDescriptorSetUpdateAfterBindSamplers: %u.\n", - descriptor_indexing->maxDescriptorSetUpdateAfterBindSamplers); + info->descriptor_indexing_properties.maxDescriptorSetUpdateAfterBindSamplers); TRACE(" maxDescriptorSetUpdateAfterBindUniformBuffers: %u.\n", - descriptor_indexing->maxDescriptorSetUpdateAfterBindUniformBuffers); + info->descriptor_indexing_properties.maxDescriptorSetUpdateAfterBindUniformBuffers); TRACE(" maxDescriptorSetUpdateAfterBindUniformBuffersDynamic: %u.\n", - descriptor_indexing->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic); + info->descriptor_indexing_properties.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic); TRACE(" maxDescriptorSetUpdateAfterBindStorageBuffers: %u.\n", - descriptor_indexing->maxDescriptorSetUpdateAfterBindStorageBuffers); + info->descriptor_indexing_properties.maxDescriptorSetUpdateAfterBindStorageBuffers); TRACE(" maxDescriptorSetUpdateAfterBindStorageBuffersDynamic: %u.\n", - descriptor_indexing->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic); + info->descriptor_indexing_properties.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic); TRACE(" maxDescriptorSetUpdateAfterBindSampledImages: %u.\n", - descriptor_indexing->maxDescriptorSetUpdateAfterBindSampledImages); + info->descriptor_indexing_properties.maxDescriptorSetUpdateAfterBindSampledImages); TRACE(" maxDescriptorSetUpdateAfterBindStorageImages: %u.\n", - descriptor_indexing->maxDescriptorSetUpdateAfterBindStorageImages); + info->descriptor_indexing_properties.maxDescriptorSetUpdateAfterBindStorageImages); TRACE(" maxDescriptorSetUpdateAfterBindInputAttachments: %u.\n", - descriptor_indexing->maxDescriptorSetUpdateAfterBindInputAttachments); + info->descriptor_indexing_properties.maxDescriptorSetUpdateAfterBindInputAttachments); - maintenance3 = &info->maintenance3_properties; - TRACE(" VkPhysicalDeviceMaintenance3Properties:\n"); - TRACE(" maxPerSetDescriptors: %u.\n", maintenance3->maxPerSetDescriptors); - TRACE(" maxMemoryAllocationSize: %#"PRIx64".\n", maintenance3->maxMemoryAllocationSize); + TRACE(" maxPerSetDescriptors: %u.\n", info->maintenance3_properties.maxPerSetDescriptors); + TRACE(" maxMemoryAllocationSize: %#"PRIx64".\n", info->maintenance3_properties.maxMemoryAllocationSize); - buffer_alignment = &info->texel_buffer_alignment_properties; TRACE(" VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT:\n"); TRACE(" storageTexelBufferOffsetAlignmentBytes: %#"PRIx64".\n", - buffer_alignment->storageTexelBufferOffsetAlignmentBytes); + info->texel_buffer_alignment_properties.storageTexelBufferOffsetAlignmentBytes); TRACE(" storageTexelBufferOffsetSingleTexelAlignment: %#x.\n", - buffer_alignment->storageTexelBufferOffsetSingleTexelAlignment); + info->texel_buffer_alignment_properties.storageTexelBufferOffsetSingleTexelAlignment); TRACE(" uniformTexelBufferOffsetAlignmentBytes: %#"PRIx64".\n", - buffer_alignment->uniformTexelBufferOffsetAlignmentBytes); + info->texel_buffer_alignment_properties.uniformTexelBufferOffsetAlignmentBytes); TRACE(" uniformTexelBufferOffsetSingleTexelAlignment: %#x.\n", - buffer_alignment->uniformTexelBufferOffsetSingleTexelAlignment); + info->texel_buffer_alignment_properties.uniformTexelBufferOffsetSingleTexelAlignment); - xfb = &info->xfb_properties; TRACE(" VkPhysicalDeviceTransformFeedbackPropertiesEXT:\n"); - TRACE(" maxTransformFeedbackStreams: %u.\n", xfb->maxTransformFeedbackStreams); - TRACE(" maxTransformFeedbackBuffers: %u.\n", xfb->maxTransformFeedbackBuffers); - TRACE(" maxTransformFeedbackBufferSize: %#"PRIx64".\n", xfb->maxTransformFeedbackBufferSize); - TRACE(" maxTransformFeedbackStreamDataSize: %u.\n", xfb->maxTransformFeedbackStreamDataSize); - TRACE(" maxTransformFeedbackBufferDataSize: %u.\n", xfb->maxTransformFeedbackBufferDataSize); - TRACE(" maxTransformFeedbackBufferDataStride: %u.\n", xfb->maxTransformFeedbackBufferDataStride); - TRACE(" transformFeedbackQueries: %#x.\n", xfb->transformFeedbackQueries); - TRACE(" transformFeedbackStreamsLinesTriangles: %#x.\n", xfb->transformFeedbackStreamsLinesTriangles); - TRACE(" transformFeedbackRasterizationStreamSelect: %#x.\n", xfb->transformFeedbackRasterizationStreamSelect); - TRACE(" transformFeedbackDraw: %x.\n", xfb->transformFeedbackDraw); + TRACE(" maxTransformFeedbackStreams: %u.\n", info->xfb_properties.maxTransformFeedbackStreams); + TRACE(" maxTransformFeedbackBuffers: %u.\n", info->xfb_properties.maxTransformFeedbackBuffers); + TRACE(" maxTransformFeedbackBufferSize: %#"PRIx64".\n", info->xfb_properties.maxTransformFeedbackBufferSize); + TRACE(" maxTransformFeedbackStreamDataSize: %u.\n", info->xfb_properties.maxTransformFeedbackStreamDataSize); + TRACE(" maxTransformFeedbackBufferDataSize: %u.\n", info->xfb_properties.maxTransformFeedbackBufferDataSize); + TRACE(" maxTransformFeedbackBufferDataStride: %u.\n", info->xfb_properties.maxTransformFeedbackBufferDataStride); + TRACE(" transformFeedbackQueries: %#x.\n", info->xfb_properties.transformFeedbackQueries); + TRACE(" transformFeedbackStreamsLinesTriangles: %#x.\n", info->xfb_properties.transformFeedbackStreamsLinesTriangles); + TRACE(" transformFeedbackRasterizationStreamSelect: %#x.\n", info->xfb_properties.transformFeedbackRasterizationStreamSelect); + TRACE(" transformFeedbackDraw: %x.\n", info->xfb_properties.transformFeedbackDraw); - divisor_properties = &info->vertex_divisor_properties; TRACE(" VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:\n"); - TRACE(" maxVertexAttribDivisor: %u.\n", divisor_properties->maxVertexAttribDivisor); + TRACE(" maxVertexAttribDivisor: %u.\n", info->vertex_divisor_properties.maxVertexAttribDivisor); } static void vkd3d_trace_physical_device_features(const struct vkd3d_physical_device_info *info) { - const VkPhysicalDeviceConditionalRenderingFeaturesEXT *conditional_rendering_features; - const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT *demote_features; - const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *buffer_alignment_features; - const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *divisor_features; - const VkPhysicalDeviceCustomBorderColorFeaturesEXT *border_color_features; - const VkPhysicalDeviceDescriptorIndexingFeaturesEXT *descriptor_indexing; - const VkPhysicalDeviceDepthClipEnableFeaturesEXT *depth_clip_features; - const VkPhysicalDeviceFeatures *features = &info->features2.features; - const VkPhysicalDeviceTransformFeedbackFeaturesEXT *xfb; - TRACE("Device features:\n"); - TRACE(" robustBufferAccess: %#x.\n", features->robustBufferAccess); - TRACE(" fullDrawIndexUint32: %#x.\n", features->fullDrawIndexUint32); - TRACE(" imageCubeArray: %#x.\n", features->imageCubeArray); - TRACE(" independentBlend: %#x.\n", features->independentBlend); - TRACE(" geometryShader: %#x.\n", features->geometryShader); - TRACE(" tessellationShader: %#x.\n", features->tessellationShader); - TRACE(" sampleRateShading: %#x.\n", features->sampleRateShading); - TRACE(" dualSrcBlend: %#x.\n", features->dualSrcBlend); - TRACE(" logicOp: %#x.\n", features->logicOp); - TRACE(" multiDrawIndirect: %#x.\n", features->multiDrawIndirect); - TRACE(" drawIndirectFirstInstance: %#x.\n", features->drawIndirectFirstInstance); - TRACE(" depthClamp: %#x.\n", features->depthClamp); - TRACE(" depthBiasClamp: %#x.\n", features->depthBiasClamp); - TRACE(" fillModeNonSolid: %#x.\n", features->fillModeNonSolid); - TRACE(" depthBounds: %#x.\n", features->depthBounds); - TRACE(" wideLines: %#x.\n", features->wideLines); - TRACE(" largePoints: %#x.\n", features->largePoints); - TRACE(" alphaToOne: %#x.\n", features->alphaToOne); - TRACE(" multiViewport: %#x.\n", features->multiViewport); - TRACE(" samplerAnisotropy: %#x.\n", features->samplerAnisotropy); - TRACE(" textureCompressionETC2: %#x.\n", features->textureCompressionETC2); - TRACE(" textureCompressionASTC_LDR: %#x.\n", features->textureCompressionASTC_LDR); - TRACE(" textureCompressionBC: %#x.\n", features->textureCompressionBC); - TRACE(" occlusionQueryPrecise: %#x.\n", features->occlusionQueryPrecise); - TRACE(" pipelineStatisticsQuery: %#x.\n", features->pipelineStatisticsQuery); - TRACE(" vertexOipelineStoresAndAtomics: %#x.\n", features->vertexPipelineStoresAndAtomics); - TRACE(" fragmentStoresAndAtomics: %#x.\n", features->fragmentStoresAndAtomics); - TRACE(" shaderTessellationAndGeometryPointSize: %#x.\n", features->shaderTessellationAndGeometryPointSize); - TRACE(" shaderImageGatherExtended: %#x.\n", features->shaderImageGatherExtended); - TRACE(" shaderStorageImageExtendedFormats: %#x.\n", features->shaderStorageImageExtendedFormats); - TRACE(" shaderStorageImageMultisample: %#x.\n", features->shaderStorageImageMultisample); - TRACE(" shaderStorageImageReadWithoutFormat: %#x.\n", features->shaderStorageImageReadWithoutFormat); - TRACE(" shaderStorageImageWriteWithoutFormat: %#x.\n", features->shaderStorageImageWriteWithoutFormat); - TRACE(" shaderUniformBufferArrayDynamicIndexing: %#x.\n", features->shaderUniformBufferArrayDynamicIndexing); - TRACE(" shaderSampledImageArrayDynamicIndexing: %#x.\n", features->shaderSampledImageArrayDynamicIndexing); - TRACE(" shaderStorageBufferArrayDynamicIndexing: %#x.\n", features->shaderStorageBufferArrayDynamicIndexing); - TRACE(" shaderStorageImageArrayDynamicIndexing: %#x.\n", features->shaderStorageImageArrayDynamicIndexing); - TRACE(" shaderClipDistance: %#x.\n", features->shaderClipDistance); - TRACE(" shaderCullDistance: %#x.\n", features->shaderCullDistance); - TRACE(" shaderFloat64: %#x.\n", features->shaderFloat64); - TRACE(" shaderInt64: %#x.\n", features->shaderInt64); - TRACE(" shaderInt16: %#x.\n", features->shaderInt16); - TRACE(" shaderResourceResidency: %#x.\n", features->shaderResourceResidency); - TRACE(" shaderResourceMinLod: %#x.\n", features->shaderResourceMinLod); - TRACE(" sparseBinding: %#x.\n", features->sparseBinding); - TRACE(" sparseResidencyBuffer: %#x.\n", features->sparseResidencyBuffer); - TRACE(" sparseResidencyImage2D: %#x.\n", features->sparseResidencyImage2D); - TRACE(" sparseResidencyImage3D: %#x.\n", features->sparseResidencyImage3D); - TRACE(" sparseResidency2Samples: %#x.\n", features->sparseResidency2Samples); - TRACE(" sparseResidency4Samples: %#x.\n", features->sparseResidency4Samples); - TRACE(" sparseResidency8Samples: %#x.\n", features->sparseResidency8Samples); - TRACE(" sparseResidency16Samples: %#x.\n", features->sparseResidency16Samples); - TRACE(" sparseResidencyAliased: %#x.\n", features->sparseResidencyAliased); - TRACE(" variableMultisampleRate: %#x.\n", features->variableMultisampleRate); - TRACE(" inheritedQueries: %#x.\n", features->inheritedQueries); + TRACE(" robustBufferAccess: %#x.\n", info->features2.features.robustBufferAccess); + TRACE(" fullDrawIndexUint32: %#x.\n", info->features2.features.fullDrawIndexUint32); + TRACE(" imageCubeArray: %#x.\n", info->features2.features.imageCubeArray); + TRACE(" independentBlend: %#x.\n", info->features2.features.independentBlend); + TRACE(" geometryShader: %#x.\n", info->features2.features.geometryShader); + TRACE(" tessellationShader: %#x.\n", info->features2.features.tessellationShader); + TRACE(" sampleRateShading: %#x.\n", info->features2.features.sampleRateShading); + TRACE(" dualSrcBlend: %#x.\n", info->features2.features.dualSrcBlend); + TRACE(" logicOp: %#x.\n", info->features2.features.logicOp); + TRACE(" multiDrawIndirect: %#x.\n", info->features2.features.multiDrawIndirect); + TRACE(" drawIndirectFirstInstance: %#x.\n", info->features2.features.drawIndirectFirstInstance); + TRACE(" depthClamp: %#x.\n", info->features2.features.depthClamp); + TRACE(" depthBiasClamp: %#x.\n", info->features2.features.depthBiasClamp); + TRACE(" fillModeNonSolid: %#x.\n", info->features2.features.fillModeNonSolid); + TRACE(" depthBounds: %#x.\n", info->features2.features.depthBounds); + TRACE(" wideLines: %#x.\n", info->features2.features.wideLines); + TRACE(" largePoints: %#x.\n", info->features2.features.largePoints); + TRACE(" alphaToOne: %#x.\n", info->features2.features.alphaToOne); + TRACE(" multiViewport: %#x.\n", info->features2.features.multiViewport); + TRACE(" samplerAnisotropy: %#x.\n", info->features2.features.samplerAnisotropy); + TRACE(" textureCompressionETC2: %#x.\n", info->features2.features.textureCompressionETC2); + TRACE(" textureCompressionASTC_LDR: %#x.\n", info->features2.features.textureCompressionASTC_LDR); + TRACE(" textureCompressionBC: %#x.\n", info->features2.features.textureCompressionBC); + TRACE(" occlusionQueryPrecise: %#x.\n", info->features2.features.occlusionQueryPrecise); + TRACE(" pipelineStatisticsQuery: %#x.\n", info->features2.features.pipelineStatisticsQuery); + TRACE(" vertexOipelineStoresAndAtomics: %#x.\n", info->features2.features.vertexPipelineStoresAndAtomics); + TRACE(" fragmentStoresAndAtomics: %#x.\n", info->features2.features.fragmentStoresAndAtomics); + TRACE(" shaderTessellationAndGeometryPointSize: %#x.\n", info->features2.features.shaderTessellationAndGeometryPointSize); + TRACE(" shaderImageGatherExtended: %#x.\n", info->features2.features.shaderImageGatherExtended); + TRACE(" shaderStorageImageExtendedFormats: %#x.\n", info->features2.features.shaderStorageImageExtendedFormats); + TRACE(" shaderStorageImageMultisample: %#x.\n", info->features2.features.shaderStorageImageMultisample); + TRACE(" shaderStorageImageReadWithoutFormat: %#x.\n", info->features2.features.shaderStorageImageReadWithoutFormat); + TRACE(" shaderStorageImageWriteWithoutFormat: %#x.\n", info->features2.features.shaderStorageImageWriteWithoutFormat); + TRACE(" shaderUniformBufferArrayDynamicIndexing: %#x.\n", info->features2.features.shaderUniformBufferArrayDynamicIndexing); + TRACE(" shaderSampledImageArrayDynamicIndexing: %#x.\n", info->features2.features.shaderSampledImageArrayDynamicIndexing); + TRACE(" shaderStorageBufferArrayDynamicIndexing: %#x.\n", info->features2.features.shaderStorageBufferArrayDynamicIndexing); + TRACE(" shaderStorageImageArrayDynamicIndexing: %#x.\n", info->features2.features.shaderStorageImageArrayDynamicIndexing); + TRACE(" shaderClipDistance: %#x.\n", info->features2.features.shaderClipDistance); + TRACE(" shaderCullDistance: %#x.\n", info->features2.features.shaderCullDistance); + TRACE(" shaderFloat64: %#x.\n", info->features2.features.shaderFloat64); + TRACE(" shaderInt64: %#x.\n", info->features2.features.shaderInt64); + TRACE(" shaderInt16: %#x.\n", info->features2.features.shaderInt16); + TRACE(" shaderResourceResidency: %#x.\n", info->features2.features.shaderResourceResidency); + TRACE(" shaderResourceMinLod: %#x.\n", info->features2.features.shaderResourceMinLod); + TRACE(" sparseBinding: %#x.\n", info->features2.features.sparseBinding); + TRACE(" sparseResidencyBuffer: %#x.\n", info->features2.features.sparseResidencyBuffer); + TRACE(" sparseResidencyImage2D: %#x.\n", info->features2.features.sparseResidencyImage2D); + TRACE(" sparseResidencyImage3D: %#x.\n", info->features2.features.sparseResidencyImage3D); + TRACE(" sparseResidency2Samples: %#x.\n", info->features2.features.sparseResidency2Samples); + TRACE(" sparseResidency4Samples: %#x.\n", info->features2.features.sparseResidency4Samples); + TRACE(" sparseResidency8Samples: %#x.\n", info->features2.features.sparseResidency8Samples); + TRACE(" sparseResidency16Samples: %#x.\n", info->features2.features.sparseResidency16Samples); + TRACE(" sparseResidencyAliased: %#x.\n", info->features2.features.sparseResidencyAliased); + TRACE(" variableMultisampleRate: %#x.\n", info->features2.features.variableMultisampleRate); + TRACE(" inheritedQueries: %#x.\n", info->features2.features.inheritedQueries); - descriptor_indexing = &info->descriptor_indexing_features; TRACE(" VkPhysicalDeviceDescriptorIndexingFeaturesEXT:\n"); - TRACE(" shaderInputAttachmentArrayDynamicIndexing: %#x.\n", - descriptor_indexing->shaderInputAttachmentArrayDynamicIndexing); + info->descriptor_indexing_features.shaderInputAttachmentArrayDynamicIndexing); TRACE(" shaderUniformTexelBufferArrayDynamicIndexing: %#x.\n", - descriptor_indexing->shaderUniformTexelBufferArrayDynamicIndexing); + info->descriptor_indexing_features.shaderUniformTexelBufferArrayDynamicIndexing); TRACE(" shaderStorageTexelBufferArrayDynamicIndexing: %#x.\n", - descriptor_indexing->shaderStorageTexelBufferArrayDynamicIndexing); + info->descriptor_indexing_features.shaderStorageTexelBufferArrayDynamicIndexing); TRACE(" shaderUniformBufferArrayNonUniformIndexing: %#x.\n", - descriptor_indexing->shaderUniformBufferArrayNonUniformIndexing); + info->descriptor_indexing_features.shaderUniformBufferArrayNonUniformIndexing); TRACE(" shaderSampledImageArrayNonUniformIndexing: %#x.\n", - descriptor_indexing->shaderSampledImageArrayNonUniformIndexing); + info->descriptor_indexing_features.shaderSampledImageArrayNonUniformIndexing); TRACE(" shaderStorageBufferArrayNonUniformIndexing: %#x.\n", - descriptor_indexing->shaderStorageBufferArrayNonUniformIndexing); + info->descriptor_indexing_features.shaderStorageBufferArrayNonUniformIndexing); TRACE(" shaderStorageImageArrayNonUniformIndexing: %#x.\n", - descriptor_indexing->shaderStorageImageArrayNonUniformIndexing); + info->descriptor_indexing_features.shaderStorageImageArrayNonUniformIndexing); TRACE(" shaderInputAttachmentArrayNonUniformIndexing: %#x.\n", - descriptor_indexing->shaderInputAttachmentArrayNonUniformIndexing); + info->descriptor_indexing_features.shaderInputAttachmentArrayNonUniformIndexing); TRACE(" shaderUniformTexelBufferArrayNonUniformIndexing: %#x.\n", - descriptor_indexing->shaderUniformTexelBufferArrayNonUniformIndexing); + info->descriptor_indexing_features.shaderUniformTexelBufferArrayNonUniformIndexing); TRACE(" shaderStorageTexelBufferArrayNonUniformIndexing: %#x.\n", - descriptor_indexing->shaderStorageTexelBufferArrayNonUniformIndexing); + info->descriptor_indexing_features.shaderStorageTexelBufferArrayNonUniformIndexing); TRACE(" descriptorBindingUniformBufferUpdateAfterBind: %#x.\n", - descriptor_indexing->descriptorBindingUniformBufferUpdateAfterBind); + info->descriptor_indexing_features.descriptorBindingUniformBufferUpdateAfterBind); TRACE(" descriptorBindingSampledImageUpdateAfterBind: %#x.\n", - descriptor_indexing->descriptorBindingSampledImageUpdateAfterBind); + info->descriptor_indexing_features.descriptorBindingSampledImageUpdateAfterBind); TRACE(" descriptorBindingStorageImageUpdateAfterBind: %#x.\n", - descriptor_indexing->descriptorBindingStorageImageUpdateAfterBind); + info->descriptor_indexing_features.descriptorBindingStorageImageUpdateAfterBind); TRACE(" descriptorBindingStorageBufferUpdateAfterBind: %#x.\n", - descriptor_indexing->descriptorBindingStorageBufferUpdateAfterBind); + info->descriptor_indexing_features.descriptorBindingStorageBufferUpdateAfterBind); TRACE(" descriptorBindingUniformTexelBufferUpdateAfterBind: %#x.\n", - descriptor_indexing->descriptorBindingUniformTexelBufferUpdateAfterBind); + info->descriptor_indexing_features.descriptorBindingUniformTexelBufferUpdateAfterBind); TRACE(" descriptorBindingStorageTexelBufferUpdateAfterBind: %#x.\n", - descriptor_indexing->descriptorBindingStorageTexelBufferUpdateAfterBind); + info->descriptor_indexing_features.descriptorBindingStorageTexelBufferUpdateAfterBind); TRACE(" descriptorBindingUpdateUnusedWhilePending: %#x.\n", - descriptor_indexing->descriptorBindingUpdateUnusedWhilePending); + info->descriptor_indexing_features.descriptorBindingUpdateUnusedWhilePending); TRACE(" descriptorBindingPartiallyBound: %#x.\n", - descriptor_indexing->descriptorBindingPartiallyBound); + info->descriptor_indexing_features.descriptorBindingPartiallyBound); TRACE(" descriptorBindingVariableDescriptorCount: %#x.\n", - descriptor_indexing->descriptorBindingVariableDescriptorCount); + info->descriptor_indexing_features.descriptorBindingVariableDescriptorCount); TRACE(" runtimeDescriptorArray: %#x.\n", - descriptor_indexing->runtimeDescriptorArray); + info->descriptor_indexing_features.runtimeDescriptorArray); - conditional_rendering_features = &info->conditional_rendering_features; TRACE(" VkPhysicalDeviceConditionalRenderingFeaturesEXT:\n"); - TRACE(" conditionalRendering: %#x.\n", conditional_rendering_features->conditionalRendering); + TRACE(" conditionalRendering: %#x.\n", info->conditional_rendering_features.conditionalRendering); - depth_clip_features = &info->depth_clip_features; TRACE(" VkPhysicalDeviceDepthClipEnableFeaturesEXT:\n"); - TRACE(" depthClipEnable: %#x.\n", depth_clip_features->depthClipEnable); + TRACE(" depthClipEnable: %#x.\n", info->depth_clip_features.depthClipEnable); - demote_features = &info->demote_features; TRACE(" VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT:\n"); - TRACE(" shaderDemoteToHelperInvocation: %#x.\n", demote_features->shaderDemoteToHelperInvocation); + TRACE(" shaderDemoteToHelperInvocation: %#x.\n", info->demote_features.shaderDemoteToHelperInvocation); - buffer_alignment_features = &info->texel_buffer_alignment_features; TRACE(" VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:\n"); - TRACE(" texelBufferAlignment: %#x.\n", buffer_alignment_features->texelBufferAlignment); + TRACE(" texelBufferAlignment: %#x.\n", info->texel_buffer_alignment_features.texelBufferAlignment); - xfb = &info->xfb_features; TRACE(" VkPhysicalDeviceTransformFeedbackFeaturesEXT:\n"); - TRACE(" transformFeedback: %#x.\n", xfb->transformFeedback); - TRACE(" geometryStreams: %#x.\n", xfb->geometryStreams); + TRACE(" transformFeedback: %#x.\n", info->xfb_features.transformFeedback); + TRACE(" geometryStreams: %#x.\n", info->xfb_features.geometryStreams); - divisor_features = &info->vertex_divisor_features; TRACE(" VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT:\n"); TRACE(" vertexAttributeInstanceRateDivisor: %#x.\n", - divisor_features->vertexAttributeInstanceRateDivisor); + info->vertex_divisor_features.vertexAttributeInstanceRateDivisor); TRACE(" vertexAttributeInstanceRateZeroDivisor: %#x.\n", - divisor_features->vertexAttributeInstanceRateZeroDivisor); + info->vertex_divisor_features.vertexAttributeInstanceRateZeroDivisor); - border_color_features = &info->custom_border_color_features; TRACE(" VkPhysicalDeviceCustomBorderColorFeaturesEXT:\n"); - TRACE(" customBorderColors: %#x\n", border_color_features->customBorderColors); - TRACE(" customBorderColorWithoutFormat: %#x\n", border_color_features->customBorderColorWithoutFormat); + TRACE(" customBorderColors: %#x\n", info->custom_border_color_features.customBorderColors); + TRACE(" customBorderColorWithoutFormat: %#x\n", info->custom_border_color_features.customBorderColorWithoutFormat); } static HRESULT vkd3d_init_device_extensions(struct d3d12_device *device,