=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Trace VK_EXT_vertex_attribute_divisor properties.
Alexandre Julliard
julliard at winehq.org
Thu Oct 25 15:23:43 CDT 2018
Module: vkd3d
Branch: master
Commit: b2dc48c61126edb0be68f47b8797fa91ceb15111
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=b2dc48c61126edb0be68f47b8797fa91ceb15111
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Thu Oct 25 11:24:06 2018 +0200
vkd3d: Trace VK_EXT_vertex_attribute_divisor properties.
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
libs/vkd3d/device.c | 35 +++++++++++++++++++++++++++++------
libs/vkd3d/vulkan_procs.h | 1 +
2 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index e9a3963..0adebcf 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -575,7 +575,6 @@ static void vkd3d_trace_physical_device(VkPhysicalDevice device,
VkPhysicalDeviceMemoryProperties memory_properties;
VkPhysicalDeviceProperties device_properties;
VkQueueFamilyProperties *queue_properties;
- VkPhysicalDeviceLimits *limits;
unsigned int i, j;
uint32_t count;
@@ -616,8 +615,13 @@ static void vkd3d_trace_physical_device(VkPhysicalDevice device,
TRACE(" Memory type [%u]: flags %s.\n", j, debug_vk_memory_property_flags(type->propertyFlags));
}
}
+}
+
+static void vkd3d_trace_physical_device_limits(const VkPhysicalDeviceProperties2KHR *properties2)
+{
+ const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *divisor_properties;
+ const VkPhysicalDeviceLimits *limits = &properties2->properties.limits;
- limits = &device_properties.limits;
TRACE("Device limits:\n");
TRACE(" maxImageDimension1D: %u.\n", limits->maxImageDimension1D);
TRACE(" maxImageDimension2D: %u.\n", limits->maxImageDimension2D);
@@ -734,6 +738,14 @@ static void vkd3d_trace_physical_device(VkPhysicalDevice device,
TRACE(" optimalBufferCopyOffsetAlignment: %#"PRIx64".\n", limits->optimalBufferCopyOffsetAlignment);
TRACE(" optimalBufferCopyRowPitchAlignment: %#"PRIx64".\n", limits->optimalBufferCopyRowPitchAlignment);
TRACE(" nonCoherentAtomSize: %#"PRIx64".\n", limits->nonCoherentAtomSize);
+
+ divisor_properties
+ = vk_find_struct(properties2->pNext, PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT);
+ if (divisor_properties)
+ {
+ TRACE(" VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:\n");
+ TRACE(" maxVertexAttribDivisor: %u.\n", divisor_properties->maxVertexAttribDivisor);
+ }
}
static void vkd3d_trace_physical_device_features(const VkPhysicalDeviceFeatures2KHR *features2)
@@ -866,11 +878,12 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device,
VkPhysicalDeviceFeatures2KHR *features2, uint32_t *device_extension_count)
{
const struct vkd3d_vk_instance_procs *vk_procs = &device->vkd3d_instance->vk_procs;
+ VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT vertex_divisor_properties;
const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *divisor_features;
VkPhysicalDevice physical_device = device->vk_physical_device;
VkPhysicalDeviceFeatures *features = &features2->features;
struct vkd3d_vulkan_info *vulkan_info = &device->vk_info;
- VkPhysicalDeviceProperties device_properties;
+ VkPhysicalDeviceProperties2KHR device_properties2;
VkExtensionProperties *vk_extensions;
uint32_t count;
VkResult vr;
@@ -879,9 +892,19 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device,
vkd3d_trace_physical_device_features(features2);
- VK_CALL(vkGetPhysicalDeviceProperties(physical_device, &device_properties));
- vulkan_info->device_limits = device_properties.limits;
- vulkan_info->sparse_properties = device_properties.sparseProperties;
+ memset(&vertex_divisor_properties, 0, sizeof(vertex_divisor_properties));
+ vertex_divisor_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT;
+ device_properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
+ device_properties2.pNext = &vertex_divisor_properties;
+ if (vulkan_info->KHR_get_physical_device_properties2)
+ VK_CALL(vkGetPhysicalDeviceProperties2KHR(physical_device, &device_properties2));
+ else
+ VK_CALL(vkGetPhysicalDeviceProperties(physical_device, &device_properties2.properties));
+
+ vkd3d_trace_physical_device_limits(&device_properties2);
+
+ vulkan_info->device_limits = device_properties2.properties.limits;
+ vulkan_info->sparse_properties = device_properties2.properties.sparseProperties;
device->feature_options.DoublePrecisionFloatShaderOps = features->shaderFloat64;
device->feature_options.OutputMergerLogicOp = features->logicOp;
diff --git a/libs/vkd3d/vulkan_procs.h b/libs/vkd3d/vulkan_procs.h
index e14121c..ac03b3f 100644
--- a/libs/vkd3d/vulkan_procs.h
+++ b/libs/vkd3d/vulkan_procs.h
@@ -48,6 +48,7 @@ VK_INSTANCE_PFN(vkGetPhysicalDeviceQueueFamilyProperties)
VK_INSTANCE_PFN(vkGetPhysicalDeviceSparseImageFormatProperties)
/* VK_KHR_get_physical_device_properties2 */
VK_INSTANCE_EXT_PFN(vkGetPhysicalDeviceFeatures2KHR)
+VK_INSTANCE_EXT_PFN(vkGetPhysicalDeviceProperties2KHR)
/* VK_EXT_debug_report */
VK_INSTANCE_EXT_PFN(vkCreateDebugReportCallbackEXT)
VK_INSTANCE_EXT_PFN(vkDestroyDebugReportCallbackEXT)
More information about the wine-cvs
mailing list