mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-08-08 09:09:46 +00:00
vk: Properly initialize float64 support for SPIRV
This commit is contained in:
parent
20f1eb865b
commit
9ea478008c
2 changed files with 11 additions and 1 deletions
|
@ -276,6 +276,7 @@ namespace vk
|
||||||
|
|
||||||
struct gpu_shader_types_support
|
struct gpu_shader_types_support
|
||||||
{
|
{
|
||||||
|
bool allow_float64;
|
||||||
bool allow_float16;
|
bool allow_float16;
|
||||||
bool allow_int8;
|
bool allow_int8;
|
||||||
};
|
};
|
||||||
|
@ -634,6 +635,7 @@ namespace vk
|
||||||
std::unordered_map<VkFormat, VkFormatProperties> format_properties;
|
std::unordered_map<VkFormat, VkFormatProperties> format_properties;
|
||||||
gpu_shader_types_support shader_types_support{};
|
gpu_shader_types_support shader_types_support{};
|
||||||
VkPhysicalDeviceDriverPropertiesKHR driver_properties{};
|
VkPhysicalDeviceDriverPropertiesKHR driver_properties{};
|
||||||
|
|
||||||
bool stencil_export_support = false;
|
bool stencil_export_support = false;
|
||||||
bool conditional_render_support = false;
|
bool conditional_render_support = false;
|
||||||
bool unrestricted_depth_range_support = false;
|
bool unrestricted_depth_range_support = false;
|
||||||
|
@ -680,6 +682,7 @@ private:
|
||||||
verify("vkGetInstanceProcAddress failed to find entry point!" HERE), getPhysicalDeviceFeatures2KHR;
|
verify("vkGetInstanceProcAddress failed to find entry point!" HERE), getPhysicalDeviceFeatures2KHR;
|
||||||
getPhysicalDeviceFeatures2KHR(dev, &features2);
|
getPhysicalDeviceFeatures2KHR(dev, &features2);
|
||||||
|
|
||||||
|
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;
|
||||||
shader_types_support.allow_int8 = !!shader_support_info.shaderInt8;
|
shader_types_support.allow_int8 = !!shader_support_info.shaderInt8;
|
||||||
features = features2.features;
|
features = features2.features;
|
||||||
|
@ -915,6 +918,7 @@ private:
|
||||||
enabled_features.depthBounds = VK_TRUE;
|
enabled_features.depthBounds = VK_TRUE;
|
||||||
enabled_features.wideLines = VK_TRUE;
|
enabled_features.wideLines = VK_TRUE;
|
||||||
enabled_features.largePoints = VK_TRUE;
|
enabled_features.largePoints = VK_TRUE;
|
||||||
|
enabled_features.shaderFloat64 = VK_TRUE;
|
||||||
|
|
||||||
if (g_cfg.video.antialiasing_level != msaa_level::none)
|
if (g_cfg.video.antialiasing_level != msaa_level::none)
|
||||||
{
|
{
|
||||||
|
@ -943,6 +947,12 @@ private:
|
||||||
enabled_features.shaderStorageBufferArrayDynamicIndexing = VK_TRUE;
|
enabled_features.shaderStorageBufferArrayDynamicIndexing = VK_TRUE;
|
||||||
|
|
||||||
// Optionally disable unsupported stuff
|
// Optionally disable unsupported stuff
|
||||||
|
if (!pgpu->features.shaderFloat64)
|
||||||
|
{
|
||||||
|
rsx_log.error("Your GPU does not support double precision floats in shaders. Graphics may not work correctly.");
|
||||||
|
enabled_features.shaderFloat64 = VK_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!pgpu->features.depthBounds)
|
if (!pgpu->features.depthBounds)
|
||||||
{
|
{
|
||||||
rsx_log.error("Your GPU does not support depth bounds testing. Graphics may not work correctly.");
|
rsx_log.error("Your GPU does not support depth bounds testing. Graphics may not work correctly.");
|
||||||
|
|
|
@ -186,7 +186,7 @@ void VKVertexDecompilerThread::insertMainStart(std::stringstream & OS)
|
||||||
properties2.domain = glsl::glsl_vertex_program;
|
properties2.domain = glsl::glsl_vertex_program;
|
||||||
properties2.require_lit_emulation = properties.has_lit_op;
|
properties2.require_lit_emulation = properties.has_lit_op;
|
||||||
properties2.emulate_zclip_transform = true;
|
properties2.emulate_zclip_transform = true;
|
||||||
properties2.emulate_depth_clip_only = true;
|
properties2.emulate_depth_clip_only = vk::get_current_renderer()->get_shader_types_support().allow_float64;
|
||||||
|
|
||||||
glsl::insert_glsl_legacy_function(OS, properties2);
|
glsl::insert_glsl_legacy_function(OS, properties2);
|
||||||
glsl::insert_vertex_input_fetch(OS, glsl::glsl_rules_spirv);
|
glsl::insert_vertex_input_fetch(OS, glsl::glsl_rules_spirv);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue