1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Add enableCoverage setting.

Not implemented for GLideNUI-wtl yet.
This commit is contained in:
Sergey Lipskiy 2020-12-26 00:06:51 +07:00
parent 2233cf9f04
commit 47054eabc0
11 changed files with 30 additions and 3 deletions

View File

@ -45,6 +45,7 @@ void Config::resetToDefaults()
generalEmulation.enableDitheringQuantization = 1;
generalEmulation.rdramImageDitheringMode = BufferDitheringMode::bdmBlueNoise;
generalEmulation.enableHWLighting = 0;
generalEmulation.enableCoverage = 1;
generalEmulation.enableCustomSettings = 1;
generalEmulation.enableShadersStorage = 1;
generalEmulation.enableLegacyBlending = 0;

View File

@ -60,6 +60,7 @@ struct Config
u32 rdramImageDitheringMode;
u32 enableLOD;
u32 enableHWLighting;
u32 enableCoverage;
u32 enableCustomSettings;
u32 enableShadersStorage;
u32 enableLegacyBlending;

View File

@ -48,6 +48,7 @@ void _loadSettings(GlSettings & settings)
config.generalEmulation.rdramImageDitheringMode = settings.value("rdramImageDitheringMode", config.generalEmulation.rdramImageDitheringMode).toInt();
config.generalEmulation.enableLOD = settings.value("enableLOD", config.generalEmulation.enableLOD).toInt();
config.generalEmulation.enableHWLighting = settings.value("enableHWLighting", config.generalEmulation.enableHWLighting).toInt();
config.generalEmulation.enableCoverage = settings.value("enableCoverage", config.generalEmulation.enableCoverage).toInt();
config.generalEmulation.enableShadersStorage = settings.value("enableShadersStorage", config.generalEmulation.enableShadersStorage).toInt();
config.generalEmulation.enableLegacyBlending = settings.value("enableLegacyBlending", config.generalEmulation.enableLegacyBlending).toInt(); //ini only
config.generalEmulation.enableHybridFilter = settings.value("enableHybridFilter", config.generalEmulation.enableHybridFilter).toInt(); //ini only
@ -231,6 +232,7 @@ void writeSettings(const char * _strIniFolder)
settings.setValue("rdramImageDitheringMode", config.generalEmulation.rdramImageDitheringMode);
settings.setValue("enableLOD", config.generalEmulation.enableLOD);
settings.setValue("enableHWLighting", config.generalEmulation.enableHWLighting);
settings.setValue("enableCoverage", config.generalEmulation.enableCoverage);
settings.setValue("enableShadersStorage", config.generalEmulation.enableShadersStorage);
settings.setValue("enableLegacyBlending", config.generalEmulation.enableLegacyBlending); //ini only
settings.setValue("enableHybridFilter", config.generalEmulation.enableHybridFilter); //ini only
@ -432,6 +434,7 @@ void saveCustomRomSettings(const char * _strIniFolder, const char * _strRomName)
WriteCustomSetting(generalEmulation, rdramImageDitheringMode);
WriteCustomSetting(generalEmulation, enableLOD);
WriteCustomSetting(generalEmulation, enableHWLighting);
WriteCustomSetting(generalEmulation, enableCoverage);
WriteCustomSetting(generalEmulation, enableShadersStorage);
settings.endGroup();

View File

@ -218,6 +218,7 @@ void ConfigDialog::_init(bool reInit, bool blockCustomSettings)
// Emulation settings
ui->emulateLodCheckBox->setChecked(config.generalEmulation.enableLOD != 0);
ui->enableHWLightingCheckBox->setChecked(config.generalEmulation.enableHWLighting != 0);
ui->enableCoverageCheckBox->setChecked(config.generalEmulation.enableCoverage != 0);
ui->enableShadersStorageCheckBox->setChecked(config.generalEmulation.enableShadersStorage != 0);
if (!blockCustomSettings)
ui->customSettingsCheckBox->setChecked(config.generalEmulation.enableCustomSettings != 0);
@ -555,6 +556,7 @@ void ConfigDialog::accept(bool justSave) {
// Emulation settings
config.generalEmulation.enableLOD = ui->emulateLodCheckBox->isChecked() ? 1 : 0;
config.generalEmulation.enableHWLighting = ui->enableHWLightingCheckBox->isChecked() ? 1 : 0;
config.generalEmulation.enableCoverage = ui->enableCoverageCheckBox->isChecked() ? 1 : 0;
config.generalEmulation.enableShadersStorage = ui->enableShadersStorageCheckBox->isChecked() ? 1 : 0;
config.generalEmulation.enableCustomSettings = ui->customSettingsCheckBox->isChecked() ? 1 : 0;

View File

@ -47,6 +47,7 @@ void _loadSettings(QSettings & settings)
config.generalEmulation.rdramImageDitheringMode = settings.value("rdramImageDitheringMode", config.generalEmulation.rdramImageDitheringMode).toInt();
config.generalEmulation.enableLOD = settings.value("enableLOD", config.generalEmulation.enableLOD).toInt();
config.generalEmulation.enableHWLighting = settings.value("enableHWLighting", config.generalEmulation.enableHWLighting).toInt();
config.generalEmulation.enableCoverage = settings.value("enableCoverage", config.generalEmulation.enableCoverage).toInt();
config.generalEmulation.enableShadersStorage = settings.value("enableShadersStorage", config.generalEmulation.enableShadersStorage).toInt();
config.generalEmulation.enableLegacyBlending = settings.value("enableLegacyBlending", config.generalEmulation.enableLegacyBlending).toInt(); //ini only
config.generalEmulation.enableHybridFilter = settings.value("enableHybridFilter", config.generalEmulation.enableHybridFilter).toInt(); //ini only
@ -230,6 +231,7 @@ void writeSettings(const QString & _strIniFolder)
settings.setValue("rdramImageDitheringMode", config.generalEmulation.rdramImageDitheringMode);
settings.setValue("enableLOD", config.generalEmulation.enableLOD);
settings.setValue("enableHWLighting", config.generalEmulation.enableHWLighting);
settings.setValue("enableCoverage", config.generalEmulation.enableCoverage);
settings.setValue("enableShadersStorage", config.generalEmulation.enableShadersStorage);
settings.setValue("enableLegacyBlending", config.generalEmulation.enableLegacyBlending); //ini only
settings.setValue("enableHybridFilter", config.generalEmulation.enableHybridFilter); //ini only
@ -431,6 +433,7 @@ void saveCustomRomSettings(const QString & _strIniFolder, const char * _strRomNa
WriteCustomSetting(generalEmulation, rdramImageDitheringMode);
WriteCustomSetting(generalEmulation, enableLOD);
WriteCustomSetting(generalEmulation, enableHWLighting);
WriteCustomSetting(generalEmulation, enableCoverage);
WriteCustomSetting(generalEmulation, enableShadersStorage);
settings.endGroup();

View File

@ -1143,6 +1143,16 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enableCoverageCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Enable pixel coverage calculation. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;Enables approximated pixel coverage calculation. N64 uses pixel coverage for anti-aliasing and in some special blending modes. Some games have wire-frame mode aka 'pen and ink' mode. This mode also needs pixel coverage calculated. &lt;/p&gt;&lt;p&gt;[Recommended: Checked, unless performance is hurt]&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Enable pixel coverage calculation</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enableShadersStorageCheckBox">
<property name="toolTip">

View File

@ -16,6 +16,7 @@ namespace graphics {
vecOptions.push_back(config.generalEmulation.enableDitheringPattern);
vecOptions.push_back(config.generalEmulation.enableDitheringQuantization);
vecOptions.push_back(config.generalEmulation.enableLOD);
vecOptions.push_back(config.generalEmulation.enableCoverage);
vecOptions.push_back(config.frameBufferEmulation.N64DepthCompare == Config::dcFast ? 1 : 0);
vecOptions.push_back(config.frameBufferEmulation.N64DepthCompare == Config::dcCompatible ? 1 : 0);
vecOptions.push_back(config.generalEmulation.enableLegacyBlending);

View File

@ -2824,13 +2824,12 @@ graphics::CombinerProgram * CombinerProgramBuilder::buildCombinerProgram(Combine
if (g_cycleType <= G_CYC_2CYCLE)
m_fragmentBlendMux->write(ssShader);
if (g_cycleType <= G_CYC_2CYCLE)
if (g_cycleType <= G_CYC_2CYCLE && m_useCoverage)
m_shaderCoverage->write(ssShader);
else
ssShader << "cvg = 1.0f; \n" << std::endl;
if (bUseTextures) {
if (combinerInputs.usesTile(0))
{
@ -3027,6 +3026,7 @@ CombinerProgramBuilder::CombinerProgramBuilder(const opengl::GLInfo & _glinfo, o
m_vertexShaderTexturedRect = _createVertexShader(m_vertexHeader.get(), m_vertexTexturedRect.get(), m_vertexEnd.get());
m_vertexShaderTexturedTriangle = _createVertexShader(m_vertexHeader.get(), m_vertexTexturedTriangle.get(), m_vertexEnd.get());
m_uniformFactory.reset(new CombinerProgramUniformFactory(_glinfo));
m_useCoverage = (config.generalEmulation.enableCoverage != 0) && (_glinfo.dual_source_blending || _glinfo.ext_fetch || _glinfo.ext_fetch_arm);
}
CombinerProgramBuilder::~CombinerProgramBuilder()

View File

@ -102,6 +102,7 @@ namespace glsl {
GLuint m_vertexShaderTexturedTriangle;
opengl::CachedUseProgram * m_useProgram;
u32 m_combinerOptionsBits;
bool m_useCoverage = false;
};
}

View File

@ -20,7 +20,7 @@ namespace glsl {
bool _saveCombinerKeys(const graphics::Combiners & _combiners) const;
bool _loadFromCombinerKeys(graphics::Combiners & _combiners);
const u32 m_formatVersion = 0x2FU;
const u32 m_formatVersion = 0x30U;
const u32 m_keysFormatVersion = 0x04;
const opengl::GLInfo & m_glinfo;
opengl::CachedUseProgram * m_useProgram;

View File

@ -149,6 +149,8 @@ bool Config_SetDefault()
assert(res == M64ERR_SUCCESS);
res = ConfigSetDefaultBool(g_configVideoGliden64, "EnableHWLighting", config.generalEmulation.enableHWLighting, "Enable hardware per-pixel lighting.");
assert(res == M64ERR_SUCCESS);
res = ConfigSetDefaultBool(g_configVideoGliden64, "EnableCoverage", config.generalEmulation.enableCoverage, "Enable pixel coverage calculation. Used for better blending emulation and wire-frame mode. Needs fast GPU.");
assert(res == M64ERR_SUCCESS);
res = ConfigSetDefaultBool(g_configVideoGliden64, "EnableShadersStorage", config.generalEmulation.enableShadersStorage, "Use persistent storage for compiled shaders.");
assert(res == M64ERR_SUCCESS);
res = ConfigSetDefaultBool(g_configVideoGliden64, "EnableLegacyBlending", config.generalEmulation.enableLegacyBlending, "Do not use shaders to emulate N64 blending modes. Works faster on slow GPU. Can cause glitches.");
@ -360,6 +362,8 @@ void Config_LoadCustomConfig()
if (result == M64ERR_SUCCESS) config.generalEmulation.enableLOD = atoi(value);
result = ConfigExternalGetParameter(fileHandle, sectionName, "generalEmulation\\enableHWLighting", value, sizeof(value));
if (result == M64ERR_SUCCESS) config.generalEmulation.enableHWLighting = atoi(value);
result = ConfigExternalGetParameter(fileHandle, sectionName, "generalEmulation\\enableCoverage", value, sizeof(value));
if (result == M64ERR_SUCCESS) config.generalEmulation.enableCoverage = atoi(value);
result = ConfigExternalGetParameter(fileHandle, sectionName, "generalEmulation\\enableShadersStorage", value, sizeof(value));
if (result == M64ERR_SUCCESS) config.generalEmulation.enableShadersStorage = atoi(value);
result = ConfigExternalGetParameter(fileHandle, sectionName, "generalEmulation\\enableLegacyBlending", value, sizeof(value));
@ -483,6 +487,7 @@ void Config_LoadConfig()
config.generalEmulation.enableLOD = ConfigGetParamBool(g_configVideoGliden64, "EnableLOD");
config.generalEmulation.enableHWLighting = ConfigGetParamBool(g_configVideoGliden64, "EnableHWLighting");
config.generalEmulation.enableCoverage = ConfigGetParamBool(g_configVideoGliden64, "EnableCoverage");
config.generalEmulation.enableShadersStorage = ConfigGetParamBool(g_configVideoGliden64, "EnableShadersStorage");
config.generalEmulation.enableLegacyBlending = ConfigGetParamBool(g_configVideoGliden64, "EnableLegacyBlending");
config.generalEmulation.enableHybridFilter = ConfigGetParamBool(g_configVideoGliden64, "EnableHybridFilter");