mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 21:37:52 -07:00
TextureCache: Check the number of layers before reusing a texture.
This commit is contained in:
parent
272ea90ca5
commit
5944d15021
@ -222,7 +222,9 @@ TextureCache::TCacheEntryBase* TextureCache::CreateRenderTargetTexture(
|
|||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, 0);
|
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, 0);
|
||||||
|
|
||||||
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, gl_iformat, scaled_tex_w, scaled_tex_h, FramebufferManager::GetEFBLayers(), 0, gl_format, gl_type, nullptr);
|
entry->num_layers = FramebufferManager::GetEFBLayers();
|
||||||
|
|
||||||
|
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, gl_iformat, scaled_tex_w, scaled_tex_h, entry->num_layers, 0, gl_format, gl_type, nullptr);
|
||||||
glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
|
glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
|
||||||
|
|
||||||
glGenFramebuffers(1, &entry->framebuffer);
|
glGenFramebuffers(1, &entry->framebuffer);
|
||||||
|
@ -444,14 +444,15 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage,
|
|||||||
//
|
//
|
||||||
// TODO: Don't we need to force texture decoding to RGBA8 for dynamic EFB copies?
|
// TODO: Don't we need to force texture decoding to RGBA8 for dynamic EFB copies?
|
||||||
// TODO: Actually, it should be enough if the internal texture format matches...
|
// TODO: Actually, it should be enough if the internal texture format matches...
|
||||||
if ((entry->type == TCET_NORMAL &&
|
if (((entry->type == TCET_NORMAL &&
|
||||||
width == entry->virtual_width &&
|
width == entry->virtual_width &&
|
||||||
height == entry->virtual_height &&
|
height == entry->virtual_height &&
|
||||||
full_format == entry->format &&
|
full_format == entry->format &&
|
||||||
entry->num_mipmaps > maxlevel) ||
|
entry->num_mipmaps > maxlevel) ||
|
||||||
(entry->type == TCET_EC_DYNAMIC &&
|
(entry->type == TCET_EC_DYNAMIC &&
|
||||||
entry->native_width == width &&
|
entry->native_width == width &&
|
||||||
entry->native_height == height))
|
entry->native_height == height)) &&
|
||||||
|
entry->num_layers == 1)
|
||||||
{
|
{
|
||||||
// reuse the texture
|
// reuse the texture
|
||||||
}
|
}
|
||||||
@ -519,6 +520,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage,
|
|||||||
// But that will currently make the above "existing entry" tests fail as "texLevels" is not calculated until after.
|
// But that will currently make the above "existing entry" tests fail as "texLevels" is not calculated until after.
|
||||||
// Currently, we might try to reuse a texture which appears to have more levels than actual, maybe..
|
// Currently, we might try to reuse a texture which appears to have more levels than actual, maybe..
|
||||||
entry->num_mipmaps = maxlevel + 1;
|
entry->num_mipmaps = maxlevel + 1;
|
||||||
|
entry->num_layers = 1;
|
||||||
entry->type = TCET_NORMAL;
|
entry->type = TCET_NORMAL;
|
||||||
|
|
||||||
GFX_DEBUGGER_PAUSE_AT(NEXT_NEW_TEXTURE, true);
|
GFX_DEBUGGER_PAUSE_AT(NEXT_NEW_TEXTURE, true);
|
||||||
|
@ -39,6 +39,7 @@ public:
|
|||||||
enum TexCacheEntryType type;
|
enum TexCacheEntryType type;
|
||||||
|
|
||||||
unsigned int num_mipmaps;
|
unsigned int num_mipmaps;
|
||||||
|
unsigned int num_layers;
|
||||||
unsigned int native_width, native_height; // Texture dimensions from the GameCube's point of view
|
unsigned int native_width, native_height; // Texture dimensions from the GameCube's point of view
|
||||||
unsigned int virtual_width, virtual_height; // Texture dimensions from OUR point of view - for hires textures or scaled EFB copies
|
unsigned int virtual_width, virtual_height; // Texture dimensions from OUR point of view - for hires textures or scaled EFB copies
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user