GPUTexture: Fix problem with glGenerateMipmap

Fix T56789: There was issue with certain driver with glGenerateMipmap and
GPU_DEPTH_COMPONENT24.
In this case we just create a complete texture with mipmaps manually
without downsampling / initializing the data.
This commit is contained in:
Clément Foucault 2018-09-15 00:10:27 +02:00
parent 6b024c7e1a
commit b3a9069170
Notes: blender-bot 2023-05-03 10:14:48 +02:00
Referenced by issue #56817, Assert with render previews in Eevee
Referenced by issue #56789, Freeze when initializing EEVEE on RX 580
1 changed files with 15 additions and 1 deletions

View File

@ -1226,7 +1226,21 @@ void GPU_texture_generate_mipmap(GPUTexture *tex)
WARN_NOT_BOUND(tex);
glActiveTexture(GL_TEXTURE0 + tex->number);
glGenerateMipmap(tex->target_base);
if (GPU_texture_depth(tex)) {
/* Some drivers have bugs when using glGenerateMipmap with depth textures (see T56789).
* In this case we just create a complete texture with mipmaps manually without downsampling.
* You must initialize the texture levels using other methods like GPU_framebuffer_recursive_downsample(). */
int levels = 1 + floor(log2(max_ii(tex->w, tex->h)));
GPUDataFormat data_format = gpu_get_data_format_from_tex_format(tex->format);
for (int i = 1; i < levels; ++i) {
GPU_texture_add_mipmap(tex, data_format, i, NULL);
}
glBindTexture(tex->target, tex->bindcode);
}
else {
glGenerateMipmap(tex->target_base);
}
}
void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare)