added BlendOpAdvanced support, but no test.

This commit is contained in:
hyzboy 2024-10-29 01:48:59 +08:00
parent e99b669ef3
commit 6bc9352c80
5 changed files with 35 additions and 4 deletions

View File

@ -39,6 +39,8 @@ struct GPUDeviceAttribute
VkSurfaceTransformFlagBitsKHR preTransform; VkSurfaceTransformFlagBitsKHR preTransform;
VkCompositeAlphaFlagBitsKHR compositeAlpha =VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; VkCompositeAlphaFlagBitsKHR compositeAlpha =VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
bool blendOpAdvance =false;
bool uint8_index_type=false; bool uint8_index_type=false;
bool uint32_index_type=false; bool uint32_index_type=false;

View File

@ -98,6 +98,8 @@ struct VulkanHardwareRequirement
uint32_t descriptor_pool; ///<描述符池大小(默认1024) uint32_t descriptor_pool; ///<描述符池大小(默认1024)
SupportLevel blendOperationAdvanced; ///<要求支持高级混合
public: public:
VulkanHardwareRequirement() VulkanHardwareRequirement()
@ -110,6 +112,8 @@ public:
fullDrawIndexUint8=SupportLevel::Want; fullDrawIndexUint8=SupportLevel::Want;
fullDrawIndexUint32=SupportLevel::Want; fullDrawIndexUint32=SupportLevel::Want;
blendOperationAdvanced=SupportLevel::Want;
} }
}; };

View File

@ -19,6 +19,7 @@ class GPUPhysicalDevice
VkPhysicalDeviceVulkan11Properties properties11; VkPhysicalDeviceVulkan11Properties properties11;
VkPhysicalDeviceVulkan12Properties properties12; VkPhysicalDeviceVulkan12Properties properties12;
VkPhysicalDeviceVulkan13Properties properties13; VkPhysicalDeviceVulkan13Properties properties13;
VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT blendOpAdvProperties;
VkPhysicalDeviceMemoryProperties memory_properties; VkPhysicalDeviceMemoryProperties memory_properties;
List<VkLayerProperties> layer_properties; List<VkLayerProperties> layer_properties;
@ -30,6 +31,8 @@ private:
bool support_u8_index=false; bool support_u8_index=false;
bool dynamic_state=false; bool dynamic_state=false;
bool blendOpAdvanced=false;
public: public:
const VkPhysicalDeviceFeatures & GetFeatures10 ()const{return features;} const VkPhysicalDeviceFeatures & GetFeatures10 ()const{return features;}
@ -149,6 +152,13 @@ public:
const VkBool32 SupportU32Index ()const{return features.fullDrawIndexUint32;} const VkBool32 SupportU32Index ()const{return features.fullDrawIndexUint32;}
const VkBool32 SupportU8Index ()const{return support_u8_index;} const VkBool32 SupportU8Index ()const{return support_u8_index;}
const VkBool32 SupportBlendOpAdvanced ()const{return blendOpAdvanced;}
const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *GetBlendOpAdvancedProperties()const
{
return blendOpAdvanced?&blendOpAdvProperties:nullptr;
}
// support != open, so please don't direct use GetFeatures(). // support != open, so please don't direct use GetFeatures().
// open any features in CreateDevice()&SetDeviceFeatures() functions. // open any features in CreateDevice()&SetDeviceFeatures() functions.
const bool SupportMDI ()const const bool SupportMDI ()const

View File

@ -85,6 +85,9 @@ namespace
if(require.fullDrawIndexUint8>=VulkanHardwareRequirement::SupportLevel::Want) if(require.fullDrawIndexUint8>=VulkanHardwareRequirement::SupportLevel::Want)
ext_list->Add(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME); ext_list->Add(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME);
if(require.blendOperationAdvanced>=VulkanHardwareRequirement::SupportLevel::Want)
ext_list->Add(VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME);
} }
void SetDeviceFeatures(VkPhysicalDeviceFeatures *features,const VkPhysicalDeviceFeatures &pdf,const VulkanHardwareRequirement &require) void SetDeviceFeatures(VkPhysicalDeviceFeatures *features,const VkPhysicalDeviceFeatures &pdf,const VulkanHardwareRequirement &require)
@ -324,6 +327,9 @@ GPUDevice *VulkanDeviceCreater::CreateRenderDevice()
device_attr->uint32_index_type=true; device_attr->uint32_index_type=true;
} }
if(require.blendOperationAdvanced>=VulkanHardwareRequirement::SupportLevel::Want)
device_attr->blendOpAdvance=true;
device_attr->surface_format=surface_format; device_attr->surface_format=surface_format;
GetDeviceQueue(device_attr); GetDeviceQueue(device_attr);

View File

@ -70,6 +70,7 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd)
if(func) if(func)
{ {
VkPhysicalDeviceFeatures2 features2; VkPhysicalDeviceFeatures2 features2;
VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT boaf;
features2.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR; features2.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR;
features2.pNext=&features11; features2.pNext=&features11;
@ -81,11 +82,16 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd)
features12.pNext=&features13; features12.pNext=&features13;
features13.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; features13.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
features13.pNext=nullptr; features13.pNext=&boaf;
boaf.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT;
boaf.pNext=nullptr;
func(physical_device,&features2); func(physical_device,&features2);
hgl_cpy(features,features2.features); hgl_cpy(features,features2.features);
blendOpAdvanced=boaf.advancedBlendCoherentOperations;
} }
else else
{ {
@ -114,7 +120,10 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd)
properties12.pNext=&properties13; properties12.pNext=&properties13;
properties13.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES; properties13.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES;
properties13.pNext=nullptr; properties13.pNext=&blendOpAdvProperties;
blendOpAdvProperties.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT;
blendOpAdvProperties.pNext=nullptr;
func(physical_device,&properties2); func(physical_device,&properties2);