updated VKDeviceCreater.cpp

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-05-30 17:57:12 +08:00
parent 222ff2961f
commit 71fd42cfc8
4 changed files with 47 additions and 17 deletions

2
CMCore

@ -1 +1 @@
Subproject commit 4d58256a3d5caec9258d0059996dbed5627ff02a
Subproject commit fbb3154e5b8ca0e3d0480ad121a704359f527966

View File

@ -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<VkQueueFamilyProperties> family_properties;
List<VkBool32> supports_present;
VkSurfaceFormatKHR surface_format;
List<VkPresentModeKHR> 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;

View File

@ -101,14 +101,21 @@ void GPUDeviceAttribute::GetQueueFamily()
{
VkPhysicalDevice pdevice = *physical_device;
AutoDeleteArray<VkQueueFamilyProperties> family_properties;
AutoDeleteArray<VkBool32> 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)

View File

@ -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
}