videoconfig: add BBoxPreferStencilImplementation
@JMC47 requested this to be able to do performance comparisons.
This commit is contained in:
parent
53224d41d0
commit
134317e07f
|
@ -28,7 +28,7 @@ namespace OGL
|
||||||
{
|
{
|
||||||
void BoundingBox::SetTargetSizeChanged(int target_width, int target_height)
|
void BoundingBox::SetTargetSizeChanged(int target_width, int target_height)
|
||||||
{
|
{
|
||||||
if (g_ActiveConfig.backend_info.bSupportsFragmentStoresAndAtomics)
|
if (g_ActiveConfig.BBoxUseFragmentShaderImplementation())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
s_target_width = target_width;
|
s_target_width = target_width;
|
||||||
|
@ -42,7 +42,7 @@ void BoundingBox::SetTargetSizeChanged(int target_width, int target_height)
|
||||||
|
|
||||||
void BoundingBox::Init(int target_width, int target_height)
|
void BoundingBox::Init(int target_width, int target_height)
|
||||||
{
|
{
|
||||||
if (g_ActiveConfig.backend_info.bSupportsFragmentStoresAndAtomics)
|
if (g_ActiveConfig.BBoxUseFragmentShaderImplementation())
|
||||||
{
|
{
|
||||||
int initial_values[4] = {0, 0, 0, 0};
|
int initial_values[4] = {0, 0, 0, 0};
|
||||||
glGenBuffers(1, &s_bbox_buffer_id);
|
glGenBuffers(1, &s_bbox_buffer_id);
|
||||||
|
@ -60,7 +60,7 @@ void BoundingBox::Init(int target_width, int target_height)
|
||||||
|
|
||||||
void BoundingBox::Shutdown()
|
void BoundingBox::Shutdown()
|
||||||
{
|
{
|
||||||
if (g_ActiveConfig.backend_info.bSupportsFragmentStoresAndAtomics)
|
if (g_ActiveConfig.BBoxUseFragmentShaderImplementation())
|
||||||
{
|
{
|
||||||
glDeleteBuffers(1, &s_bbox_buffer_id);
|
glDeleteBuffers(1, &s_bbox_buffer_id);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ void BoundingBox::Shutdown()
|
||||||
|
|
||||||
void BoundingBox::Set(int index, int value)
|
void BoundingBox::Set(int index, int value)
|
||||||
{
|
{
|
||||||
if (g_ActiveConfig.backend_info.bSupportsFragmentStoresAndAtomics)
|
if (g_ActiveConfig.BBoxUseFragmentShaderImplementation())
|
||||||
{
|
{
|
||||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, s_bbox_buffer_id);
|
glBindBuffer(GL_SHADER_STORAGE_BUFFER, s_bbox_buffer_id);
|
||||||
glBufferSubData(GL_SHADER_STORAGE_BUFFER, index * sizeof(int), sizeof(int), &value);
|
glBufferSubData(GL_SHADER_STORAGE_BUFFER, index * sizeof(int), sizeof(int), &value);
|
||||||
|
@ -95,7 +95,7 @@ void BoundingBox::Set(int index, int value)
|
||||||
|
|
||||||
int BoundingBox::Get(int index)
|
int BoundingBox::Get(int index)
|
||||||
{
|
{
|
||||||
if (g_ActiveConfig.backend_info.bSupportsFragmentStoresAndAtomics)
|
if (g_ActiveConfig.BBoxUseFragmentShaderImplementation())
|
||||||
{
|
{
|
||||||
int data = 0;
|
int data = 0;
|
||||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, s_bbox_buffer_id);
|
glBindBuffer(GL_SHADER_STORAGE_BUFFER, s_bbox_buffer_id);
|
||||||
|
@ -170,7 +170,6 @@ void BoundingBox::StencilWasUpdated()
|
||||||
|
|
||||||
bool BoundingBox::NeedsStencilBuffer()
|
bool BoundingBox::NeedsStencilBuffer()
|
||||||
{
|
{
|
||||||
return g_ActiveConfig.bBBoxEnable &&
|
return g_ActiveConfig.bBBoxEnable && !g_ActiveConfig.BBoxUseFragmentShaderImplementation();
|
||||||
!g_ActiveConfig.backend_info.bSupportsFragmentStoresAndAtomics;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -158,14 +158,14 @@ void VertexManager::vFlush()
|
||||||
// setup the pointers
|
// setup the pointers
|
||||||
nativeVertexFmt->SetupVertexPointers();
|
nativeVertexFmt->SetupVertexPointers();
|
||||||
|
|
||||||
if (!g_Config.backend_info.bSupportsFragmentStoresAndAtomics && ::BoundingBox::active)
|
if (::BoundingBox::active && !g_Config.BBoxUseFragmentShaderImplementation())
|
||||||
{
|
{
|
||||||
glEnable(GL_STENCIL_TEST);
|
glEnable(GL_STENCIL_TEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw(stride);
|
Draw(stride);
|
||||||
|
|
||||||
if (!g_Config.backend_info.bSupportsFragmentStoresAndAtomics && ::BoundingBox::active)
|
if (::BoundingBox::active && !g_Config.BBoxUseFragmentShaderImplementation())
|
||||||
{
|
{
|
||||||
OGL::BoundingBox::StencilWasUpdated();
|
OGL::BoundingBox::StencilWasUpdated();
|
||||||
glDisable(GL_STENCIL_TEST);
|
glDisable(GL_STENCIL_TEST);
|
||||||
|
|
|
@ -171,8 +171,7 @@ PixelShaderUid GetPixelShaderUid()
|
||||||
uid_data->genMode_numtevstages = bpmem.genMode.numtevstages;
|
uid_data->genMode_numtevstages = bpmem.genMode.numtevstages;
|
||||||
uid_data->genMode_numtexgens = bpmem.genMode.numtexgens;
|
uid_data->genMode_numtexgens = bpmem.genMode.numtexgens;
|
||||||
uid_data->per_pixel_lighting = g_ActiveConfig.bEnablePixelLighting;
|
uid_data->per_pixel_lighting = g_ActiveConfig.bEnablePixelLighting;
|
||||||
uid_data->bounding_box = g_ActiveConfig.backend_info.bSupportsBBox &&
|
uid_data->bounding_box = g_ActiveConfig.BBoxUseFragmentShaderImplementation() &&
|
||||||
g_ActiveConfig.backend_info.bSupportsFragmentStoresAndAtomics &&
|
|
||||||
g_ActiveConfig.bBBoxEnable && BoundingBox::active;
|
g_ActiveConfig.bBBoxEnable && BoundingBox::active;
|
||||||
uid_data->rgba6_format =
|
uid_data->rgba6_format =
|
||||||
bpmem.zcontrol.pixel_format == PEControl::RGBA6_Z24 && !g_ActiveConfig.bForceTrueColor;
|
bpmem.zcontrol.pixel_format == PEControl::RGBA6_Z24 && !g_ActiveConfig.bForceTrueColor;
|
||||||
|
|
|
@ -119,6 +119,7 @@ void VideoConfig::Load(const std::string& ini_file)
|
||||||
IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks");
|
IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks");
|
||||||
hacks->Get("EFBAccessEnable", &bEFBAccessEnable, true);
|
hacks->Get("EFBAccessEnable", &bEFBAccessEnable, true);
|
||||||
hacks->Get("BBoxEnable", &bBBoxEnable, false);
|
hacks->Get("BBoxEnable", &bBBoxEnable, false);
|
||||||
|
hacks->Get("BBoxPreferStencilImplementation", &bBBoxPreferStencilImplementation, false);
|
||||||
hacks->Get("ForceProgressive", &bForceProgressive, true);
|
hacks->Get("ForceProgressive", &bForceProgressive, true);
|
||||||
hacks->Get("EFBToTextureEnable", &bSkipEFBCopyToRam, true);
|
hacks->Get("EFBToTextureEnable", &bSkipEFBCopyToRam, true);
|
||||||
hacks->Get("EFBScaledCopy", &bCopyEFBScaled, true);
|
hacks->Get("EFBScaledCopy", &bCopyEFBScaled, true);
|
||||||
|
@ -342,6 +343,7 @@ void VideoConfig::Save(const std::string& ini_file)
|
||||||
IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks");
|
IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks");
|
||||||
hacks->Set("EFBAccessEnable", bEFBAccessEnable);
|
hacks->Set("EFBAccessEnable", bEFBAccessEnable);
|
||||||
hacks->Set("BBoxEnable", bBBoxEnable);
|
hacks->Set("BBoxEnable", bBBoxEnable);
|
||||||
|
hacks->Set("BBoxPreferStencilImplementation", bBBoxPreferStencilImplementation);
|
||||||
hacks->Set("ForceProgressive", bForceProgressive);
|
hacks->Set("ForceProgressive", bForceProgressive);
|
||||||
hacks->Set("EFBToTextureEnable", bSkipEFBCopyToRam);
|
hacks->Set("EFBToTextureEnable", bSkipEFBCopyToRam);
|
||||||
hacks->Set("EFBScaledCopy", bCopyEFBScaled);
|
hacks->Set("EFBScaledCopy", bCopyEFBScaled);
|
||||||
|
|
|
@ -114,6 +114,7 @@ struct VideoConfig final
|
||||||
bool bEFBAccessEnable;
|
bool bEFBAccessEnable;
|
||||||
bool bPerfQueriesEnable;
|
bool bPerfQueriesEnable;
|
||||||
bool bBBoxEnable;
|
bool bBBoxEnable;
|
||||||
|
bool bBBoxPreferStencilImplementation; // OpenGL-only, to see how slow it is compared to SSBOs
|
||||||
bool bForceProgressive;
|
bool bForceProgressive;
|
||||||
|
|
||||||
bool bEFBEmulateFormatChanges;
|
bool bEFBEmulateFormatChanges;
|
||||||
|
@ -203,6 +204,12 @@ struct VideoConfig final
|
||||||
{
|
{
|
||||||
return backend_info.bSupportsExclusiveFullscreen && !bBorderlessFullscreen;
|
return backend_info.bSupportsExclusiveFullscreen && !bBorderlessFullscreen;
|
||||||
}
|
}
|
||||||
|
bool BBoxUseFragmentShaderImplementation() const
|
||||||
|
{
|
||||||
|
if (backend_info.api_type == APIType::OpenGL && bBBoxPreferStencilImplementation)
|
||||||
|
return false;
|
||||||
|
return backend_info.bSupportsBBox && backend_info.bSupportsFragmentStoresAndAtomics;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
extern VideoConfig g_Config;
|
extern VideoConfig g_Config;
|
||||||
|
|
Loading…
Reference in New Issue