Merge pull request #6944 from FernandoS27/dear-drunk-me
Vulkan/Descriptors: Increase sets per pool on AMD propietary driver.
This commit is contained in:
		| @@ -19,7 +19,6 @@ namespace Vulkan { | ||||
| // Prefer small grow rates to avoid saturating the descriptor pool with barely used pipelines | ||||
| constexpr size_t SETS_GROW_RATE = 16; | ||||
| constexpr s32 SCORE_THRESHOLD = 3; | ||||
| constexpr u32 SETS_PER_POOL = 64; | ||||
|  | ||||
| struct DescriptorBank { | ||||
|     DescriptorBankInfo info; | ||||
| @@ -59,11 +58,12 @@ static DescriptorBankInfo MakeBankInfo(std::span<const Shader::Info> infos) { | ||||
| static void AllocatePool(const Device& device, DescriptorBank& bank) { | ||||
|     std::array<VkDescriptorPoolSize, 6> pool_sizes; | ||||
|     size_t pool_cursor{}; | ||||
|     const u32 sets_per_pool = device.GetSetsPerPool(); | ||||
|     const auto add = [&](VkDescriptorType type, u32 count) { | ||||
|         if (count > 0) { | ||||
|             pool_sizes[pool_cursor++] = { | ||||
|                 .type = type, | ||||
|                 .descriptorCount = count * SETS_PER_POOL, | ||||
|                 .descriptorCount = count * sets_per_pool, | ||||
|             }; | ||||
|         } | ||||
|     }; | ||||
| @@ -78,7 +78,7 @@ static void AllocatePool(const Device& device, DescriptorBank& bank) { | ||||
|         .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, | ||||
|         .pNext = nullptr, | ||||
|         .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, | ||||
|         .maxSets = SETS_PER_POOL, | ||||
|         .maxSets = sets_per_pool, | ||||
|         .poolSizeCount = static_cast<u32>(pool_cursor), | ||||
|         .pPoolSizes = std::data(pool_sizes), | ||||
|     })); | ||||
|   | ||||
| @@ -599,6 +599,12 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | ||||
|  | ||||
|     graphics_queue = logical.GetQueue(graphics_family); | ||||
|     present_queue = logical.GetQueue(present_family); | ||||
|  | ||||
|     sets_per_pool = 64; | ||||
|     if (driver_id == VK_DRIVER_ID_AMD_PROPRIETARY || driver_id == VK_DRIVER_ID_AMD_OPEN_SOURCE) { | ||||
|         // AMD drivers need a higher amount of Sets per Pool in certain circunstances like in XC2. | ||||
|         sets_per_pool = 96; | ||||
|     } | ||||
| } | ||||
|  | ||||
| Device::~Device() = default; | ||||
|   | ||||
| @@ -323,6 +323,10 @@ public: | ||||
|         return device_access_memory; | ||||
|     } | ||||
|  | ||||
|     u32 GetSetsPerPool() const { | ||||
|         return sets_per_pool; | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     /// Checks if the physical device is suitable. | ||||
|     void CheckSuitability(bool requires_swapchain) const; | ||||
| @@ -376,6 +380,7 @@ private: | ||||
|     VkShaderStageFlags guest_warp_stages{};     ///< Stages where the guest warp size can be forced. | ||||
|     u64 device_access_memory{};                 ///< Total size of device local memory in bytes. | ||||
|     u32 max_push_descriptors{};                 ///< Maximum number of push descriptors | ||||
|     u32 sets_per_pool{};                        ///< Sets per Description Pool | ||||
|     bool is_optimal_astc_supported{};           ///< Support for native ASTC. | ||||
|     bool is_float16_supported{};                ///< Support for float16 arithmetic. | ||||
|     bool is_int8_supported{};                   ///< Support for int8 arithmetic. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Morph
					Morph