From 71fd42cfc889b95902b5643d55edd12bbf384f30 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Tue, 30 May 2023 17:57:12 +0800 Subject: [PATCH] updated VKDeviceCreater.cpp --- CMCore | 2 +- inc/hgl/graph/VKDeviceAttribute.h | 18 +++++----- src/SceneGraph/Vulkan/VKDeviceAttribute.cpp | 38 ++++++++++++++++----- src/SceneGraph/Vulkan/VKDeviceCreater.cpp | 6 ++++ 4 files changed, 47 insertions(+), 17 deletions(-) diff --git a/CMCore b/CMCore index 4d58256a..fbb3154e 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 4d58256a3d5caec9258d0059996dbed5627ff02a +Subproject commit fbb3154e5b8ca0e3d0480ad121a704359f527966 diff --git a/inc/hgl/graph/VKDeviceAttribute.h b/inc/hgl/graph/VKDeviceAttribute.h index e9e7782c..9b36e7e6 100644 --- a/inc/hgl/graph/VKDeviceAttribute.h +++ b/inc/hgl/graph/VKDeviceAttribute.h @@ -22,29 +22,31 @@ struct GPUDeviceAttribute VkSurfaceKHR surface =VK_NULL_HANDLE; VkSurfaceCapabilitiesKHR surface_caps; - uint32_t graphics_family =ERROR_FAMILY_INDEX; - uint32_t present_family =ERROR_FAMILY_INDEX; - uint32_t compute_family =ERROR_FAMILY_INDEX; + uint32_t graphics_family =ERROR_FAMILY_INDEX; + uint32_t present_family =ERROR_FAMILY_INDEX; + uint32_t compute_family =ERROR_FAMILY_INDEX; + uint32_t video_decode_family =ERROR_FAMILY_INDEX; + +#ifdef VK_ENABLE_BETA_EXTENSIONS + uint32_t video_encode_family =ERROR_FAMILY_INDEX; +#endif//VK_ENABLE_BETA_EXTENSIONS VkQueue graphics_queue =VK_NULL_HANDLE; VkQueue present_queue =VK_NULL_HANDLE; - List family_properties; - List supports_present; - VkSurfaceFormatKHR surface_format; List present_modes; VkSurfaceTransformFlagBitsKHR preTransform; VkCompositeAlphaFlagBitsKHR compositeAlpha =VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; - + VkDevice device =VK_NULL_HANDLE; VkCommandPool cmd_pool =VK_NULL_HANDLE; VkDescriptorPool desc_pool =VK_NULL_HANDLE; VkPipelineCache pipeline_cache =VK_NULL_HANDLE; - + #ifdef _DEBUG DebugMaker * debug_maker =nullptr; DebugUtils * debug_utils =nullptr; diff --git a/src/SceneGraph/Vulkan/VKDeviceAttribute.cpp b/src/SceneGraph/Vulkan/VKDeviceAttribute.cpp index f7138117..39e1e124 100644 --- a/src/SceneGraph/Vulkan/VKDeviceAttribute.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceAttribute.cpp @@ -101,14 +101,21 @@ void GPUDeviceAttribute::GetQueueFamily() { VkPhysicalDevice pdevice = *physical_device; + AutoDeleteArray family_properties; + AutoDeleteArray supports_present; + uint32_t family_count; + vkGetPhysicalDeviceQueueFamilyProperties(pdevice, &family_count, nullptr); - family_properties.SetCount(family_count); - vkGetPhysicalDeviceQueueFamilyProperties(pdevice, &family_count, family_properties.GetData()); + + family_properties.alloc(family_count); + supports_present.alloc(family_count); + + vkGetPhysicalDeviceQueueFamilyProperties(pdevice, &family_count, family_properties); { - supports_present.SetCount(family_count); - VkBool32 *sp = supports_present.GetData(); + VkBool32 *sp = supports_present; + for (uint32_t i = 0; i < family_count; i++) { vkGetPhysicalDeviceSurfaceSupportKHR(pdevice, i, surface, sp); @@ -117,10 +124,25 @@ void GPUDeviceAttribute::GetQueueFamily() } { - VkQueueFamilyProperties *fp = family_properties.GetData(); - VkBool32 *sp = supports_present.GetData(); + VkQueueFamilyProperties *fp = family_properties; + VkBool32 *sp = supports_present; + for (uint32_t i = 0; i < family_count; i++) { + if(fp->queueFlags & VK_QUEUE_VIDEO_DECODE_BIT_KHR) + { + if (video_decode_family == ERROR_FAMILY_INDEX) + video_decode_family = i; + } + +#ifdef VK_ENABLE_BETA_EXTENSIONS + if(fp->queueFlags & VK_QUEUE_VIDEO_ENCODE_BIT_KHR) + { + if (video_encode_family == ERROR_FAMILY_INDEX) + video_encode_family = i; + } +#endif//VK_ENABLE_BETA_EXTENSIONS + if(fp->queueFlags & VK_QUEUE_COMPUTE_BIT) { if(compute_family==ERROR_FAMILY_INDEX) @@ -136,7 +158,6 @@ void GPUDeviceAttribute::GetQueueFamily() { graphics_family = i; present_family = i; - break; } } @@ -147,7 +168,8 @@ void GPUDeviceAttribute::GetQueueFamily() if (present_family == ERROR_FAMILY_INDEX) { - VkBool32 *sp = supports_present.GetData(); + VkBool32 *sp = supports_present; + for (uint32_t i = 0; i < family_count; i++) { if (*sp) diff --git a/src/SceneGraph/Vulkan/VKDeviceCreater.cpp b/src/SceneGraph/Vulkan/VKDeviceCreater.cpp index 18a228af..288b952c 100644 --- a/src/SceneGraph/Vulkan/VKDeviceCreater.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceCreater.cpp @@ -68,6 +68,8 @@ namespace VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, // VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, + + VK_KHR_SPIRV_1_4_EXTENSION_NAME, }; for(const char *ext_name:require_ext_list) @@ -100,6 +102,10 @@ namespace if(require.wide_lines) FEATURE_COPY(wideLines) if(require.large_points) FEATURE_COPY(largePoints) + if(require.texture_compression.bc)FEATURE_COPY(textureCompressionBC); + if(require.texture_compression.etc2)FEATURE_COPY(textureCompressionETC2); + if(require.texture_compression.astc_ldr)FEATURE_COPY(textureCompressionASTC_LDR); + #undef FEATURE_COPY }