|
|
|
@@ -43,6 +43,45 @@ static int g_default_gpu_index = -1; |
|
|
|
// NOTE 8 is large enough i think ... |
|
|
|
static GpuInfo g_gpu_infos[8]; |
|
|
|
|
|
|
|
int support_VK_KHR_get_physical_device_properties2 = 0; |
|
|
|
int support_VK_EXT_debug_utils = 0; |
|
|
|
|
|
|
|
// VK_KHR_get_physical_device_properties2 |
|
|
|
PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR = 0; |
|
|
|
PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR = 0; |
|
|
|
PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR = 0; |
|
|
|
PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0; |
|
|
|
PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR = 0; |
|
|
|
PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0; |
|
|
|
PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 0; |
|
|
|
|
|
|
|
// compile with old vulkan sdk |
|
|
|
#if VK_HEADER_VERSION < 95 |
|
|
|
#define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR (VkStructureType)1000082000 |
|
|
|
typedef struct VkPhysicalDeviceFloat16Int8FeaturesKHR { |
|
|
|
VkStructureType sType; |
|
|
|
void* pNext; |
|
|
|
VkBool32 shaderFloat16; |
|
|
|
VkBool32 shaderInt8; |
|
|
|
} VkPhysicalDeviceFloat16Int8FeaturesKHR; |
|
|
|
#endif // VK_HEADER_VERSION < 95 |
|
|
|
|
|
|
|
static int init_instance_extension() |
|
|
|
{ |
|
|
|
if (support_VK_KHR_get_physical_device_properties2) |
|
|
|
{ |
|
|
|
vkGetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceFeatures2KHR"); |
|
|
|
vkGetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceProperties2KHR"); |
|
|
|
vkGetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceFormatProperties2KHR"); |
|
|
|
vkGetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceImageFormatProperties2KHR"); |
|
|
|
vkGetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); |
|
|
|
vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceMemoryProperties2KHR"); |
|
|
|
vkGetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
#if ENABLE_VALIDATION_LAYER |
|
|
|
static VkDebugUtilsMessengerEXT callback; |
|
|
|
|
|
|
|
@@ -319,23 +358,26 @@ int create_gpu_instance() |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
support_VK_KHR_get_physical_device_properties2 = 0; |
|
|
|
support_VK_EXT_debug_utils = 0; |
|
|
|
for (uint32_t j=0; j<instanceExtensionPropertyCount; j++) |
|
|
|
{ |
|
|
|
const VkExtensionProperties& exp = instanceExtensionProperties[j]; |
|
|
|
// fprintf(stderr, "instance extension %s = %u\n", exp.extensionName, exp.specVersion); |
|
|
|
|
|
|
|
if (strcmp(exp.extensionName, "VK_KHR_get_physical_device_properties2") == 0) |
|
|
|
{ |
|
|
|
enabledExtensions.push_back("VK_KHR_get_physical_device_properties2"); |
|
|
|
} |
|
|
|
#if ENABLE_VALIDATION_LAYER |
|
|
|
support_VK_KHR_get_physical_device_properties2 = exp.specVersion; |
|
|
|
if (strcmp(exp.extensionName, "VK_EXT_debug_utils") == 0) |
|
|
|
{ |
|
|
|
enabledExtensions.push_back("VK_EXT_debug_utils"); |
|
|
|
} |
|
|
|
#endif // ENABLE_VALIDATION_LAYER |
|
|
|
support_VK_EXT_debug_utils = exp.specVersion; |
|
|
|
} |
|
|
|
|
|
|
|
if (support_VK_KHR_get_physical_device_properties2) |
|
|
|
enabledExtensions.push_back("VK_KHR_get_physical_device_properties2"); |
|
|
|
#if ENABLE_VALIDATION_LAYER |
|
|
|
if (support_VK_EXT_debug_utils) |
|
|
|
enabledExtensions.push_back("VK_EXT_debug_utils"); |
|
|
|
#endif // ENABLE_VALIDATION_LAYER |
|
|
|
|
|
|
|
VkApplicationInfo applicationInfo; |
|
|
|
applicationInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; |
|
|
|
applicationInfo.pNext = 0; |
|
|
|
@@ -363,20 +405,25 @@ int create_gpu_instance() |
|
|
|
} |
|
|
|
|
|
|
|
#if ENABLE_VALIDATION_LAYER |
|
|
|
VkDebugUtilsMessengerCreateInfoEXT createInfo = {}; |
|
|
|
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; |
|
|
|
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; |
|
|
|
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; |
|
|
|
createInfo.pfnUserCallback = debugCallback; |
|
|
|
createInfo.pUserData = 0; |
|
|
|
ret = CreateDebugUtilsMessengerEXT(g_instance, &createInfo, nullptr, &callback); |
|
|
|
if (ret != VK_SUCCESS) |
|
|
|
{ |
|
|
|
fprintf(stderr, "CreateDebugUtilsMessengerEXT failed %d\n", ret); |
|
|
|
return -1; |
|
|
|
if (support_VK_EXT_debug_utils) |
|
|
|
{ |
|
|
|
VkDebugUtilsMessengerCreateInfoEXT createInfo = {}; |
|
|
|
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; |
|
|
|
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; |
|
|
|
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; |
|
|
|
createInfo.pfnUserCallback = debugCallback; |
|
|
|
createInfo.pUserData = 0; |
|
|
|
ret = CreateDebugUtilsMessengerEXT(g_instance, &createInfo, NULL, &callback); |
|
|
|
if (ret != VK_SUCCESS) |
|
|
|
{ |
|
|
|
fprintf(stderr, "CreateDebugUtilsMessengerEXT failed %d\n", ret); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |
|
|
|
#endif // ENABLE_VALIDATION_LAYER |
|
|
|
|
|
|
|
init_instance_extension(); |
|
|
|
|
|
|
|
uint32_t physicalDeviceCount = 0; |
|
|
|
ret = vkEnumeratePhysicalDevices(g_instance, &physicalDeviceCount, 0); |
|
|
|
if (ret != VK_SUCCESS) |
|
|
|
@@ -476,15 +523,6 @@ int create_gpu_instance() |
|
|
|
// fprintf(stderr, "[%u] memory_map_alignment = %lu\n", i, gpu_info.memory_map_alignment); |
|
|
|
// fprintf(stderr, "[%u] buffer_offset_alignment = %lu\n", i, gpu_info.buffer_offset_alignment); |
|
|
|
|
|
|
|
// // TODO check features |
|
|
|
// VkPhysicalDeviceFeatures features; |
|
|
|
// vkGetPhysicalDeviceFeatures(physicalDevice, &features); |
|
|
|
// |
|
|
|
// // TODO check formatProperties |
|
|
|
// VkFormat format = VK_FORMAT_R32_SFLOAT; |
|
|
|
// VkFormatProperties formatProperties; |
|
|
|
// vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &formatProperties); |
|
|
|
|
|
|
|
// find compute queue |
|
|
|
uint32_t queueFamilyPropertiesCount; |
|
|
|
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, 0); |
|
|
|
@@ -552,7 +590,6 @@ int create_gpu_instance() |
|
|
|
gpu_info.support_VK_KHR_dedicated_allocation = 0; |
|
|
|
gpu_info.support_VK_KHR_descriptor_update_template = 0; |
|
|
|
gpu_info.support_VK_KHR_get_memory_requirements2 = 0; |
|
|
|
gpu_info.support_VK_KHR_get_physical_device_properties2 = 0; |
|
|
|
gpu_info.support_VK_KHR_push_descriptor = 0; |
|
|
|
gpu_info.support_VK_KHR_shader_float16_int8 = 0; |
|
|
|
gpu_info.support_VK_KHR_shader_float_controls = 0; |
|
|
|
@@ -574,8 +611,6 @@ int create_gpu_instance() |
|
|
|
gpu_info.support_VK_KHR_descriptor_update_template = exp.specVersion; |
|
|
|
else if (strcmp(exp.extensionName, "VK_KHR_get_memory_requirements2") == 0) |
|
|
|
gpu_info.support_VK_KHR_get_memory_requirements2 = exp.specVersion; |
|
|
|
else if (strcmp(exp.extensionName, "VK_KHR_get_physical_device_properties2") == 0) |
|
|
|
gpu_info.support_VK_KHR_get_physical_device_properties2 = exp.specVersion; |
|
|
|
else if (strcmp(exp.extensionName, "VK_KHR_push_descriptor") == 0) |
|
|
|
gpu_info.support_VK_KHR_push_descriptor = exp.specVersion; |
|
|
|
else if (strcmp(exp.extensionName, "VK_KHR_shader_float16_int8") == 0) |
|
|
|
@@ -586,22 +621,79 @@ int create_gpu_instance() |
|
|
|
gpu_info.support_VK_KHR_storage_buffer_storage_class = exp.specVersion; |
|
|
|
} |
|
|
|
|
|
|
|
// fprintf(stderr, "[%u] VK_KHR_8bit_storage = %d\n", i, gpu_info.support_VK_KHR_8bit_storage); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_16bit_storage = %d\n", i, gpu_info.support_VK_KHR_16bit_storage); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_bind_memory2 = %d\n", i, gpu_info.support_VK_KHR_bind_memory2); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_dedicated_allocation = %d\n", i, gpu_info.support_VK_KHR_dedicated_allocation); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_descriptor_update_template = %d\n", i, gpu_info.support_VK_KHR_descriptor_update_template); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_get_memory_requirements2 = %d\n", i, gpu_info.support_VK_KHR_get_memory_requirements2); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_get_physical_device_properties2 = %d\n", i, gpu_info.support_VK_KHR_get_physical_device_properties2); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_push_descriptor = %d\n", i, gpu_info.support_VK_KHR_push_descriptor); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_shader_float16_int8 = %d\n", i, gpu_info.support_VK_KHR_shader_float16_int8); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_shader_float_controls = %d\n", i, gpu_info.support_VK_KHR_shader_float_controls); |
|
|
|
// fprintf(stderr, "[%u] VK_KHR_storage_buffer_storage_class = %d\n", i, gpu_info.support_VK_KHR_storage_buffer_storage_class); |
|
|
|
// check features |
|
|
|
gpu_info.fp16_storage = false; |
|
|
|
gpu_info.fp16_arithmetic = false; |
|
|
|
gpu_info.int8_storage = false; |
|
|
|
gpu_info.int8_arithmetic = false; |
|
|
|
if (support_VK_KHR_get_physical_device_properties2) |
|
|
|
{ |
|
|
|
void* queryExtensionFeatures = 0; |
|
|
|
|
|
|
|
// query int8 storage |
|
|
|
VkPhysicalDevice8BitStorageFeaturesKHR query8BitStorageFeatures; |
|
|
|
query8BitStorageFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR; |
|
|
|
query8BitStorageFeatures.pNext = 0; |
|
|
|
if (gpu_info.support_VK_KHR_8bit_storage) |
|
|
|
{ |
|
|
|
query8BitStorageFeatures.pNext = queryExtensionFeatures; |
|
|
|
queryExtensionFeatures = &query8BitStorageFeatures; |
|
|
|
} |
|
|
|
|
|
|
|
// query fp16/int16 storage |
|
|
|
VkPhysicalDevice16BitStorageFeaturesKHR query16BitStorageFeatures; |
|
|
|
query16BitStorageFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR; |
|
|
|
query16BitStorageFeatures.pNext = 0; |
|
|
|
if (gpu_info.support_VK_KHR_16bit_storage) |
|
|
|
{ |
|
|
|
query16BitStorageFeatures.pNext = queryExtensionFeatures; |
|
|
|
queryExtensionFeatures = &query16BitStorageFeatures; |
|
|
|
} |
|
|
|
|
|
|
|
// query fp16/int8 arithmetic |
|
|
|
VkPhysicalDeviceFloat16Int8FeaturesKHR queryFloat16Int8Features; |
|
|
|
queryFloat16Int8Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR; |
|
|
|
queryFloat16Int8Features.pNext = 0; |
|
|
|
if (gpu_info.support_VK_KHR_shader_float16_int8) |
|
|
|
{ |
|
|
|
queryFloat16Int8Features.pNext = queryExtensionFeatures; |
|
|
|
queryExtensionFeatures = &queryFloat16Int8Features; |
|
|
|
} |
|
|
|
|
|
|
|
VkPhysicalDeviceFeatures2KHR queryFeatures; |
|
|
|
queryFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, |
|
|
|
queryFeatures.pNext = queryExtensionFeatures; |
|
|
|
|
|
|
|
vkGetPhysicalDeviceFeatures2KHR(physicalDevice, &queryFeatures); |
|
|
|
|
|
|
|
if (gpu_info.support_VK_KHR_8bit_storage) |
|
|
|
{ |
|
|
|
gpu_info.int8_storage = query8BitStorageFeatures.storageBuffer8BitAccess; |
|
|
|
} |
|
|
|
if (gpu_info.support_VK_KHR_16bit_storage) |
|
|
|
{ |
|
|
|
gpu_info.fp16_storage = query16BitStorageFeatures.storageBuffer16BitAccess; |
|
|
|
} |
|
|
|
if (gpu_info.support_VK_KHR_shader_float16_int8) |
|
|
|
{ |
|
|
|
gpu_info.int8_arithmetic = queryFloat16Int8Features.shaderFloat16; |
|
|
|
gpu_info.fp16_arithmetic = queryFloat16Int8Features.shaderInt8; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
// // TODO |
|
|
|
// VkPhysicalDeviceFeatures features; |
|
|
|
// vkGetPhysicalDeviceFeatures(physicalDevice, &features); |
|
|
|
} |
|
|
|
|
|
|
|
fprintf(stderr, "[%u %s] queueC=%u queueT=%u memU=%u memDL=%u memHV=%u\n", i, physicalDeviceProperties.deviceName, |
|
|
|
gpu_info.compute_queue_index, gpu_info.transfer_queue_index, |
|
|
|
gpu_info.unified_memory_index, gpu_info.device_local_memory_index, gpu_info.host_visible_memory_index); |
|
|
|
|
|
|
|
fprintf(stderr, "[%u %s] fp16s=%d fp16a=%d int8s=%d int8a=%d\n", i, physicalDeviceProperties.deviceName, |
|
|
|
gpu_info.fp16_storage, gpu_info.fp16_arithmetic, gpu_info.int8_storage, gpu_info.int8_arithmetic); |
|
|
|
|
|
|
|
gpu_info_index++; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -616,7 +708,10 @@ int create_gpu_instance() |
|
|
|
void destroy_gpu_instance() |
|
|
|
{ |
|
|
|
#if ENABLE_VALIDATION_LAYER |
|
|
|
DestroyDebugUtilsMessengerEXT(g_instance, callback, NULL); |
|
|
|
if (support_VK_EXT_debug_utils) |
|
|
|
{ |
|
|
|
DestroyDebugUtilsMessengerEXT(g_instance, callback, NULL); |
|
|
|
} |
|
|
|
#endif // ENABLE_VALIDATION_LAYER |
|
|
|
|
|
|
|
vkDestroyInstance(g_instance, 0); |
|
|
|
@@ -670,8 +765,6 @@ VulkanDevice::VulkanDevice(int device_index) : info(g_gpu_infos[device_index]) |
|
|
|
enabledExtensions.push_back("VK_KHR_descriptor_update_template"); |
|
|
|
if (info.support_VK_KHR_get_memory_requirements2) |
|
|
|
enabledExtensions.push_back("VK_KHR_get_memory_requirements2"); |
|
|
|
if (info.support_VK_KHR_get_physical_device_properties2) |
|
|
|
enabledExtensions.push_back("VK_KHR_get_physical_device_properties2"); |
|
|
|
if (info.support_VK_KHR_push_descriptor) |
|
|
|
enabledExtensions.push_back("VK_KHR_push_descriptor"); |
|
|
|
if (info.support_VK_KHR_shader_float16_int8) |
|
|
|
@@ -681,6 +774,49 @@ VulkanDevice::VulkanDevice(int device_index) : info(g_gpu_infos[device_index]) |
|
|
|
if (info.support_VK_KHR_storage_buffer_storage_class) |
|
|
|
enabledExtensions.push_back("VK_KHR_storage_buffer_storage_class"); |
|
|
|
|
|
|
|
void* enabledExtensionFeatures = 0; |
|
|
|
if (support_VK_KHR_get_physical_device_properties2) |
|
|
|
{ |
|
|
|
// enable int8 storage |
|
|
|
VkPhysicalDevice8BitStorageFeaturesKHR enabled8BitStorageFeatures; |
|
|
|
enabled8BitStorageFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR; |
|
|
|
enabled8BitStorageFeatures.pNext = 0; |
|
|
|
enabled8BitStorageFeatures.storageBuffer8BitAccess = info.int8_storage; |
|
|
|
enabled8BitStorageFeatures.uniformAndStorageBuffer8BitAccess = VK_FALSE; |
|
|
|
enabled8BitStorageFeatures.storagePushConstant8 = VK_FALSE; |
|
|
|
if (info.support_VK_KHR_8bit_storage) |
|
|
|
{ |
|
|
|
enabled8BitStorageFeatures.pNext = enabledExtensionFeatures; |
|
|
|
enabledExtensionFeatures = &enabled8BitStorageFeatures; |
|
|
|
} |
|
|
|
|
|
|
|
// enable fp16/int16 storage |
|
|
|
VkPhysicalDevice16BitStorageFeaturesKHR enabled16BitStorageFeatures; |
|
|
|
enabled16BitStorageFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR; |
|
|
|
enabled16BitStorageFeatures.pNext = 0; |
|
|
|
enabled16BitStorageFeatures.storageBuffer16BitAccess = info.fp16_storage; |
|
|
|
enabled16BitStorageFeatures.uniformAndStorageBuffer16BitAccess = VK_FALSE; |
|
|
|
enabled16BitStorageFeatures.storagePushConstant16 = VK_FALSE; |
|
|
|
enabled16BitStorageFeatures.storageInputOutput16 = VK_FALSE; |
|
|
|
if (info.support_VK_KHR_16bit_storage) |
|
|
|
{ |
|
|
|
enabled16BitStorageFeatures.pNext = enabledExtensionFeatures; |
|
|
|
enabledExtensionFeatures = &enabled16BitStorageFeatures; |
|
|
|
} |
|
|
|
|
|
|
|
// enable fp16/int8 arithmetic |
|
|
|
VkPhysicalDeviceFloat16Int8FeaturesKHR enabledFloat16Int8Features; |
|
|
|
enabledFloat16Int8Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR; |
|
|
|
enabledFloat16Int8Features.pNext = 0; |
|
|
|
enabledFloat16Int8Features.shaderFloat16 = info.fp16_arithmetic; |
|
|
|
enabledFloat16Int8Features.shaderInt8 = info.int8_arithmetic; |
|
|
|
if (info.support_VK_KHR_shader_float16_int8) |
|
|
|
{ |
|
|
|
enabledFloat16Int8Features.pNext = enabledExtensionFeatures; |
|
|
|
enabledExtensionFeatures = &enabledFloat16Int8Features; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
VkDeviceQueueCreateInfo deviceQueueCreateInfos[2]; |
|
|
|
deviceQueueCreateInfos[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; |
|
|
|
deviceQueueCreateInfos[0].pNext = 0; |
|
|
|
@@ -697,7 +833,7 @@ VulkanDevice::VulkanDevice(int device_index) : info(g_gpu_infos[device_index]) |
|
|
|
|
|
|
|
VkDeviceCreateInfo deviceCreateInfo; |
|
|
|
deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; |
|
|
|
deviceCreateInfo.pNext = 0; |
|
|
|
deviceCreateInfo.pNext = enabledExtensionFeatures; |
|
|
|
deviceCreateInfo.flags = 0; |
|
|
|
if (info.compute_queue_index == info.transfer_queue_index) |
|
|
|
{ |
|
|
|
@@ -803,10 +939,6 @@ int VulkanDevice::init_device_extension() |
|
|
|
vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)vkGetDeviceProcAddr(device, "vkCreateDescriptorUpdateTemplateKHR"); |
|
|
|
vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)vkGetDeviceProcAddr(device, "vkDestroyDescriptorUpdateTemplateKHR"); |
|
|
|
vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)vkGetDeviceProcAddr(device, "vkUpdateDescriptorSetWithTemplateKHR"); |
|
|
|
|
|
|
|
// fprintf(stderr, "vkCreateDescriptorUpdateTemplateKHR = %p\n", vkCreateDescriptorUpdateTemplateKHR); |
|
|
|
// fprintf(stderr, "vkDestroyDescriptorUpdateTemplateKHR = %p\n", vkDestroyDescriptorUpdateTemplateKHR); |
|
|
|
// fprintf(stderr, "vkUpdateDescriptorSetWithTemplateKHR = %p\n", vkUpdateDescriptorSetWithTemplateKHR); |
|
|
|
} |
|
|
|
|
|
|
|
if (info.support_VK_KHR_get_memory_requirements2) |
|
|
|
@@ -814,10 +946,6 @@ int VulkanDevice::init_device_extension() |
|
|
|
vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)vkGetDeviceProcAddr(device, "vkGetImageMemoryRequirements2KHR"); |
|
|
|
vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)vkGetDeviceProcAddr(device, "vkGetBufferMemoryRequirements2KHR"); |
|
|
|
vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)vkGetDeviceProcAddr(device, "vkGetImageSparseMemoryRequirements2KHR"); |
|
|
|
|
|
|
|
// fprintf(stderr, "vkGetImageMemoryRequirements2KHR = %p\n", vkGetImageMemoryRequirements2KHR); |
|
|
|
// fprintf(stderr, "vkGetBufferMemoryRequirements2KHR = %p\n", vkGetBufferMemoryRequirements2KHR); |
|
|
|
// fprintf(stderr, "vkGetImageSparseMemoryRequirements2KHR = %p\n", vkGetImageSparseMemoryRequirements2KHR); |
|
|
|
} |
|
|
|
|
|
|
|
if (info.support_VK_KHR_push_descriptor) |
|
|
|
@@ -825,11 +953,9 @@ int VulkanDevice::init_device_extension() |
|
|
|
if (info.support_VK_KHR_descriptor_update_template) |
|
|
|
{ |
|
|
|
vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)vkGetDeviceProcAddr(device, "vkCmdPushDescriptorSetWithTemplateKHR"); |
|
|
|
// fprintf(stderr, "vkCmdPushDescriptorSetWithTemplateKHR = %p\n", vkCmdPushDescriptorSetWithTemplateKHR); |
|
|
|
} |
|
|
|
|
|
|
|
vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)vkGetDeviceProcAddr(device, "vkCmdPushDescriptorSetKHR"); |
|
|
|
// fprintf(stderr, "vkCmdPushDescriptorSetKHR = %p\n", vkCmdPushDescriptorSetKHR); |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
|