From 63563763ddfc200115b90320ab21ff22faff273f Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 11 Apr 2020 12:37:36 +0100 Subject: [PATCH] vsh: reduce number of instructions required to handle bounds checking --- .../D3D8/Direct3D9/CxbxVertexShaderTemplate.hlsl | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/core/hle/D3D8/Direct3D9/CxbxVertexShaderTemplate.hlsl b/src/core/hle/D3D8/Direct3D9/CxbxVertexShaderTemplate.hlsl index b352be68f..1ba2c39fe 100644 --- a/src/core/hle/D3D8/Direct3D9/CxbxVertexShaderTemplate.hlsl +++ b/src/core/hle/D3D8/Direct3D9/CxbxVertexShaderTemplate.hlsl @@ -48,11 +48,16 @@ float4 c(int register_number) // Map Xbox [-96, 95] to Host [0, 191] // Account for Xbox's negative constant indexes register_number += X_D3DSCM_CORRECTION; - if (register_number < 0) - return 0; - + + // Like Xbox, out-of-range indices are guaranteed to be zero in HLSL + // so no need to bounds check negative numbers + // if (register_number < 0) + // return 0; + + // If the index is too large, set it to -1 so 0 is returned + // Note: returning 0 directly requires many more instructions if (register_number >= X_D3DVS_CONSTREG_COUNT) // X_D3DVS_CONSTREG_COUNT - return 0; + register_number = -1; return C[register_number]; }