yuzu-emu
/
yuzu-android
Archived
1
0
Fork 0

VideoCore: Change misleading register names

A few registers had names such as "count" or "number" when they actually
contained the maximum (that is, count - 1). This can easily lead to hard
to notice off by one errors.
This commit is contained in:
Yuri Kunde Schlesner 2016-12-18 15:39:56 -08:00
parent 5bb6753f2e
commit bbc7844021
4 changed files with 9 additions and 8 deletions

View File

@ -138,7 +138,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
immediate_input.attr[immediate_attribute_id++] = attribute; immediate_input.attr[immediate_attribute_id++] = attribute;
if (immediate_attribute_id >= regs.vs.num_input_attributes + 1) { if (immediate_attribute_id >= regs.vs.max_input_attribute_index + 1) {
MICROPROFILE_SCOPE(GPU_Drawing); MICROPROFILE_SCOPE(GPU_Drawing);
immediate_attribute_id = 0; immediate_attribute_id = 0;
@ -150,7 +150,8 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
static_cast<void*>(&immediate_input)); static_cast<void*>(&immediate_input));
Shader::UnitState shader_unit; Shader::UnitState shader_unit;
shader_unit.LoadInputVertex(immediate_input, regs.vs.num_input_attributes + 1); shader_unit.LoadInputVertex(immediate_input,
regs.vs.max_input_attribute_index + 1);
shader_engine->Run(g_state.vs, shader_unit); shader_engine->Run(g_state.vs, shader_unit);
auto output_vertex = Shader::OutputVertex::FromRegisters( auto output_vertex = Shader::OutputVertex::FromRegisters(
shader_unit.registers.output, regs, regs.vs.output_mask); shader_unit.registers.output, regs, regs.vs.output_mask);

View File

@ -868,7 +868,7 @@ struct Regs {
LightSrc light[8]; LightSrc light[8];
LightColor global_ambient; // Emission + (material.ambient * lighting.ambient) LightColor global_ambient; // Emission + (material.ambient * lighting.ambient)
INSERT_PADDING_WORDS(0x1); INSERT_PADDING_WORDS(0x1);
BitField<0, 3, u32> num_lights; // Number of enabled lights - 1 BitField<0, 3, u32> max_light_index; // Number of enabled lights - 1
union { union {
BitField<2, 2, LightingFresnelSelector> fresnel_selector; BitField<2, 2, LightingFresnelSelector> fresnel_selector;
@ -1045,7 +1045,7 @@ struct Regs {
BitField<48, 12, u64> attribute_mask; BitField<48, 12, u64> attribute_mask;
// number of total attributes minus 1 // number of total attributes minus 1
BitField<60, 4, u64> num_extra_attributes; BitField<60, 4, u64> max_attribute_index;
}; };
inline VertexAttributeFormat GetFormat(int n) const { inline VertexAttributeFormat GetFormat(int n) const {
@ -1076,7 +1076,7 @@ struct Regs {
} }
inline int GetNumTotalAttributes() const { inline int GetNumTotalAttributes() const {
return (int)num_extra_attributes + 1; return (int)max_attribute_index + 1;
} }
// Attribute loaders map the source vertex data to input attributes // Attribute loaders map the source vertex data to input attributes
@ -1214,7 +1214,7 @@ struct Regs {
union { union {
// Number of input attributes to shader unit - 1 // Number of input attributes to shader unit - 1
BitField<0, 4, u32> num_input_attributes; BitField<0, 4, u32> max_input_attribute_index;
}; };
// Offset to shader program entry point (in words) // Offset to shader program entry point (in words)

View File

@ -467,7 +467,7 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {
// Fragment lighting switches // Fragment lighting switches
case PICA_REG_INDEX(lighting.disable): case PICA_REG_INDEX(lighting.disable):
case PICA_REG_INDEX(lighting.num_lights): case PICA_REG_INDEX(lighting.max_light_index):
case PICA_REG_INDEX(lighting.config0): case PICA_REG_INDEX(lighting.config0):
case PICA_REG_INDEX(lighting.config1): case PICA_REG_INDEX(lighting.config1):
case PICA_REG_INDEX(lighting.abs_lut_input): case PICA_REG_INDEX(lighting.abs_lut_input):

View File

@ -84,7 +84,7 @@ union PicaShaderConfig {
// Fragment lighting // Fragment lighting
state.lighting.enable = !regs.lighting.disable; state.lighting.enable = !regs.lighting.disable;
state.lighting.src_num = regs.lighting.num_lights + 1; state.lighting.src_num = regs.lighting.max_light_index + 1;
for (unsigned light_index = 0; light_index < state.lighting.src_num; ++light_index) { for (unsigned light_index = 0; light_index < state.lighting.src_num; ++light_index) {
unsigned num = regs.lighting.light_enable.GetNum(light_index); unsigned num = regs.lighting.light_enable.GetNum(light_index);