From 79b0b2ef767298c3a830dc4a4b2cf4e5e9ecf411 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sat, 25 Jan 2025 01:40:08 +0800 Subject: [PATCH] support Vulkan 1.4 caps --- inc/hgl/graph/VKPhysicalDevice.h | 12 +++++++- .../Debug/VKPhysicalDeviceCapsOutput.cpp | 30 +++++++++++++++++++ src/SceneGraph/Vulkan/VKInstance.cpp | 2 +- src/SceneGraph/Vulkan/VKPhysicalDevice.cpp | 18 +++++++++-- 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/inc/hgl/graph/VKPhysicalDevice.h b/inc/hgl/graph/VKPhysicalDevice.h index 71b8095c..b753f924 100644 --- a/inc/hgl/graph/VKPhysicalDevice.h +++ b/inc/hgl/graph/VKPhysicalDevice.h @@ -14,11 +14,13 @@ class GPUPhysicalDevice VkPhysicalDeviceVulkan11Features features11; VkPhysicalDeviceVulkan12Features features12; VkPhysicalDeviceVulkan13Features features13; + VkPhysicalDeviceVulkan14Features features14; VkPhysicalDeviceProperties properties; VkPhysicalDeviceVulkan11Properties properties11; VkPhysicalDeviceVulkan12Properties properties12; VkPhysicalDeviceVulkan13Properties properties13; + VkPhysicalDeviceVulkan14Properties properties14; VkPhysicalDeviceMemoryProperties memory_properties; List layer_properties; @@ -36,6 +38,7 @@ public: const VkPhysicalDeviceVulkan11Features &GetFeatures11 ()const{return features11;} const VkPhysicalDeviceVulkan12Features &GetFeatures12 ()const{return features12;} const VkPhysicalDeviceVulkan13Features &GetFeatures13 ()const{return features13;} + const VkPhysicalDeviceVulkan14Features &GetFeatures14 ()const{return features14;} const VkPhysicalDeviceProperties & GetProperties ()const{return properties;} const VkPhysicalDeviceMemoryProperties &GetMemoryProperties ()const{return memory_properties;} @@ -66,7 +69,11 @@ public: const uint32_t GetSSBORange ()const{return properties.limits.maxStorageBufferRange;} const VkDeviceSize GetSSBOAlign ()const{return properties.limits.minStorageBufferOffsetAlignment;} - const uint32_t GetConstantSize ()const{return properties.limits.maxPushConstantsSize;} + const uint32_t GetConstantSize ()const{return properties.limits.maxPushConstantsSize;} + + const VkDeviceSize GetMaxBufferSize()const{return properties13.maxBufferSize;} + + const uint32_t GetMaxPushDescriptors()const{return properties14.maxPushDescriptors;} public: @@ -182,6 +189,9 @@ public: const VkBool32 SupportYcbcrConversion ()const{return features11.samplerYcbcrConversion;} const VkBool32 SupportClampMirrorToEdge ()const{return features12.samplerMirrorClampToEdge;} + const VkBool32 SupportSmoothLines ()const{return features14.smoothLines;} + const VkBool32 SupportStippledSmoothLines ()const{return features14.stippledSmoothLines;} + const void GetPointSize(float &granularity,float &min_size,float &max_size) const { granularity =properties.limits.pointSizeGranularity; diff --git a/src/SceneGraph/Vulkan/Debug/VKPhysicalDeviceCapsOutput.cpp b/src/SceneGraph/Vulkan/Debug/VKPhysicalDeviceCapsOutput.cpp index 0d9de4da..4a341da8 100644 --- a/src/SceneGraph/Vulkan/Debug/VKPhysicalDeviceCapsOutput.cpp +++ b/src/SceneGraph/Vulkan/Debug/VKPhysicalDeviceCapsOutput.cpp @@ -169,6 +169,35 @@ namespace #undef OUTPUT_PHYSICAL_DEVICE_FEATURE } + void DebugOut(const VkPhysicalDeviceVulkan14Features &features) + { + std::cout<<"Vulkan 1.4 features"<GetFeatures11()); DebugOut(pd->GetFeatures12()); DebugOut(pd->GetFeatures13()); + DebugOut(pd->GetFeatures14()); } VK_NAMESPACE_END diff --git a/src/SceneGraph/Vulkan/VKInstance.cpp b/src/SceneGraph/Vulkan/VKInstance.cpp index 11e00733..ba9de746 100644 --- a/src/SceneGraph/Vulkan/VKInstance.cpp +++ b/src/SceneGraph/Vulkan/VKInstance.cpp @@ -20,7 +20,7 @@ VulkanInstance *CreateInstance(const AnsiString &app_name,VKDebugOut *out,Create app_info.applicationVersion = 1; app_info.pEngineName = "CMGameEngine/ULRE"; app_info.engineVersion = 1; - app_info.apiVersion = VK_API_VERSION_1_3; + app_info.apiVersion = VK_API_VERSION_1_4; ext_list.Add(VK_KHR_SURFACE_EXTENSION_NAME); ext_list.Add(HGL_VK_SURFACE_EXTENSION_NAME); //此宏在VKSurfaceExtensionName.h中定义 diff --git a/src/SceneGraph/Vulkan/VKPhysicalDevice.cpp b/src/SceneGraph/Vulkan/VKPhysicalDevice.cpp index 2c58d5d5..ad5a3345 100644 --- a/src/SceneGraph/Vulkan/VKPhysicalDevice.cpp +++ b/src/SceneGraph/Vulkan/VKPhysicalDevice.cpp @@ -64,6 +64,7 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd) hgl_zero(features11); hgl_zero(features12); hgl_zero(features13); + hgl_zero(features14); auto func=(PFN_vkGetPhysicalDeviceFeatures2KHR)vkGetInstanceProcAddr(inst,"vkGetPhysicalDeviceFeatures2KHR"); @@ -81,7 +82,10 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd) features12.pNext=&features13; features13.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; - features13.pNext=nullptr; + features13.pNext=&features14; + + features14.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES; + features14.pNext=nullptr; func(physical_device,&features2); @@ -97,6 +101,7 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd) hgl_zero(properties11); hgl_zero(properties12); hgl_zero(properties13); + hgl_zero(properties14); auto func=(PFN_vkGetPhysicalDeviceProperties2KHR)vkGetInstanceProcAddr(inst,"vkGetPhysicalDeviceProperties2KHR"); @@ -114,7 +119,10 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd) properties12.pNext=&properties13; properties13.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES; - properties13.pNext=nullptr; + properties13.pNext=&properties14; + + properties14.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES; + properties14.pNext=nullptr; func(physical_device,&properties2); @@ -163,7 +171,11 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd) debug_queue_family_properties_out(debug_front.c_str(),queue_family_properties); } - support_u8_index=CheckExtensionSupport(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME); + if(features14.indexTypeUint8) + support_u8_index=true; + else + support_u8_index=CheckExtensionSupport(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME); + dynamic_state=CheckExtensionSupport(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); }