winevulkan: Implement VK_EXT_calibrated_timestamps.
Map performance counter to the appropriate monotonic clock used by ntdll/unix/sync.c The performance counter timestamp clock won't be available under Mac and platforms without clock_gettime. Signed-off-by: Joshua Ashton <joshua@froggi.es> Signed-off-by: Liam Middlebrook <lmiddlebrook@nvidia.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
6299969a60
commit
8bd62231c3
|
@ -100,7 +100,6 @@ UNSUPPORTED_EXTENSIONS = [
|
|||
|
||||
# Device extensions
|
||||
"VK_AMD_display_native_hdr",
|
||||
"VK_EXT_calibrated_timestamps",
|
||||
"VK_EXT_display_control", # Requires VK_EXT_display_surface_counter
|
||||
"VK_EXT_full_screen_exclusive",
|
||||
"VK_EXT_hdr_metadata", # Needs WSI work.
|
||||
|
@ -222,6 +221,10 @@ FUNCTION_OVERRIDES = {
|
|||
# VK_EXT_private_data
|
||||
"vkGetPrivateDataEXT" : {"dispatch": True, "driver" : False, "thunk" : False},
|
||||
"vkSetPrivateDataEXT" : {"dispatch": True, "driver" : False, "thunk" : False},
|
||||
|
||||
# VK_EXT_calibrated_timestamps
|
||||
"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" : {"dispatch" : True, "driver" : False, "thunk" : False},
|
||||
"vkGetCalibratedTimestampsEXT" : {"dispatch" : True, "driver" : False, "thunk" : False},
|
||||
}
|
||||
|
||||
STRUCT_CHAIN_CONVERSIONS = [
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <time.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "windef.h"
|
||||
|
@ -1265,6 +1267,150 @@ VkResult WINAPI wine_vkGetPhysicalDeviceImageFormatProperties2KHR(VkPhysicalDevi
|
|||
return res;
|
||||
}
|
||||
|
||||
/* From ntdll/unix/sync.c */
|
||||
#define NANOSECONDS_IN_A_SECOND 1000000000
|
||||
#define TICKSPERSEC 10000000
|
||||
|
||||
static inline VkTimeDomainEXT get_performance_counter_time_domain(void)
|
||||
{
|
||||
#if !defined(__APPLE__) && defined(HAVE_CLOCK_GETTIME)
|
||||
# ifdef CLOCK_MONOTONIC_RAW
|
||||
return VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT;
|
||||
# else
|
||||
return VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT;
|
||||
# endif
|
||||
#else
|
||||
FIXME("No mapping for VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT on this platform.");
|
||||
return VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT;
|
||||
#endif
|
||||
}
|
||||
|
||||
static VkTimeDomainEXT map_to_host_time_domain(VkTimeDomainEXT domain)
|
||||
{
|
||||
/* Matches ntdll/unix/sync.c's performance counter implementation. */
|
||||
if (domain == VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT)
|
||||
return get_performance_counter_time_domain();
|
||||
|
||||
return domain;
|
||||
}
|
||||
|
||||
static inline uint64_t convert_monotonic_timestamp(uint64_t value)
|
||||
{
|
||||
return value / (NANOSECONDS_IN_A_SECOND / TICKSPERSEC);
|
||||
}
|
||||
|
||||
static inline uint64_t convert_timestamp(VkTimeDomainEXT host_domain, VkTimeDomainEXT target_domain, uint64_t value)
|
||||
{
|
||||
if (host_domain == target_domain)
|
||||
return value;
|
||||
|
||||
/* Convert between MONOTONIC time in ns -> QueryPerformanceCounter */
|
||||
if ((host_domain == VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT || host_domain == VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT)
|
||||
&& target_domain == VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT)
|
||||
return convert_monotonic_timestamp(value);
|
||||
|
||||
FIXME("Couldn't translate between host domain %d and target domain %d", host_domain, target_domain);
|
||||
return value;
|
||||
}
|
||||
|
||||
VkResult WINAPI wine_vkGetCalibratedTimestampsEXT(VkDevice device,
|
||||
uint32_t timestamp_count, const VkCalibratedTimestampInfoEXT *timestamp_infos,
|
||||
uint64_t *timestamps, uint64_t *max_deviation)
|
||||
{
|
||||
VkCalibratedTimestampInfoEXT* host_timestamp_infos;
|
||||
unsigned int i;
|
||||
VkResult res;
|
||||
TRACE("%p, %u, %p, %p, %p\n", device, timestamp_count, timestamp_infos, timestamps, max_deviation);
|
||||
|
||||
if (!(host_timestamp_infos = heap_alloc(sizeof(VkCalibratedTimestampInfoEXT) * timestamp_count)))
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
|
||||
for (i = 0; i < timestamp_count; i++)
|
||||
{
|
||||
host_timestamp_infos[i].sType = timestamp_infos[i].sType;
|
||||
host_timestamp_infos[i].pNext = timestamp_infos[i].pNext;
|
||||
host_timestamp_infos[i].timeDomain = map_to_host_time_domain(timestamp_infos[i].timeDomain);
|
||||
}
|
||||
|
||||
res = device->funcs.p_vkGetCalibratedTimestampsEXT(device->device, timestamp_count, host_timestamp_infos, timestamps, max_deviation);
|
||||
|
||||
for (i = 0; i < timestamp_count; i++)
|
||||
timestamps[i] = convert_timestamp(host_timestamp_infos[i].timeDomain, timestamp_infos[i].timeDomain, timestamps[i]);
|
||||
|
||||
heap_free(host_timestamp_infos);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
VkResult WINAPI wine_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(VkPhysicalDevice phys_dev,
|
||||
uint32_t *time_domain_count, VkTimeDomainEXT *time_domains)
|
||||
{
|
||||
BOOL supports_device = FALSE, supports_monotonic = FALSE, supports_monotonic_raw = FALSE;
|
||||
const VkTimeDomainEXT performance_counter_domain = get_performance_counter_time_domain();
|
||||
VkTimeDomainEXT *host_time_domains;
|
||||
uint32_t host_time_domain_count;
|
||||
VkTimeDomainEXT out_time_domains[2];
|
||||
uint32_t out_time_domain_count;
|
||||
unsigned int i;
|
||||
VkResult res;
|
||||
|
||||
TRACE("%p, %p, %p\n", phys_dev, time_domain_count, time_domains);
|
||||
|
||||
/* Find out the time domains supported on the host */
|
||||
res = phys_dev->instance->funcs.p_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(phys_dev->phys_dev, &host_time_domain_count, NULL);
|
||||
if (res != VK_SUCCESS)
|
||||
return res;
|
||||
|
||||
if (!(host_time_domains = heap_alloc(sizeof(VkTimeDomainEXT) * host_time_domain_count)))
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
|
||||
res = phys_dev->instance->funcs.p_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(phys_dev->phys_dev, &host_time_domain_count, host_time_domains);
|
||||
if (res != VK_SUCCESS)
|
||||
return res;
|
||||
|
||||
for (i = 0; i < host_time_domain_count; i++)
|
||||
{
|
||||
if (host_time_domains[i] == VK_TIME_DOMAIN_DEVICE_EXT)
|
||||
supports_device = TRUE;
|
||||
else if (host_time_domains[i] == VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT)
|
||||
supports_monotonic = TRUE;
|
||||
else if (host_time_domains[i] == VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT)
|
||||
supports_monotonic_raw = TRUE;
|
||||
else
|
||||
FIXME("Unknown time domain %d", host_time_domains[i]);
|
||||
}
|
||||
|
||||
heap_free(host_time_domains);
|
||||
|
||||
out_time_domain_count = 0;
|
||||
|
||||
/* Map our monotonic times -> QPC */
|
||||
if (supports_monotonic_raw && performance_counter_domain == VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT)
|
||||
out_time_domains[out_time_domain_count++] = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT;
|
||||
else if (supports_monotonic && performance_counter_domain == VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT)
|
||||
out_time_domains[out_time_domain_count++] = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT;
|
||||
else
|
||||
FIXME("VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT not supported on this platform.");
|
||||
|
||||
/* Forward the device domain time */
|
||||
if (supports_device)
|
||||
out_time_domains[out_time_domain_count++] = VK_TIME_DOMAIN_DEVICE_EXT;
|
||||
|
||||
/* Send the count/domains back to the app */
|
||||
if (!time_domains)
|
||||
{
|
||||
*time_domain_count = out_time_domain_count;
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
for (i = 0; i < min(*time_domain_count, out_time_domain_count); i++)
|
||||
time_domains[i] = out_time_domains[i];
|
||||
|
||||
res = *time_domain_count < out_time_domain_count ? VK_INCOMPLETE : VK_SUCCESS;
|
||||
*time_domain_count = out_time_domain_count;
|
||||
return res;
|
||||
}
|
||||
|
||||
static HANDLE get_display_device_init_mutex(void)
|
||||
{
|
||||
static const WCHAR init_mutexW[] = {'d','i','s','p','l','a','y','_','d','e','v','i','c','e','_','i','n','i','t',0};
|
||||
|
|
|
@ -5622,6 +5622,7 @@ static const struct vulkan_func vk_device_dispatch_table[] =
|
|||
{"vkGetBufferMemoryRequirements2KHR", &wine_vkGetBufferMemoryRequirements2KHR},
|
||||
{"vkGetBufferOpaqueCaptureAddress", &wine_vkGetBufferOpaqueCaptureAddress},
|
||||
{"vkGetBufferOpaqueCaptureAddressKHR", &wine_vkGetBufferOpaqueCaptureAddressKHR},
|
||||
{"vkGetCalibratedTimestampsEXT", &wine_vkGetCalibratedTimestampsEXT},
|
||||
{"vkGetDescriptorSetLayoutSupport", &wine_vkGetDescriptorSetLayoutSupport},
|
||||
{"vkGetDescriptorSetLayoutSupportKHR", &wine_vkGetDescriptorSetLayoutSupportKHR},
|
||||
{"vkGetDeviceGroupPeerMemoryFeatures", &wine_vkGetDeviceGroupPeerMemoryFeatures},
|
||||
|
@ -5708,6 +5709,7 @@ static const struct vulkan_func vk_instance_dispatch_table[] =
|
|||
{"vkEnumeratePhysicalDeviceGroupsKHR", &wine_vkEnumeratePhysicalDeviceGroupsKHR},
|
||||
{"vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR", &wine_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR},
|
||||
{"vkEnumeratePhysicalDevices", &wine_vkEnumeratePhysicalDevices},
|
||||
{"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT", &wine_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT},
|
||||
{"vkGetPhysicalDeviceCooperativeMatrixPropertiesNV", &wine_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV},
|
||||
{"vkGetPhysicalDeviceExternalBufferProperties", &wine_vkGetPhysicalDeviceExternalBufferProperties},
|
||||
{"vkGetPhysicalDeviceExternalBufferPropertiesKHR", &wine_vkGetPhysicalDeviceExternalBufferPropertiesKHR},
|
||||
|
@ -5803,6 +5805,7 @@ static const char * const vk_device_extensions[] =
|
|||
"VK_EXT_astc_decode_mode",
|
||||
"VK_EXT_blend_operation_advanced",
|
||||
"VK_EXT_buffer_device_address",
|
||||
"VK_EXT_calibrated_timestamps",
|
||||
"VK_EXT_conditional_rendering",
|
||||
"VK_EXT_conservative_rasterization",
|
||||
"VK_EXT_custom_border_color",
|
||||
|
|
|
@ -27,9 +27,11 @@ VkResult WINAPI wine_vkEnumeratePhysicalDeviceGroups(VkInstance instance, uint32
|
|||
VkResult WINAPI wine_vkEnumeratePhysicalDeviceGroupsKHR(VkInstance instance, uint32_t *pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties *pPhysicalDeviceGroupProperties) DECLSPEC_HIDDEN;
|
||||
VkResult WINAPI wine_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, VkPhysicalDevice *pPhysicalDevices);
|
||||
void WINAPI wine_vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers);
|
||||
VkResult WINAPI wine_vkGetCalibratedTimestampsEXT(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT *pTimestampInfos, uint64_t *pTimestamps, uint64_t *pMaxDeviation) DECLSPEC_HIDDEN;
|
||||
PFN_vkVoidFunction WINAPI wine_vkGetDeviceProcAddr(VkDevice device, const char *pName);
|
||||
void WINAPI wine_vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue);
|
||||
void WINAPI wine_vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2 *pQueueInfo, VkQueue *pQueue);
|
||||
VkResult WINAPI wine_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(VkPhysicalDevice physicalDevice, uint32_t *pTimeDomainCount, VkTimeDomainEXT *pTimeDomains) DECLSPEC_HIDDEN;
|
||||
void WINAPI wine_vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo, VkExternalBufferProperties *pExternalBufferProperties);
|
||||
void WINAPI wine_vkGetPhysicalDeviceExternalBufferPropertiesKHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo, VkExternalBufferProperties *pExternalBufferProperties) DECLSPEC_HIDDEN;
|
||||
void WINAPI wine_vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo *pExternalFenceInfo, VkExternalFenceProperties *pExternalFenceProperties);
|
||||
|
@ -1355,6 +1357,7 @@ struct vulkan_device_funcs
|
|||
#else
|
||||
uint64_t (*p_vkGetBufferOpaqueCaptureAddressKHR)(VkDevice, const VkBufferDeviceAddressInfo *);
|
||||
#endif
|
||||
VkResult (*p_vkGetCalibratedTimestampsEXT)(VkDevice, uint32_t, const VkCalibratedTimestampInfoEXT *, uint64_t *, uint64_t *);
|
||||
void (*p_vkGetDescriptorSetLayoutSupport)(VkDevice, const VkDescriptorSetLayoutCreateInfo *, VkDescriptorSetLayoutSupport *);
|
||||
void (*p_vkGetDescriptorSetLayoutSupportKHR)(VkDevice, const VkDescriptorSetLayoutCreateInfo *, VkDescriptorSetLayoutSupport *);
|
||||
void (*p_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice, uint32_t, uint32_t, uint32_t, VkPeerMemoryFeatureFlags *);
|
||||
|
@ -1508,6 +1511,7 @@ struct vulkan_instance_funcs
|
|||
VkResult (*p_vkEnumeratePhysicalDeviceGroupsKHR)(VkInstance, uint32_t *, VkPhysicalDeviceGroupProperties *);
|
||||
VkResult (*p_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)(VkPhysicalDevice, uint32_t, uint32_t *, VkPerformanceCounterKHR *, VkPerformanceCounterDescriptionKHR *);
|
||||
VkResult (*p_vkEnumeratePhysicalDevices)(VkInstance, uint32_t *, VkPhysicalDevice *);
|
||||
VkResult (*p_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice, uint32_t *, VkTimeDomainEXT *);
|
||||
VkResult (*p_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice, uint32_t *, VkCooperativeMatrixPropertiesNV *);
|
||||
void (*p_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice, VkPhysicalDeviceFeatures *);
|
||||
void (*p_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice, VkPhysicalDeviceFeatures2 *);
|
||||
|
@ -1785,6 +1789,7 @@ struct vulkan_instance_funcs
|
|||
USE_VK_FUNC(vkGetBufferMemoryRequirements2KHR) \
|
||||
USE_VK_FUNC(vkGetBufferOpaqueCaptureAddress) \
|
||||
USE_VK_FUNC(vkGetBufferOpaqueCaptureAddressKHR) \
|
||||
USE_VK_FUNC(vkGetCalibratedTimestampsEXT) \
|
||||
USE_VK_FUNC(vkGetDescriptorSetLayoutSupport) \
|
||||
USE_VK_FUNC(vkGetDescriptorSetLayoutSupportKHR) \
|
||||
USE_VK_FUNC(vkGetDeviceGroupPeerMemoryFeatures) \
|
||||
|
@ -1867,6 +1872,7 @@ struct vulkan_instance_funcs
|
|||
USE_VK_FUNC(vkEnumeratePhysicalDeviceGroupsKHR) \
|
||||
USE_VK_FUNC(vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR) \
|
||||
USE_VK_FUNC(vkEnumeratePhysicalDevices) \
|
||||
USE_VK_FUNC(vkGetPhysicalDeviceCalibrateableTimeDomainsEXT) \
|
||||
USE_VK_FUNC(vkGetPhysicalDeviceCooperativeMatrixPropertiesNV) \
|
||||
USE_VK_FUNC(vkGetPhysicalDeviceFeatures) \
|
||||
USE_VK_FUNC(vkGetPhysicalDeviceFeatures2) \
|
||||
|
|
|
@ -257,6 +257,8 @@
|
|||
#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock"
|
||||
#define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1
|
||||
#define VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME "VK_AMD_pipeline_compiler_control"
|
||||
#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1
|
||||
#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps"
|
||||
#define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2
|
||||
#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties"
|
||||
#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1
|
||||
|
@ -2772,6 +2774,7 @@ typedef enum VkStructureType
|
|||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = 1000180000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000,
|
||||
VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000,
|
||||
VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
|
||||
|
@ -3067,6 +3070,15 @@ typedef enum VkTessellationDomainOrigin
|
|||
} VkTessellationDomainOrigin;
|
||||
typedef VkTessellationDomainOrigin VkTessellationDomainOriginKHR;
|
||||
|
||||
typedef enum VkTimeDomainEXT
|
||||
{
|
||||
VK_TIME_DOMAIN_DEVICE_EXT = 0,
|
||||
VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1,
|
||||
VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2,
|
||||
VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3,
|
||||
VK_TIME_DOMAIN_EXT_MAX_ENUM = 0x7fffffff,
|
||||
} VkTimeDomainEXT;
|
||||
|
||||
typedef enum VkToolPurposeFlagBitsEXT
|
||||
{
|
||||
VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = 0x00000001,
|
||||
|
@ -3306,6 +3318,13 @@ typedef struct VkBufferMemoryBarrier
|
|||
VkDeviceSize WINE_VK_ALIGN(8) size;
|
||||
} VkBufferMemoryBarrier;
|
||||
|
||||
typedef struct VkCalibratedTimestampInfoEXT
|
||||
{
|
||||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkTimeDomainEXT timeDomain;
|
||||
} VkCalibratedTimestampInfoEXT;
|
||||
|
||||
typedef union VkClearColorValue
|
||||
{
|
||||
float float32[4];
|
||||
|
@ -7560,6 +7579,7 @@ typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice, const VkB
|
|||
typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice, const VkBufferMemoryRequirementsInfo2 *, VkMemoryRequirements2 *);
|
||||
typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddress)(VkDevice, const VkBufferDeviceAddressInfo *);
|
||||
typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddressKHR)(VkDevice, const VkBufferDeviceAddressInfo *);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice, uint32_t, const VkCalibratedTimestampInfoEXT *, uint64_t *, uint64_t *);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice, const VkDescriptorSetLayoutCreateInfo *, VkDescriptorSetLayoutSupport *);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupportKHR)(VkDevice, const VkDescriptorSetLayoutCreateInfo *, VkDescriptorSetLayoutSupport *);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice, uint32_t, uint32_t, uint32_t, VkPeerMemoryFeatureFlags *);
|
||||
|
@ -7585,6 +7605,7 @@ typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice, VkImage, con
|
|||
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance, const char *);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice, VkExternalMemoryHandleTypeFlagBits, const void *, VkMemoryHostPointerPropertiesEXT *);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceParameterINTEL)(VkDevice, VkPerformanceParameterTypeINTEL, VkPerformanceValueINTEL *);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice, uint32_t *, VkTimeDomainEXT *);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice, uint32_t *, VkCooperativeMatrixPropertiesNV *);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice, const VkPhysicalDeviceExternalBufferInfo *, VkExternalBufferProperties *);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice, const VkPhysicalDeviceExternalBufferInfo *, VkExternalBufferProperties *);
|
||||
|
@ -7885,6 +7906,7 @@ void VKAPI_CALL vkGetBufferMemoryRequirements2(VkDevice device, const VkBufferMe
|
|||
void VKAPI_CALL vkGetBufferMemoryRequirements2KHR(VkDevice device, const VkBufferMemoryRequirementsInfo2 *pInfo, VkMemoryRequirements2 *pMemoryRequirements);
|
||||
uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress(VkDevice device, const VkBufferDeviceAddressInfo *pInfo);
|
||||
uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR(VkDevice device, const VkBufferDeviceAddressInfo *pInfo);
|
||||
VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT *pTimestampInfos, uint64_t *pTimestamps, uint64_t *pMaxDeviation);
|
||||
void VKAPI_CALL vkGetDescriptorSetLayoutSupport(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, VkDescriptorSetLayoutSupport *pSupport);
|
||||
void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, VkDescriptorSetLayoutSupport *pSupport);
|
||||
void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags *pPeerMemoryFeatures);
|
||||
|
@ -7910,6 +7932,7 @@ void VKAPI_CALL vkGetImageSubresourceLayout(VkDevice device, VkImage image, cons
|
|||
PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *pName);
|
||||
VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void *pHostPointer, VkMemoryHostPointerPropertiesEXT *pMemoryHostPointerProperties);
|
||||
VkResult VKAPI_CALL vkGetPerformanceParameterINTEL(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL *pValue);
|
||||
VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(VkPhysicalDevice physicalDevice, uint32_t *pTimeDomainCount, VkTimeDomainEXT *pTimeDomains);
|
||||
VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkCooperativeMatrixPropertiesNV *pProperties);
|
||||
void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo, VkExternalBufferProperties *pExternalBufferProperties);
|
||||
void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo, VkExternalBufferProperties *pExternalBufferProperties);
|
||||
|
|
Loading…
Reference in New Issue