gsdx-ogl: optimize GPU->CPU memory transfer size

Might help for snow engine game (a little)

Previous code use to read the full texture whereas now it will be limited
to the size of the useful data.
This commit is contained in:
Gregory Hainaut
2016-03-18 20:24:42 +01:00
parent 490cb757bf
commit da741e294e
2 changed files with 8 additions and 2 deletions
+2 -1
View File
@@ -83,8 +83,9 @@ void GSTextureCacheOGL::Read(Target* t, const GSVector4i& r)
if(GSTexture* offscreen = m_renderer->m_dev->CopyOffscreen(t->m_texture, src, r.width(), r.height(), fmt, ps_shader))
{
GSTexture::GSMap m;
GSVector4i r_offscreen(0, 0, r.width(), r.height());
if(offscreen->Map(m))
if(offscreen->Map(m, &r_offscreen))
{
// TODO: block level write
+6 -1
View File
@@ -396,6 +396,7 @@ bool GSTextureOGL::Map(GSMap& m, const GSVector4i* r)
#if 0
// Maybe it is as good as the code below. I don't know
// With openGL 4.5 you can use glGetTextureSubImage
glGetTextureImage(m_texture_id, GL_TEX_LEVEL_0, m_int_format, m_int_type, 1024*1024*16, m_local_buffer);
@@ -406,7 +407,11 @@ bool GSTextureOGL::Map(GSMap& m, const GSVector4i* r)
glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texture_id, 0);
glPixelStorei(GL_PACK_ALIGNMENT, m_int_alignment);
glReadPixels(0, 0, m_size.x, m_size.y, m_int_format, m_int_type, m_local_buffer);
if (r)
glReadPixels(r->x, r->y, r->width(), r->height(), m_int_format, m_int_type, m_local_buffer);
else
glReadPixels(0, 0, m_size.x, m_size.y, m_int_format, m_int_type, m_local_buffer);
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
#endif