Merge pull request #1637 from LukeUsher/smashing-drive-non-nvidia
'Fix' Smashing drive non-nvidia hardware
This commit is contained in:
commit
654a4c0e4d
|
@ -27,6 +27,7 @@
|
||||||
#define _XBOXKRNL_DEFEXTRN_
|
#define _XBOXKRNL_DEFEXTRN_
|
||||||
#define LOG_PREFIX CXBXR_MODULE::D3DST
|
#define LOG_PREFIX CXBXR_MODULE::D3DST
|
||||||
|
|
||||||
|
#include "core\kernel\init\CxbxKrnl.h"
|
||||||
#include "core\kernel\support\Emu.h"
|
#include "core\kernel\support\Emu.h"
|
||||||
#include "core\kernel\support\EmuXTL.h"
|
#include "core\kernel\support\EmuXTL.h"
|
||||||
|
|
||||||
|
@ -90,10 +91,22 @@ void UpdateDeferredRenderStates()
|
||||||
|
|
||||||
// Convert from Xbox Data Formats to PC
|
// Convert from Xbox Data Formats to PC
|
||||||
switch (RenderState) {
|
switch (RenderState) {
|
||||||
|
case XTL::X_D3DRS_FOGSTART:
|
||||||
|
case XTL::X_D3DRS_FOGEND: {
|
||||||
|
// HACK: If the fog start/fog-end are negative, make them positive
|
||||||
|
// This fixes Smashing Drive on non-nvidia hardware
|
||||||
|
// Cause appears to be non-nvidia drivers clamping values < 0 to 0
|
||||||
|
// Resulting in the fog formula becoming (0 - d) / 0, which breaks rendering
|
||||||
|
// This prevents that scenario for screen-space fog, *hopefully* without breaking eye-based fog also
|
||||||
|
float fogValue = *(float*)&Value;
|
||||||
|
if (fogValue < 0.0f) {
|
||||||
|
LOG_TEST_CASE("FOGSTART/FOGEND below 0");
|
||||||
|
fogValue = std::abs(fogValue);
|
||||||
|
Value = *(DWORD*)&Value;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
case XTL::X_D3DRS_FOGENABLE:
|
case XTL::X_D3DRS_FOGENABLE:
|
||||||
case XTL::X_D3DRS_FOGTABLEMODE:
|
case XTL::X_D3DRS_FOGTABLEMODE:
|
||||||
case XTL::X_D3DRS_FOGSTART:
|
|
||||||
case XTL::X_D3DRS_FOGEND:
|
|
||||||
case XTL::X_D3DRS_FOGDENSITY:
|
case XTL::X_D3DRS_FOGDENSITY:
|
||||||
case XTL::X_D3DRS_RANGEFOGENABLE:
|
case XTL::X_D3DRS_RANGEFOGENABLE:
|
||||||
case XTL::X_D3DRS_LIGHTING:
|
case XTL::X_D3DRS_LIGHTING:
|
||||||
|
|
Loading…
Reference in New Issue