supported PhysicalDevice features2/properties2.
This commit is contained in:
parent
51ac3e73c8
commit
d4e3149af2
@ -9,8 +9,14 @@ class GPUPhysicalDevice
|
|||||||
{
|
{
|
||||||
VkInstance instance=nullptr;
|
VkInstance instance=nullptr;
|
||||||
VkPhysicalDevice physical_device=nullptr;
|
VkPhysicalDevice physical_device=nullptr;
|
||||||
|
|
||||||
VkPhysicalDeviceFeatures features;
|
VkPhysicalDeviceFeatures features;
|
||||||
|
VkPhysicalDeviceVulkan11Features features11;
|
||||||
|
VkPhysicalDeviceVulkan12Features features12;
|
||||||
|
|
||||||
VkPhysicalDeviceProperties properties;
|
VkPhysicalDeviceProperties properties;
|
||||||
|
VkPhysicalDeviceVulkan11Properties properties11;
|
||||||
|
VkPhysicalDeviceVulkan12Properties properties12;
|
||||||
|
|
||||||
VkPhysicalDeviceMemoryProperties memory_properties;
|
VkPhysicalDeviceMemoryProperties memory_properties;
|
||||||
List<VkLayerProperties> layer_properties;
|
List<VkLayerProperties> layer_properties;
|
||||||
@ -134,6 +140,9 @@ public:
|
|||||||
const float GetMaxSamplerAnisotropy ()const{return properties.limits.maxSamplerAnisotropy;}
|
const float GetMaxSamplerAnisotropy ()const{return properties.limits.maxSamplerAnisotropy;}
|
||||||
const float GetMaxSamplerLodBias ()const{return properties.limits.maxSamplerLodBias;}
|
const float GetMaxSamplerLodBias ()const{return properties.limits.maxSamplerLodBias;}
|
||||||
|
|
||||||
|
const VkBool32 SupportYcbcrConversion ()const{return features11.samplerYcbcrConversion;}
|
||||||
|
const VkBool32 SupportClampMirrorToEdge ()const{return features12.samplerMirrorClampToEdge;}
|
||||||
|
|
||||||
const void GetPointSize(float &granularity,float &min_size,float &max_size)
|
const void GetPointSize(float &granularity,float &min_size,float &max_size)
|
||||||
{
|
{
|
||||||
granularity =properties.limits.pointSizeGranularity;
|
granularity =properties.limits.pointSizeGranularity;
|
||||||
|
@ -31,6 +31,8 @@ VulkanInstance *CreateInstance(const AnsiString &app_name,VKDebugOut *out,Create
|
|||||||
VK_EXT_DEBUG_UTILS_EXTENSION_NAME,
|
VK_EXT_DEBUG_UTILS_EXTENSION_NAME,
|
||||||
#endif//_DEBUG
|
#endif//_DEBUG
|
||||||
VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME,
|
VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME,
|
||||||
|
VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
|
||||||
|
VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME,
|
||||||
};
|
};
|
||||||
|
|
||||||
for(const char *ext_name:require_ext_list)
|
for(const char *ext_name:require_ext_list)
|
||||||
|
@ -59,10 +59,66 @@ GPUPhysicalDevice::GPUPhysicalDevice(VkInstance inst,VkPhysicalDevice pd)
|
|||||||
instance=inst;
|
instance=inst;
|
||||||
physical_device=pd;
|
physical_device=pd;
|
||||||
|
|
||||||
|
{
|
||||||
|
auto func=(PFN_vkGetPhysicalDeviceFeatures2KHR)vkGetInstanceProcAddr(inst,"vkGetPhysicalDeviceFeatures2KHR");
|
||||||
|
|
||||||
|
if(func)
|
||||||
|
{
|
||||||
|
VkPhysicalDeviceFeatures2 features2;
|
||||||
|
|
||||||
|
features2.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR;
|
||||||
|
features2.pNext=&features11;
|
||||||
|
|
||||||
|
features11.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
|
||||||
|
features11.pNext=&features12;
|
||||||
|
|
||||||
|
features12.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
|
||||||
|
features12.pNext=nullptr;
|
||||||
|
|
||||||
|
func(physical_device,&features2);
|
||||||
|
|
||||||
|
hgl_cpy(&features,&features2.features);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
vkGetPhysicalDeviceFeatures(physical_device,&features);
|
vkGetPhysicalDeviceFeatures(physical_device,&features);
|
||||||
vkGetPhysicalDeviceMemoryProperties(physical_device,&memory_properties);
|
|
||||||
|
hgl_zero(features11);
|
||||||
|
hgl_zero(features12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto func=(PFN_vkGetPhysicalDeviceProperties2KHR)vkGetInstanceProcAddr(inst,"vkGetPhysicalDeviceProperties2KHR");
|
||||||
|
|
||||||
|
if(func)
|
||||||
|
{
|
||||||
|
VkPhysicalDeviceProperties2 properties2;
|
||||||
|
|
||||||
|
properties2.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR;
|
||||||
|
properties2.pNext=&properties11;
|
||||||
|
|
||||||
|
properties11.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES;
|
||||||
|
properties11.pNext=&properties12;
|
||||||
|
|
||||||
|
properties12.sType=VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES;
|
||||||
|
properties12.pNext=nullptr;
|
||||||
|
|
||||||
|
func(physical_device,&properties2);
|
||||||
|
|
||||||
|
hgl_cpy(&properties,&properties2.properties);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
vkGetPhysicalDeviceProperties(physical_device,&properties);
|
vkGetPhysicalDeviceProperties(physical_device,&properties);
|
||||||
|
|
||||||
|
hgl_zero(properties11);
|
||||||
|
hgl_zero(properties12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vkGetPhysicalDeviceMemoryProperties(physical_device,&memory_properties);
|
||||||
|
|
||||||
std::string debug_front="PhysicalDevice["+std::string(properties.deviceName)+"]";
|
std::string debug_front="PhysicalDevice["+std::string(properties.deviceName)+"]";
|
||||||
|
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user