GPU_LUTINPUT_CP requires light env layer config 7

This commit is contained in:
fincs 2017-05-30 17:52:50 +02:00
parent 145cea4e89
commit 52702d1f9f
2 changed files with 12 additions and 4 deletions

View File

@ -43,6 +43,8 @@ enum
C3DF_LightEnv_MtlDirty = BIT(1),
C3DF_LightEnv_LCDirty = BIT(2),
#define C3DF_LightEnv_IsCP(n) BIT(18+(n))
#define C3DF_LightEnv_IsCP_Any (0xFF<<18)
#define C3DF_LightEnv_LutDirty(n) BIT(26+(n))
#define C3DF_LightEnv_LutDirtyAll (0x3F<<26)
};

View File

@ -40,10 +40,12 @@ static void C3Di_LightEnvSelectLayer(C3D_LightEnv* env)
if (reg & (0xFF<< 8)) reg |= GPU_LC1_LUTBIT(GPU_LUT_SP);
if (reg & (0xFF<<24)) reg |= GPU_LC1_LUTBIT(GPU_LUT_DA);
reg = (reg >> 16) & 0xFF;
int i;
for (i = 0; i < 7; i ++)
if ((layer_enabled[i] & reg) == reg) // Check if the layer supports all LUTs we need
break;
int i = 7;
if (!(env->flags & C3DF_LightEnv_IsCP_Any))
for (i = 0; i < 7; i ++)
if ((layer_enabled[i] & reg) == reg) // Check if the layer supports all LUTs we need
break;
env->conf.config[0] = (env->conf.config[0] &~ (0xF<<4)) | (GPU_LIGHT_ENV_LAYER_CONFIG(i)<<4);
}
@ -221,6 +223,10 @@ void C3D_LightEnvLut(C3D_LightEnv* env, GPU_LIGHTLUTID lutId, GPU_LIGHTLUTINPUT
env->conf.lutInput.abs |= absbit;
env->flags |= C3DF_LightEnv_Dirty;
if (input == GPU_LUTINPUT_CP)
env->flags |= C3DF_LightEnv_IsCP(lutId);
else
env->flags &= ~C3DF_LightEnv_IsCP(lutId);
}
void C3D_LightEnvFresnel(C3D_LightEnv* env, GPU_FRESNELSEL selector)