mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-22 13:55:38 +00:00
GPU/HW: Fix assert with accurate blending + true colour on
This commit is contained in:
parent
71ca14a77a
commit
5e1592b05d
|
@ -24,6 +24,7 @@
|
||||||
#include "common/timer.h"
|
#include "common/timer.h"
|
||||||
|
|
||||||
#include "IconsFontAwesome5.h"
|
#include "IconsFontAwesome5.h"
|
||||||
|
#include "IconsEmoji.h"
|
||||||
#include "imgui.h"
|
#include "imgui.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
@ -530,7 +531,7 @@ void GPU_HW::CheckSettings()
|
||||||
|
|
||||||
if (m_multisamples != g_settings.gpu_multisamples)
|
if (m_multisamples != g_settings.gpu_multisamples)
|
||||||
{
|
{
|
||||||
Host::AddIconOSDMessage("MSAAUnsupported", ICON_FA_EXCLAMATION_TRIANGLE,
|
Host::AddIconOSDMessage("MSAAUnsupported", ICON_EMOJI_WARNING,
|
||||||
fmt::format(TRANSLATE_FS("GPU_HW", "{}x MSAA is not supported, using {}x instead."),
|
fmt::format(TRANSLATE_FS("GPU_HW", "{}x MSAA is not supported, using {}x instead."),
|
||||||
g_settings.gpu_multisamples, m_multisamples),
|
g_settings.gpu_multisamples, m_multisamples),
|
||||||
Host::OSD_CRITICAL_ERROR_DURATION);
|
Host::OSD_CRITICAL_ERROR_DURATION);
|
||||||
|
@ -542,7 +543,7 @@ void GPU_HW::CheckSettings()
|
||||||
|
|
||||||
if (g_settings.gpu_per_sample_shading && !features.per_sample_shading)
|
if (g_settings.gpu_per_sample_shading && !features.per_sample_shading)
|
||||||
{
|
{
|
||||||
Host::AddIconOSDMessage("SSAAUnsupported", ICON_FA_EXCLAMATION_TRIANGLE,
|
Host::AddIconOSDMessage("SSAAUnsupported", ICON_EMOJI_WARNING,
|
||||||
TRANSLATE_STR("GPU_HW", "SSAA is not supported, using MSAA instead."),
|
TRANSLATE_STR("GPU_HW", "SSAA is not supported, using MSAA instead."),
|
||||||
Host::OSD_ERROR_DURATION);
|
Host::OSD_ERROR_DURATION);
|
||||||
}
|
}
|
||||||
|
@ -550,7 +551,7 @@ void GPU_HW::CheckSettings()
|
||||||
(IsBlendedTextureFiltering(m_texture_filtering) || IsBlendedTextureFiltering(m_sprite_texture_filtering)))
|
(IsBlendedTextureFiltering(m_texture_filtering) || IsBlendedTextureFiltering(m_sprite_texture_filtering)))
|
||||||
{
|
{
|
||||||
Host::AddIconOSDMessage(
|
Host::AddIconOSDMessage(
|
||||||
"TextureFilterUnsupported", ICON_FA_EXCLAMATION_TRIANGLE,
|
"TextureFilterUnsupported", ICON_EMOJI_WARNING,
|
||||||
fmt::format(TRANSLATE_FS("GPU_HW", "Texture filter '{}/{}' is not supported with the current renderer."),
|
fmt::format(TRANSLATE_FS("GPU_HW", "Texture filter '{}/{}' is not supported with the current renderer."),
|
||||||
Settings::GetTextureFilterDisplayName(m_texture_filtering),
|
Settings::GetTextureFilterDisplayName(m_texture_filtering),
|
||||||
Settings::GetTextureFilterName(m_sprite_texture_filtering), Host::OSD_ERROR_DURATION));
|
Settings::GetTextureFilterName(m_sprite_texture_filtering), Host::OSD_ERROR_DURATION));
|
||||||
|
@ -564,7 +565,7 @@ void GPU_HW::CheckSettings()
|
||||||
{
|
{
|
||||||
// m_allow_shader_blend/m_prefer_shader_blend will be cleared in pipeline compile.
|
// m_allow_shader_blend/m_prefer_shader_blend will be cleared in pipeline compile.
|
||||||
Host::AddIconOSDMessage(
|
Host::AddIconOSDMessage(
|
||||||
"AccurateBlendingUnsupported", ICON_FA_PAINT_BRUSH,
|
"AccurateBlendingUnsupported", ICON_EMOJI_WARNING,
|
||||||
TRANSLATE_STR("GPU_HW", "Accurate blending is not supported by your current GPU.\nIt requires framebuffer fetch, "
|
TRANSLATE_STR("GPU_HW", "Accurate blending is not supported by your current GPU.\nIt requires framebuffer fetch, "
|
||||||
"feedback loops, or rasterizer order views."),
|
"feedback loops, or rasterizer order views."),
|
||||||
Host::OSD_WARNING_DURATION);
|
Host::OSD_WARNING_DURATION);
|
||||||
|
@ -574,7 +575,7 @@ void GPU_HW::CheckSettings()
|
||||||
(m_pgxp_depth_buffer && features.raster_order_views && !features.feedback_loops)))
|
(m_pgxp_depth_buffer && features.raster_order_views && !features.feedback_loops)))
|
||||||
{
|
{
|
||||||
Host::AddIconOSDMessage(
|
Host::AddIconOSDMessage(
|
||||||
"AccurateBlendingUnsupported", ICON_FA_PAINT_BRUSH,
|
"AccurateBlendingUnsupported", ICON_EMOJI_WARNING,
|
||||||
TRANSLATE_STR("GPU_HW", "Multisample anti-aliasing is not supported when using ROV blending."),
|
TRANSLATE_STR("GPU_HW", "Multisample anti-aliasing is not supported when using ROV blending."),
|
||||||
Host::OSD_WARNING_DURATION);
|
Host::OSD_WARNING_DURATION);
|
||||||
m_multisamples = 1;
|
m_multisamples = 1;
|
||||||
|
@ -583,7 +584,7 @@ void GPU_HW::CheckSettings()
|
||||||
if (m_pgxp_depth_buffer && !features.feedback_loops && !features.framebuffer_fetch && !features.raster_order_views)
|
if (m_pgxp_depth_buffer && !features.feedback_loops && !features.framebuffer_fetch && !features.raster_order_views)
|
||||||
{
|
{
|
||||||
Host::AddIconOSDMessage(
|
Host::AddIconOSDMessage(
|
||||||
"AccurateBlendingUnsupported", ICON_FA_PAINT_BRUSH,
|
"AccurateBlendingUnsupported", ICON_EMOJI_WARNING,
|
||||||
TRANSLATE_STR("GPU_HW", "PGXP depth buffer is not supported by your current GPU or renderer.\nIt requires "
|
TRANSLATE_STR("GPU_HW", "PGXP depth buffer is not supported by your current GPU or renderer.\nIt requires "
|
||||||
"framebuffer fetch, feedback loops, or rasterizer order views."),
|
"framebuffer fetch, feedback loops, or rasterizer order views."),
|
||||||
Host::OSD_WARNING_DURATION);
|
Host::OSD_WARNING_DURATION);
|
||||||
|
@ -596,7 +597,7 @@ void GPU_HW::CheckSettings()
|
||||||
if (!features.geometry_shaders && m_wireframe_mode != GPUWireframeMode::Disabled)
|
if (!features.geometry_shaders && m_wireframe_mode != GPUWireframeMode::Disabled)
|
||||||
{
|
{
|
||||||
Host::AddIconOSDMessage(
|
Host::AddIconOSDMessage(
|
||||||
"GeometryShadersUnsupported", ICON_FA_EXCLAMATION_TRIANGLE,
|
"GeometryShadersUnsupported", ICON_EMOJI_WARNING,
|
||||||
TRANSLATE("GPU_HW", "Geometry shaders are not supported by your GPU, and are required for wireframe rendering."),
|
TRANSLATE("GPU_HW", "Geometry shaders are not supported by your GPU, and are required for wireframe rendering."),
|
||||||
Host::OSD_CRITICAL_ERROR_DURATION);
|
Host::OSD_CRITICAL_ERROR_DURATION);
|
||||||
m_wireframe_mode = GPUWireframeMode::Disabled;
|
m_wireframe_mode = GPUWireframeMode::Disabled;
|
||||||
|
@ -950,10 +951,10 @@ bool GPU_HW::CompilePipelines(Error* error)
|
||||||
// Abuse the depth buffer for the mask bit when it's free (FBFetch), or PGXP depth buffering is enabled.
|
// Abuse the depth buffer for the mask bit when it's free (FBFetch), or PGXP depth buffering is enabled.
|
||||||
m_allow_shader_blend = features.framebuffer_fetch ||
|
m_allow_shader_blend = features.framebuffer_fetch ||
|
||||||
((features.feedback_loops || features.raster_order_views) &&
|
((features.feedback_loops || features.raster_order_views) &&
|
||||||
(m_pgxp_depth_buffer || g_settings.gpu_accurate_blending ||
|
(m_pgxp_depth_buffer || g_settings.IsUsingAccurateBlending() ||
|
||||||
(!m_supports_dual_source_blend && (IsBlendedTextureFiltering(m_texture_filtering) ||
|
(!m_supports_dual_source_blend && (IsBlendedTextureFiltering(m_texture_filtering) ||
|
||||||
IsBlendedTextureFiltering(m_sprite_texture_filtering)))));
|
IsBlendedTextureFiltering(m_sprite_texture_filtering)))));
|
||||||
m_prefer_shader_blend = (m_allow_shader_blend && g_settings.gpu_accurate_blending && !g_settings.gpu_true_color);
|
m_prefer_shader_blend = (m_allow_shader_blend && g_settings.IsUsingAccurateBlending());
|
||||||
m_use_rov_for_shader_blend = (m_allow_shader_blend && !features.framebuffer_fetch && features.raster_order_views &&
|
m_use_rov_for_shader_blend = (m_allow_shader_blend && !features.framebuffer_fetch && features.raster_order_views &&
|
||||||
(m_prefer_shader_blend || !features.feedback_loops));
|
(m_prefer_shader_blend || !features.feedback_loops));
|
||||||
m_write_mask_as_depth = (!m_pgxp_depth_buffer && !features.framebuffer_fetch && !m_prefer_shader_blend);
|
m_write_mask_as_depth = (!m_pgxp_depth_buffer && !features.framebuffer_fetch && !m_prefer_shader_blend);
|
||||||
|
|
Loading…
Reference in a new issue