GL_TEXTURE_FREE_MEMORY_ATI returns 4 values, not just 1

This should fix a buffer overflow that happens on ATI cards.
This commit is contained in:
Dale Glass 2020-11-28 02:07:08 +01:00
parent 4e1b6838cc
commit 182302c3e7

View file

@ -219,19 +219,21 @@ void GLBackend::init() {
} }
size_t GLBackend::getAvailableMemory() { size_t GLBackend::getAvailableMemory() {
GLint mem; // GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX returns 1 value
// GL_TEXTURE_FREE_MEMORY_ATI returns 4 values, we only need the first
GLint mem[4] = {0,0,0,0};
switch( _videoCard ) { switch( _videoCard ) {
case NVIDIA: case NVIDIA:
#if !defined(Q_OS_ANDROID) #if !defined(Q_OS_ANDROID)
glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &mem); glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &mem[0]);
#endif #endif
return mem * BYTES_PER_KIB; return mem[0] * BYTES_PER_KIB;
case ATI: case ATI:
#if !defined(Q_OS_ANDROID) #if !defined(Q_OS_ANDROID)
glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, &mem); glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, &mem[0]);
#endif #endif
return mem * BYTES_PER_KIB; return mem[0] * BYTES_PER_KIB;
case MESA: case MESA:
return 0; // Don't know the current value return 0; // Don't know the current value
case Unknown: case Unknown: