Fix T55888: Eevee: crash when shadow cube size is > 512px

Note that this was only reported to happen on AMD GPU + windows.
This commit is contained in:
2018-07-27 13:56:07 +02:00
parent bd6d0b94bc
commit 141e94f87f
2 changed files with 12 additions and 0 deletions

View File

@@ -66,6 +66,7 @@
static struct GPUGlobal {
GLint maxtexsize;
GLint maxtexlayers;
GLint maxcubemapsize;
GLint maxtextures;
GLint maxubosize;
@@ -96,6 +97,11 @@ int GPU_max_texture_size(void)
return GG.maxtexsize;
}
int GPU_max_texture_layers(void)
{
return GG.maxtexlayers;
}
int GPU_max_textures(void)
{
return GG.maxtextures;
@@ -142,6 +148,7 @@ void gpu_extensions_init(void)
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &GG.maxtextures);
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &GG.maxtexsize);
glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &GG.maxtexlayers);
glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &GG.maxcubemapsize);
if (GLEW_EXT_texture_filter_anisotropic)

View File

@@ -432,6 +432,11 @@ static bool gpu_texture_try_alloc(
glTexImage2D(proxy, 0, internalformat, tex->w, tex->h, 0, data_format, data_type, NULL);
break;
case GL_PROXY_TEXTURE_2D_ARRAY:
/* HACK: Some driver wrongly check GL_PROXY_TEXTURE_2D_ARRAY as a GL_PROXY_TEXTURE_3D
* checking all dimensions against GPU_max_texture_layers (see T55888). */
return (tex->w < GPU_max_texture_size()) &&
(tex->h < GPU_max_texture_size()) &&
(tex->d < GPU_max_texture_layers());
case GL_PROXY_TEXTURE_3D:
glTexImage3D(proxy, 0, internalformat, tex->w, tex->h, tex->d, 0, data_format, data_type, NULL);
break;