added BlendOpAdvanced support, but no test.
This commit is contained in:
parent
e99b669ef3
commit
6bc9352c80
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user