mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-06 20:58:37 +01:00
[util] Add a config option for shader register index validations
This commit is contained in:
parent
150cb0d4c7
commit
92fc317c29
6 changed files with 24 additions and 3 deletions
|
@ -4,6 +4,7 @@
|
||||||
#include "d3d9_caps.h"
|
#include "d3d9_caps.h"
|
||||||
#include "d3d9_device.h"
|
#include "d3d9_device.h"
|
||||||
#include "d3d9_bridge.h"
|
#include "d3d9_bridge.h"
|
||||||
|
#include "d3d9_shader_validator.h"
|
||||||
|
|
||||||
#include "../util/util_singleton.h"
|
#include "../util/util_singleton.h"
|
||||||
|
|
||||||
|
@ -67,6 +68,8 @@ namespace dxvk {
|
||||||
SetProcessDPIAware();
|
SetProcessDPIAware();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
D3D9ShaderValidator::SetValidateInputRegisterIndex(m_d3d9Options.validateInputRegisterIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ namespace dxvk {
|
||||||
this->clampNegativeLodBias = config.getOption<bool> ("d3d9.clampNegativeLodBias", false);
|
this->clampNegativeLodBias = config.getOption<bool> ("d3d9.clampNegativeLodBias", false);
|
||||||
this->countLosableResources = config.getOption<bool> ("d3d9.countLosableResources", true);
|
this->countLosableResources = config.getOption<bool> ("d3d9.countLosableResources", true);
|
||||||
this->reproducibleCommandStream = config.getOption<bool> ("d3d9.reproducibleCommandStream", false);
|
this->reproducibleCommandStream = config.getOption<bool> ("d3d9.reproducibleCommandStream", false);
|
||||||
|
this->validateInputRegisterIndex = config.getOption<bool> ("d3d9.validateInputRegisterIndex", false);
|
||||||
|
|
||||||
// D3D8 options
|
// D3D8 options
|
||||||
this->drefScaling = config.getOption<int32_t> ("d3d8.scaleDref", 0);
|
this->drefScaling = config.getOption<int32_t> ("d3d8.scaleDref", 0);
|
||||||
|
|
|
@ -153,6 +153,9 @@ namespace dxvk {
|
||||||
/// can negatively affect performance.
|
/// can negatively affect performance.
|
||||||
bool reproducibleCommandStream;
|
bool reproducibleCommandStream;
|
||||||
|
|
||||||
|
// Validate input register index for PS 3.0 in D3D9ShaderValidator
|
||||||
|
bool validateInputRegisterIndex;
|
||||||
|
|
||||||
/// Enable depth texcoord Z (Dref) scaling (D3D8 quirk)
|
/// Enable depth texcoord Z (Dref) scaling (D3D8 quirk)
|
||||||
int32_t drefScaling;
|
int32_t drefScaling;
|
||||||
};
|
};
|
||||||
|
|
|
@ -77,7 +77,7 @@ namespace dxvk {
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// a maximum of 10 inputs are supported with PS 3.0 (validation required by The Void)
|
// a maximum of 10 inputs are supported with PS 3.0 (validation required by The Void)
|
||||||
if (m_isPixelShader && m_majorVersion == 3) {
|
if (s_validateInputRegisterIndex && m_isPixelShader && m_majorVersion == 3) {
|
||||||
switch (instContext.instruction.opcode) {
|
switch (instContext.instruction.opcode) {
|
||||||
case DxsoOpcode::Comment:
|
case DxsoOpcode::Comment:
|
||||||
case DxsoOpcode::Def:
|
case DxsoOpcode::Def:
|
||||||
|
@ -193,8 +193,6 @@ namespace dxvk {
|
||||||
if (m_callback)
|
if (m_callback)
|
||||||
m_callback(pFile, Line, Unknown, MessageID, Message.c_str(), m_userData);
|
m_callback(pFile, Line, Unknown, MessageID, Message.c_str(), m_userData);
|
||||||
|
|
||||||
// TODO: Consider switching this to debug, once we're
|
|
||||||
// confident the implementation doesn't cause any issues
|
|
||||||
Logger::warn(Message);
|
Logger::warn(Message);
|
||||||
|
|
||||||
m_state = D3D9ShaderValidatorState::Error;
|
m_state = D3D9ShaderValidatorState::Error;
|
||||||
|
@ -202,4 +200,9 @@ namespace dxvk {
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// s_validateInputRegisterIndex will be parsed and set appropriately based
|
||||||
|
// on config options whenever a D3D9InterfaceEx type object is created
|
||||||
|
bool D3D9ShaderValidator::s_validateInputRegisterIndex = false;
|
||||||
|
|
||||||
}
|
}
|
|
@ -76,6 +76,10 @@ namespace dxvk {
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE End();
|
HRESULT STDMETHODCALLTYPE End();
|
||||||
|
|
||||||
|
static void SetValidateInputRegisterIndex (bool value) {
|
||||||
|
s_validateInputRegisterIndex = value;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
HRESULT ValidateHeader(const char* pFile, UINT Line, const DWORD* pdwInst, DWORD cdw);
|
HRESULT ValidateHeader(const char* pFile, UINT Line, const DWORD* pdwInst, DWORD cdw);
|
||||||
|
@ -89,6 +93,8 @@ namespace dxvk {
|
||||||
D3D9ShaderValidatorMessage MessageID,
|
D3D9ShaderValidatorMessage MessageID,
|
||||||
const std::string& Message);
|
const std::string& Message);
|
||||||
|
|
||||||
|
static bool s_validateInputRegisterIndex;
|
||||||
|
|
||||||
bool m_isPixelShader = false;
|
bool m_isPixelShader = false;
|
||||||
uint32_t m_majorVersion = 0;
|
uint32_t m_majorVersion = 0;
|
||||||
uint32_t m_minorVersion = 0;
|
uint32_t m_minorVersion = 0;
|
||||||
|
|
|
@ -1021,6 +1021,11 @@ namespace dxvk {
|
||||||
{ R"(\\(AH3LM|AALib)\.exe$)", {{
|
{ R"(\\(AH3LM|AALib)\.exe$)", {{
|
||||||
{ "d3d9.maxFrameRate", "60" },
|
{ "d3d9.maxFrameRate", "60" },
|
||||||
}} },
|
}} },
|
||||||
|
/* The Void - Crashes in several locations *
|
||||||
|
* without input register index validations */
|
||||||
|
{ R"(\\The Void\\bin\\win32\\Game\.exe$)", {{
|
||||||
|
{ "d3d9.validateInputRegisterIndex", "True" },
|
||||||
|
}} },
|
||||||
|
|
||||||
/**********************************************/
|
/**********************************************/
|
||||||
/* D3D8 GAMES */
|
/* D3D8 GAMES */
|
||||||
|
|
Loading…
Add table
Reference in a new issue