pica: shader_dirty if texture2 coord changed
This commit is contained in:
parent
0f664ef89d
commit
039b293092
|
@ -93,7 +93,7 @@ ASSERT_REG_POSITION(rasterizer.viewport_corner, 0x68);
|
|||
ASSERT_REG_POSITION(rasterizer.depthmap_enable, 0x6D);
|
||||
|
||||
ASSERT_REG_POSITION(texturing, 0x80);
|
||||
ASSERT_REG_POSITION(texturing.texture0_enable, 0x80);
|
||||
ASSERT_REG_POSITION(texturing.main_config, 0x80);
|
||||
ASSERT_REG_POSITION(texturing.texture0, 0x81);
|
||||
ASSERT_REG_POSITION(texturing.texture0_format, 0x8e);
|
||||
ASSERT_REG_POSITION(texturing.fragment_lighting_enable, 0x8f);
|
||||
|
|
|
@ -126,7 +126,7 @@ struct TexturingRegs {
|
|||
BitField<10, 1, u32> texture3_enable; // TODO: unimplemented
|
||||
BitField<13, 1, u32> texture2_use_coord1;
|
||||
BitField<16, 1, u32> clear_texture_cache; // TODO: unimplemented
|
||||
};
|
||||
} main_config;
|
||||
TextureConfig texture0;
|
||||
INSERT_PADDING_WORDS(0x8);
|
||||
BitField<0, 4, TextureFormat> texture0_format;
|
||||
|
@ -146,9 +146,9 @@ struct TexturingRegs {
|
|||
};
|
||||
const std::array<FullTextureConfig, 3> GetTextures() const {
|
||||
return {{
|
||||
{texture0_enable.ToBool(), texture0, texture0_format},
|
||||
{texture1_enable.ToBool(), texture1, texture1_format},
|
||||
{texture2_enable.ToBool(), texture2, texture2_format},
|
||||
{main_config.texture0_enable.ToBool(), texture0, texture0_format},
|
||||
{main_config.texture1_enable.ToBool(), texture1, texture1_format},
|
||||
{main_config.texture2_enable.ToBool(), texture2, texture2_format},
|
||||
}};
|
||||
}
|
||||
|
||||
|
|
|
@ -402,6 +402,10 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {
|
|||
SyncLogicOp();
|
||||
break;
|
||||
|
||||
case PICA_REG_INDEX(texturing.main_config):
|
||||
shader_dirty = true;
|
||||
break;
|
||||
|
||||
// Texture 0 type
|
||||
case PICA_REG_INDEX(texturing.texture0.type):
|
||||
shader_dirty = true;
|
||||
|
|
|
@ -40,7 +40,7 @@ PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) {
|
|||
|
||||
state.texture0_type = regs.texturing.texture0.type;
|
||||
|
||||
state.texture2_use_coord1 = regs.texturing.texture2_use_coord1 != 0;
|
||||
state.texture2_use_coord1 = regs.texturing.main_config.texture2_use_coord1 != 0;
|
||||
|
||||
// Copy relevant tev stages fields.
|
||||
// We don't sync const_color here because of the high variance, it is a
|
||||
|
|
|
@ -276,7 +276,8 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve
|
|||
|
||||
DEBUG_ASSERT(0 != texture.config.address);
|
||||
|
||||
int coordinate_i = (i == 2 && regs.texturing.texture2_use_coord1) ? 1 : i;
|
||||
int coordinate_i =
|
||||
(i == 2 && regs.texturing.main_config.texture2_use_coord1) ? 1 : i;
|
||||
float24 u = uv[coordinate_i].u();
|
||||
float24 v = uv[coordinate_i].v();
|
||||
|
||||
|
|
Reference in New Issue