2019-04-11 02:29:21 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
|
2021-09-23 22:13:57 +08:00
|
|
|
|
#include<hgl/graph/VKInstance.h>
|
2020-10-21 11:43:18 +08:00
|
|
|
|
#include<hgl/graph/VKTexture.h>
|
2019-04-11 02:29:21 +08:00
|
|
|
|
|
|
|
|
|
VK_NAMESPACE_BEGIN
|
2019-04-11 20:24:09 +08:00
|
|
|
|
|
|
|
|
|
constexpr uint32_t ERROR_FAMILY_INDEX=UINT32_MAX;
|
|
|
|
|
|
2020-10-21 12:39:22 +08:00
|
|
|
|
struct GPUDeviceAttribute
|
2019-04-11 02:29:21 +08:00
|
|
|
|
{
|
2021-09-23 22:13:57 +08:00
|
|
|
|
VulkanInstance * instance =nullptr;
|
2020-10-21 12:39:22 +08:00
|
|
|
|
const GPUPhysicalDevice * physical_device =nullptr;
|
2020-10-28 17:28:07 +08:00
|
|
|
|
|
|
|
|
|
VkPhysicalDeviceDriverPropertiesKHR driver_properties;
|
2019-04-13 21:44:26 +08:00
|
|
|
|
|
2019-07-06 16:46:19 +08:00
|
|
|
|
VkSurfaceKHR surface =VK_NULL_HANDLE;
|
2019-04-11 02:29:21 +08:00
|
|
|
|
VkSurfaceCapabilitiesKHR surface_caps;
|
|
|
|
|
|
2019-04-11 20:24:09 +08:00
|
|
|
|
uint32_t graphics_family =ERROR_FAMILY_INDEX;
|
|
|
|
|
uint32_t present_family =ERROR_FAMILY_INDEX;
|
2019-04-11 02:29:21 +08:00
|
|
|
|
|
2019-07-06 16:46:19 +08:00
|
|
|
|
VkQueue graphics_queue =VK_NULL_HANDLE;
|
|
|
|
|
VkQueue present_queue =VK_NULL_HANDLE;
|
2019-04-19 13:43:50 +08:00
|
|
|
|
|
2019-04-11 02:29:21 +08:00
|
|
|
|
List<VkQueueFamilyProperties> family_properties;
|
|
|
|
|
List<VkBool32> supports_present;
|
|
|
|
|
|
2021-09-23 15:19:09 +08:00
|
|
|
|
List<VkSurfaceFormatKHR> surface_formats_list;
|
|
|
|
|
VkSurfaceFormatKHR surface_format;
|
2019-04-11 02:29:21 +08:00
|
|
|
|
List<VkPresentModeKHR> present_modes;
|
|
|
|
|
|
2019-04-11 20:24:09 +08:00
|
|
|
|
VkSurfaceTransformFlagBitsKHR preTransform;
|
|
|
|
|
VkCompositeAlphaFlagBitsKHR compositeAlpha =VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
|
|
|
|
|
2019-07-06 16:46:19 +08:00
|
|
|
|
VkDevice device =VK_NULL_HANDLE;
|
|
|
|
|
VkCommandPool cmd_pool =VK_NULL_HANDLE;
|
2019-04-11 21:12:54 +08:00
|
|
|
|
|
2019-07-06 16:46:19 +08:00
|
|
|
|
VkDescriptorPool desc_pool =VK_NULL_HANDLE;
|
2019-05-05 14:22:58 +08:00
|
|
|
|
|
2019-07-06 16:46:19 +08:00
|
|
|
|
VkPipelineCache pipeline_cache =VK_NULL_HANDLE;
|
2019-04-12 16:35:44 +08:00
|
|
|
|
|
2019-04-11 02:29:21 +08:00
|
|
|
|
public:
|
|
|
|
|
|
2021-09-23 22:13:57 +08:00
|
|
|
|
GPUDeviceAttribute(VulkanInstance *inst,const GPUPhysicalDevice *pd,VkSurfaceKHR s);
|
2020-10-21 12:39:22 +08:00
|
|
|
|
~GPUDeviceAttribute();
|
2019-04-11 21:20:24 +08:00
|
|
|
|
|
2019-06-25 22:26:09 +08:00
|
|
|
|
bool CheckMemoryType(uint32_t typeBits,VkMemoryPropertyFlags properties,uint32_t *typeIndex) const;
|
2019-05-07 12:46:25 +08:00
|
|
|
|
|
2019-06-13 15:23:16 +08:00
|
|
|
|
void Refresh();
|
2021-09-23 22:13:57 +08:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
|
T *GetDeviceProc(const char *name)
|
|
|
|
|
{
|
|
|
|
|
return instance->GetDeviceProc<T>(device,name);
|
|
|
|
|
}
|
2020-10-21 12:39:22 +08:00
|
|
|
|
};//class GPUDeviceAttribute
|
2019-04-11 02:29:21 +08:00
|
|
|
|
VK_NAMESPACE_END
|