mirror of https://github.com/PCSX2/pcsx2.git
gsdx-ogl: add some flags to trace texture state
goal1: avoid 2 consecutives clean of the render target goal2: only invalidate texture correctly
This commit is contained in:
parent
2e34d48e97
commit
3e784d57e8
|
@ -164,7 +164,7 @@ namespace PboPool {
|
||||||
// glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
// glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
|
||||||
GSTextureOGL::GSTextureOGL(int type, int w, int h, int format, GLuint fbo_read)
|
GSTextureOGL::GSTextureOGL(int type, int w, int h, int format, GLuint fbo_read)
|
||||||
: m_pbo_size(0), m_dirty(false)
|
: m_pbo_size(0), m_dirty(false), m_clean(false)
|
||||||
{
|
{
|
||||||
// OpenGL didn't like dimensions of size 0
|
// OpenGL didn't like dimensions of size 0
|
||||||
m_size.x = max(1,w);
|
m_size.x = max(1,w);
|
||||||
|
@ -246,8 +246,16 @@ GSTextureOGL::~GSTextureOGL()
|
||||||
|
|
||||||
void GSTextureOGL::Invalidate()
|
void GSTextureOGL::Invalidate()
|
||||||
{
|
{
|
||||||
if (m_dirty && gl_InvalidateTexImage)
|
if (m_dirty && gl_InvalidateTexImage) {
|
||||||
gl_InvalidateTexImage(m_texture_id, GL_TEX_LEVEL_0);
|
gl_InvalidateTexImage(m_texture_id, GL_TEX_LEVEL_0);
|
||||||
|
m_dirty = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GSTextureOGL::HasBeenCleaned() {
|
||||||
|
bool old = m_clean;
|
||||||
|
m_clean = true;
|
||||||
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GSTextureOGL::Update(const GSVector4i& r, const void* data, int pitch)
|
bool GSTextureOGL::Update(const GSVector4i& r, const void* data, int pitch)
|
||||||
|
@ -256,6 +264,7 @@ bool GSTextureOGL::Update(const GSVector4i& r, const void* data, int pitch)
|
||||||
GL_PUSH(format("Upload Texture %d", m_texture_id).c_str());
|
GL_PUSH(format("Upload Texture %d", m_texture_id).c_str());
|
||||||
|
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
|
m_clean = false;
|
||||||
|
|
||||||
// Note: reduce noise for gl retracers
|
// Note: reduce noise for gl retracers
|
||||||
// It might introduce bug after an emulator pause so always set it in standard mode
|
// It might introduce bug after an emulator pause so always set it in standard mode
|
||||||
|
|
|
@ -49,6 +49,7 @@ class GSTextureOGL : public GSTexture
|
||||||
int m_pbo_size;
|
int m_pbo_size;
|
||||||
GLuint m_fbo_read;
|
GLuint m_fbo_read;
|
||||||
bool m_dirty;
|
bool m_dirty;
|
||||||
|
bool m_clean;
|
||||||
|
|
||||||
// internal opengl format/type/alignment
|
// internal opengl format/type/alignment
|
||||||
GLenum m_int_format;
|
GLenum m_int_format;
|
||||||
|
@ -78,4 +79,6 @@ class GSTextureOGL : public GSTexture
|
||||||
|
|
||||||
uint32 GetID() { return m_texture_id; }
|
uint32 GetID() { return m_texture_id; }
|
||||||
GLuint64 GetHandle(GLuint sampler_id);
|
GLuint64 GetHandle(GLuint sampler_id);
|
||||||
|
bool HasBeenCleaned();
|
||||||
|
void WasAttached() { m_clean = false; m_dirty = true; }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue