Merge branch 'master' into gtest_mac

This commit is contained in:
Megamouse 2025-06-02 20:06:57 +02:00 committed by GitHub
commit b193df67ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 107 additions and 181 deletions

View file

@ -1,5 +1,5 @@
#define VMA_IMPLEMENTATION #define VMA_IMPLEMENTATION
#define VMA_VULKAN_VERSION 1000000 #define VMA_VULKAN_VERSION 1002000
#include "util/atomic.hpp" #include "util/atomic.hpp"
#include "Utilities/mutex.h" #include "Utilities/mutex.h"

View file

@ -77,8 +77,6 @@ namespace vk
VkDescriptorSetLayoutBindingFlagsCreateInfo binding_infos = {}; VkDescriptorSetLayoutBindingFlagsCreateInfo binding_infos = {};
rsx::simple_array<VkDescriptorBindingFlags> binding_flags; rsx::simple_array<VkDescriptorBindingFlags> binding_flags;
if (g_render_device->get_descriptor_indexing_support())
{
const auto deferred_mask = g_render_device->get_descriptor_update_after_bind_support(); const auto deferred_mask = g_render_device->get_descriptor_update_after_bind_support();
binding_flags.resize(::size32(bindings)); binding_flags.resize(::size32(bindings));
@ -101,7 +99,6 @@ namespace vk
infos.pNext = &binding_infos; infos.pNext = &binding_infos;
infos.flags |= VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT; infos.flags |= VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT;
}
VkDescriptorSetLayout result; VkDescriptorSetLayout result;
CHECK_RESULT(vkCreateDescriptorSetLayout(*g_render_device, &infos, nullptr, &result)); CHECK_RESULT(vkCreateDescriptorSetLayout(*g_render_device, &infos, nullptr, &result));

View file

@ -20,12 +20,6 @@ namespace vk
supported_extensions instance_extensions(supported_extensions::instance); supported_extensions instance_extensions(supported_extensions::instance);
supported_extensions device_extensions(supported_extensions::device, nullptr, dev); supported_extensions device_extensions(supported_extensions::device, nullptr, dev);
if (!instance_extensions.is_supported(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME))
{
vkGetPhysicalDeviceFeatures(dev, &features);
}
else
{
VkPhysicalDeviceFeatures2KHR features2; VkPhysicalDeviceFeatures2KHR features2;
features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
features2.pNext = nullptr; features2.pNext = nullptr;
@ -39,20 +33,16 @@ namespace vk
VkPhysicalDeviceFaultFeaturesEXT device_fault_info{}; VkPhysicalDeviceFaultFeaturesEXT device_fault_info{};
VkPhysicalDeviceMultiDrawFeaturesEXT multidraw_info{}; VkPhysicalDeviceMultiDrawFeaturesEXT multidraw_info{};
if (device_extensions.is_supported(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME)) // Core features
{ shader_support_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
shader_support_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR;
features2.pNext = &shader_support_info; features2.pNext = &shader_support_info;
}
if (device_extensions.is_supported(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME)) descriptor_indexing_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
{
descriptor_indexing_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
descriptor_indexing_info.pNext = features2.pNext; descriptor_indexing_info.pNext = features2.pNext;
features2.pNext = &descriptor_indexing_info; features2.pNext = &descriptor_indexing_info;
descriptor_indexing_support = true; descriptor_indexing_support = true;
}
// Optional features
if (device_extensions.is_supported(VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME)) if (device_extensions.is_supported(VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME))
{ {
fbo_loops_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT; fbo_loops_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT;
@ -95,9 +85,7 @@ namespace vk
features2.pNext = &multidraw_info; features2.pNext = &multidraw_info;
} }
auto _vkGetPhysicalDeviceFeatures2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2KHR>(vkGetInstanceProcAddr(parent, "vkGetPhysicalDeviceFeatures2KHR")); vkGetPhysicalDeviceFeatures2(dev, &features2);
ensure(_vkGetPhysicalDeviceFeatures2KHR); // "vkGetInstanceProcAddress failed to find entry point!"
_vkGetPhysicalDeviceFeatures2KHR(dev, &features2);
shader_types_support.allow_float64 = !!features2.features.shaderFloat64; shader_types_support.allow_float64 = !!features2.features.shaderFloat64;
shader_types_support.allow_float16 = !!shader_support_info.shaderFloat16; shader_types_support.allow_float16 = !!shader_support_info.shaderFloat16;
@ -116,8 +104,7 @@ namespace vk
features = features2.features; features = features2.features;
if (descriptor_indexing_support) descriptor_indexing_support.supported = true; // VK_API_VERSION_1_2
{
#define SET_DESCRIPTOR_BITFLAG(field, bit) if (descriptor_indexing_info.field) descriptor_indexing_support.update_after_bind_mask |= (1ull << bit) #define SET_DESCRIPTOR_BITFLAG(field, bit) if (descriptor_indexing_info.field) descriptor_indexing_support.update_after_bind_mask |= (1ull << bit)
SET_DESCRIPTOR_BITFLAG(descriptorBindingUniformBufferUpdateAfterBind, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); SET_DESCRIPTOR_BITFLAG(descriptorBindingUniformBufferUpdateAfterBind, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
SET_DESCRIPTOR_BITFLAG(descriptorBindingSampledImageUpdateAfterBind, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER); SET_DESCRIPTOR_BITFLAG(descriptorBindingSampledImageUpdateAfterBind, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER);
@ -127,18 +114,15 @@ namespace vk
SET_DESCRIPTOR_BITFLAG(descriptorBindingUniformTexelBufferUpdateAfterBind, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER); SET_DESCRIPTOR_BITFLAG(descriptorBindingUniformTexelBufferUpdateAfterBind, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER);
SET_DESCRIPTOR_BITFLAG(descriptorBindingStorageTexelBufferUpdateAfterBind, VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER); SET_DESCRIPTOR_BITFLAG(descriptorBindingStorageTexelBufferUpdateAfterBind, VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER);
#undef SET_DESCRIPTOR_BITFLAG #undef SET_DESCRIPTOR_BITFLAG
}
}
optional_features_support.shader_stencil_export = device_extensions.is_supported(VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME); optional_features_support.shader_stencil_export = device_extensions.is_supported(VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME);
optional_features_support.conditional_rendering = device_extensions.is_supported(VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME); optional_features_support.conditional_rendering = device_extensions.is_supported(VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME);
optional_features_support.external_memory_host = device_extensions.is_supported(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME); optional_features_support.external_memory_host = device_extensions.is_supported(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME);
optional_features_support.sampler_mirror_clamped = device_extensions.is_supported(VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME);
optional_features_support.synchronization_2 = device_extensions.is_supported(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME); optional_features_support.synchronization_2 = device_extensions.is_supported(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME);
optional_features_support.unrestricted_depth_range = device_extensions.is_supported(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME); optional_features_support.unrestricted_depth_range = device_extensions.is_supported(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME);
optional_features_support.debug_utils = instance_extensions.is_supported(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); optional_features_support.debug_utils = instance_extensions.is_supported(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
optional_features_support.surface_capabilities_2 = instance_extensions.is_supported(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); optional_features_support.surface_capabilities_2 = instance_extensions.is_supported(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME);
// Post-initialization checks // Post-initialization checks
if (!custom_border_color_support.swizzle_extension_supported) if (!custom_border_color_support.swizzle_extension_supported)
@ -172,16 +156,6 @@ namespace vk
return; return;
} }
// Try to query driver properties if possible
supported_extensions instance_extensions(supported_extensions::instance);
supported_extensions device_extensions(supported_extensions::device, nullptr, dev);
if (!instance_extensions.is_supported(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME) ||
!device_extensions.is_supported(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME))
{
return;
}
VkPhysicalDeviceProperties2KHR properties2; VkPhysicalDeviceProperties2KHR properties2;
properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR; properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR;
properties2.pNext = nullptr; properties2.pNext = nullptr;
@ -189,11 +163,7 @@ namespace vk
driver_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR; driver_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR;
driver_properties.pNext = properties2.pNext; driver_properties.pNext = properties2.pNext;
properties2.pNext = &driver_properties; properties2.pNext = &driver_properties;
vkGetPhysicalDeviceProperties2(dev, &properties2);
auto _vkGetPhysicalDeviceProperties2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>(vkGetInstanceProcAddr(parent, "vkGetPhysicalDeviceProperties2KHR"));
ensure(_vkGetPhysicalDeviceProperties2KHR);
_vkGetPhysicalDeviceProperties2KHR(dev, &properties2);
} }
void physical_device::get_physical_device_properties_1(bool allow_extensions) void physical_device::get_physical_device_properties_1(bool allow_extensions)
@ -204,14 +174,8 @@ namespace vk
return; return;
} }
supported_extensions instance_extensions(supported_extensions::instance);
supported_extensions device_extensions(supported_extensions::device, nullptr, dev); supported_extensions device_extensions(supported_extensions::device, nullptr, dev);
if (!instance_extensions.is_supported(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME))
{
return;
}
VkPhysicalDeviceProperties2KHR properties2; VkPhysicalDeviceProperties2KHR properties2;
properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR; properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR;
properties2.pNext = nullptr; properties2.pNext = nullptr;
@ -219,12 +183,9 @@ namespace vk
VkPhysicalDeviceDescriptorIndexingPropertiesEXT descriptor_indexing_props{}; VkPhysicalDeviceDescriptorIndexingPropertiesEXT descriptor_indexing_props{};
VkPhysicalDeviceMultiDrawPropertiesEXT multidraw_props{}; VkPhysicalDeviceMultiDrawPropertiesEXT multidraw_props{};
if (descriptor_indexing_support)
{
descriptor_indexing_props.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT; descriptor_indexing_props.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT;
descriptor_indexing_props.pNext = properties2.pNext; descriptor_indexing_props.pNext = properties2.pNext;
properties2.pNext = &descriptor_indexing_props; properties2.pNext = &descriptor_indexing_props;
}
if (multidraw_support.supported) if (multidraw_support.supported)
{ {
@ -233,10 +194,7 @@ namespace vk
properties2.pNext = &multidraw_props; properties2.pNext = &multidraw_props;
} }
auto _vkGetPhysicalDeviceProperties2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>(vkGetInstanceProcAddr(parent, "vkGetPhysicalDeviceProperties2KHR")); vkGetPhysicalDeviceProperties2(dev, &properties2);
ensure(_vkGetPhysicalDeviceProperties2KHR);
_vkGetPhysicalDeviceProperties2KHR(dev, &properties2);
props = properties2.properties; props = properties2.properties;
if (descriptor_indexing_support) if (descriptor_indexing_support)
@ -548,11 +506,6 @@ namespace vk
// 1. Anisotropic sampling // 1. Anisotropic sampling
// 2. Indexable storage buffers // 2. Indexable storage buffers
VkPhysicalDeviceFeatures enabled_features{}; VkPhysicalDeviceFeatures enabled_features{};
if (pgpu->shader_types_support.allow_float16)
{
requested_extensions.push_back(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME);
}
if (pgpu->custom_border_color_support) if (pgpu->custom_border_color_support)
{ {
requested_extensions.push_back(VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME); requested_extensions.push_back(VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME);
@ -575,7 +528,6 @@ namespace vk
if (pgpu->optional_features_support.external_memory_host) if (pgpu->optional_features_support.external_memory_host)
{ {
requested_extensions.push_back(VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME);
requested_extensions.push_back(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME); requested_extensions.push_back(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME);
} }
@ -584,17 +536,6 @@ namespace vk
requested_extensions.push_back(VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME); requested_extensions.push_back(VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME);
} }
if (pgpu->optional_features_support.sampler_mirror_clamped)
{
requested_extensions.push_back(VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME);
}
if (pgpu->descriptor_indexing_support)
{
requested_extensions.push_back(VK_KHR_MAINTENANCE3_EXTENSION_NAME);
requested_extensions.push_back(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME);
}
if (pgpu->optional_features_support.framebuffer_loops) if (pgpu->optional_features_support.framebuffer_loops)
{ {
requested_extensions.push_back(VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME); requested_extensions.push_back(VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME);
@ -607,7 +548,7 @@ namespace vk
if (pgpu->optional_features_support.synchronization_2) if (pgpu->optional_features_support.synchronization_2)
{ {
requested_extensions.push_back(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME); requested_extensions.push_back(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME); // VK_API_VERSION_1_3
} }
if (pgpu->optional_features_support.extended_device_fault) if (pgpu->optional_features_support.extended_device_fault)

View file

@ -94,7 +94,6 @@ namespace vk
bool debug_utils = false; bool debug_utils = false;
bool external_memory_host = false; bool external_memory_host = false;
bool framebuffer_loops = false; bool framebuffer_loops = false;
bool sampler_mirror_clamped = false;
bool shader_stencil_export = false; bool shader_stencil_export = false;
bool surface_capabilities_2 = false; bool surface_capabilities_2 = false;
bool synchronization_2 = false; bool synchronization_2 = false;
@ -184,7 +183,6 @@ namespace vk
bool get_external_memory_host_support() const { return pgpu->optional_features_support.external_memory_host; } bool get_external_memory_host_support() const { return pgpu->optional_features_support.external_memory_host; }
bool get_surface_capabilities_2_support() const { return pgpu->optional_features_support.surface_capabilities_2; } bool get_surface_capabilities_2_support() const { return pgpu->optional_features_support.surface_capabilities_2; }
bool get_debug_utils_support() const { return g_cfg.video.renderdoc_compatiblity && pgpu->optional_features_support.debug_utils; } bool get_debug_utils_support() const { return g_cfg.video.renderdoc_compatiblity && pgpu->optional_features_support.debug_utils; }
bool get_descriptor_indexing_support() const { return pgpu->descriptor_indexing_support; }
bool get_framebuffer_loops_support() const { return pgpu->optional_features_support.framebuffer_loops; } bool get_framebuffer_loops_support() const { return pgpu->optional_features_support.framebuffer_loops; }
bool get_barycoords_support() const { return pgpu->optional_features_support.barycentric_coords; } bool get_barycoords_support() const { return pgpu->optional_features_support.barycentric_coords; }
bool get_synchronization2_support() const { return pgpu->optional_features_support.synchronization_2; } bool get_synchronization2_support() const { return pgpu->optional_features_support.synchronization_2; }

View file

@ -95,7 +95,7 @@ namespace vk
app.applicationVersion = 0; app.applicationVersion = 0;
app.pEngineName = app_name; app.pEngineName = app_name;
app.engineVersion = 0; app.engineVersion = 0;
app.apiVersion = VK_API_VERSION_1_0; app.apiVersion = VK_API_VERSION_1_2;
// Set up instance information // Set up instance information
@ -123,11 +123,6 @@ namespace vk
extensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME); extensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
} }
if (support.is_supported(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME))
{
extensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
}
#ifdef __APPLE__ #ifdef __APPLE__
if (support.is_supported(VK_EXT_LAYER_SETTINGS_EXTENSION_NAME)) if (support.is_supported(VK_EXT_LAYER_SETTINGS_EXTENSION_NAME))
{ {
@ -146,11 +141,6 @@ namespace vk
} }
#endif #endif
if (support.is_supported(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME))
{
extensions.push_back(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME);
}
if (support.is_supported(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME)) if (support.is_supported(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME))
{ {
extensions.push_back(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME); extensions.push_back(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME);

View file

@ -167,7 +167,7 @@ namespace vk
allocatorInfo.physicalDevice = pdev; allocatorInfo.physicalDevice = pdev;
allocatorInfo.device = dev; allocatorInfo.device = dev;
allocatorInfo.instance = inst; allocatorInfo.instance = inst;
allocatorInfo.vulkanApiVersion = VK_API_VERSION_1_0; allocatorInfo.vulkanApiVersion = VK_API_VERSION_1_2;
std::vector<VkDeviceSize> heap_limits; std::vector<VkDeviceSize> heap_limits;
const auto vram_allocation_limit = g_cfg.video.vk.vram_allocation_limit * 0x100000ull; const auto vram_allocation_limit = g_cfg.video.vk.vram_allocation_limit * 0x100000ull;

View file

@ -8,7 +8,7 @@
#pragma clang diagnostic push #pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnullability-completeness" #pragma clang diagnostic ignored "-Wnullability-completeness"
#endif #endif
#define VMA_VULKAN_VERSION 1000000 #define VMA_VULKAN_VERSION 1002000
#include "3rdparty/GPUOpen/VulkanMemoryAllocator/include/vk_mem_alloc.h" #include "3rdparty/GPUOpen/VulkanMemoryAllocator/include/vk_mem_alloc.h"
#ifdef __clang__ #ifdef __clang__
#pragma clang diagnostic pop #pragma clang diagnostic pop