mirror of https://github.com/PCSX2/pcsx2.git
gsdx HW: use after free crash
Free bt 3 0xe676d194 in ~Source ../plugins/GSdx/GSTextureCache.cpp:1526 4 0xe676d194 in GSTextureCache::SourceMap::RemoveAt(GSTextureCache::Source*) ../plugins/GSdx/GSTextureCache.cpp:1990 5 0xe676f0fe in GSTextureCache::IncAge() ../plugins/GSdx/GSTextureCache.cpp:1022 Use bt 0 0xe6772a83 in GSTextureCache::LookupSource(GIFRegTEX0 const&, GIFRegTEXA const&, GSVector4i const&) ../plugins/GSdx/GSTextureCache.cpp:204 1 0xe66b0c9f in GSRendererHW::Draw() ../plugins/GSdx/GSRendererHW.cpp:579 2 0xe66fb43e in GSState::FlushPrim() ../plugins/GSdx/GSState.cpp:1509 Hypothesis the m_map array of list contains an invalid pointer It is populated GSTextureCache::SourceMap::Add based on the coverage. The coverage is based on the offset. So offset is potentially wrong. As mipmap code hack the offset value. It would be a nice culprit. This commit avoids a potential bad transition between MIPMAP (which overwrite the "offset") and the base layer (which wrongly keep an old "offset") Conclusion, pray for my soul as it is very hard to reproduce
This commit is contained in:
parent
04d82d8127
commit
e0961d81a0
|
@ -553,13 +553,12 @@ void GSRendererHW::Draw()
|
||||||
m_vt.m_max.t *= 0.5f;
|
m_vt.m_max.t *= 0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_context->offset.tex = m_mem.GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM);
|
|
||||||
|
|
||||||
GL_INS("Mipmap LOD %d (%f %f) new size %dx%d", lod, m_vt.m_lod.x, m_vt.m_lod.y, 1 << TEX0.TW, 1 << TEX0.TH);
|
GL_INS("Mipmap LOD %d (%f %f) new size %dx%d", lod, m_vt.m_lod.x, m_vt.m_lod.y, 1 << TEX0.TW, 1 << TEX0.TH);
|
||||||
} else {
|
} else {
|
||||||
TEX0 = GetTex0Layer(0);
|
TEX0 = GetTex0Layer(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_context->offset.tex = m_mem.GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue