mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-07 03:55:33 +00:00
GPU/TextureCache: Only use a single palette record for C16
Stops C16 textures larger than 256x256 being split up.
This commit is contained in:
parent
b0c0d6444c
commit
f58fa2297e
@ -1818,8 +1818,21 @@ void GPUTextureCache::UpdateVRAMWriteSources(VRAMWrite* entry, SourceKey source_
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Add to the palette tracking list
|
// Add to the palette tracking list
|
||||||
auto iter = std::find_if(entry->palette_records.begin(), entry->palette_records.end(),
|
std::vector<VRAMWrite::PaletteRecord>::iterator iter;
|
||||||
|
if (source_key.HasPalette())
|
||||||
|
{
|
||||||
|
// Palette requires exact match.
|
||||||
|
iter = std::find_if(entry->palette_records.begin(), entry->palette_records.end(),
|
||||||
[&source_key](const auto& it) { return (it.key == source_key); });
|
[&source_key](const auto& it) { return (it.key == source_key); });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// C16 only needs to match on the mode, palette is not used, and page doesn't matter.
|
||||||
|
// In theory we could extend the page skipping to palette textures too, but is it needed?
|
||||||
|
iter = std::find_if(entry->palette_records.begin(), entry->palette_records.end(),
|
||||||
|
[&source_key](const auto& it) { return (it.key.mode == source_key.mode); });
|
||||||
|
}
|
||||||
|
|
||||||
if (iter != entry->palette_records.end())
|
if (iter != entry->palette_records.end())
|
||||||
{
|
{
|
||||||
iter->rect = iter->rect.runion(write_intersection);
|
iter->rect = iter->rect.runion(write_intersection);
|
||||||
|
@ -58,7 +58,7 @@ struct TListNode
|
|||||||
TListNode<T>* next;
|
TListNode<T>* next;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SourceKey
|
struct alignas(4) SourceKey
|
||||||
{
|
{
|
||||||
u8 page;
|
u8 page;
|
||||||
GPUTextureMode mode;
|
GPUTextureMode mode;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user