Skip to content

Commit

Permalink
Merge pull request #11333 from unknownbrackets/clut-rehash
Browse files Browse the repository at this point in the history
TexCache: Keep maxSeenV on clut variants in sync
  • Loading branch information
hrydgard committed Aug 30, 2018
2 parents 22a536f + 1b79924 commit c413da7
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
23 changes: 23 additions & 0 deletions GPU/Common/TextureCacheCommon.cpp
Expand Up @@ -257,6 +257,19 @@ void TextureCacheCommon::UpdateSamplingParams(TexCacheEntry &entry, SamplerCache
void TextureCacheCommon::UpdateMaxSeenV(TexCacheEntry *entry, bool throughMode) { void TextureCacheCommon::UpdateMaxSeenV(TexCacheEntry *entry, bool throughMode) {
// If the texture is >= 512 pixels tall... // If the texture is >= 512 pixels tall...
if (entry->dim >= 0x900) { if (entry->dim >= 0x900) {
if (entry->cluthash != 0 && entry->maxSeenV == 0) {
const u64 cachekeyMin = (u64)(entry->addr & 0x3FFFFFFF) << 32;
const u64 cachekeyMax = cachekeyMin + (1ULL << 32);
for (auto it = cache_.lower_bound(cachekeyMin), end = cache_.upper_bound(cachekeyMax); it != end; ++it) {
// They should all be the same, just make sure we take any that has already increased.
// This is for a new texture.
if (it->second->maxSeenV != 0) {
entry->maxSeenV = it->second->maxSeenV;
break;
}
}
}

// Texture scale/offset and gen modes don't apply in through. // Texture scale/offset and gen modes don't apply in through.
// So we can optimize how much of the texture we look at. // So we can optimize how much of the texture we look at.
if (throughMode) { if (throughMode) {
Expand All @@ -274,6 +287,16 @@ void TextureCacheCommon::UpdateMaxSeenV(TexCacheEntry *entry, bool throughMode)
// TODO: We could tell for texcoord UV gen, and apply scale to max? // TODO: We could tell for texcoord UV gen, and apply scale to max?
entry->maxSeenV = 512; entry->maxSeenV = 512;
} }

// We need to keep all CLUT variants in sync so we detect changes properly.
// See HandleTextureChange / STATUS_CLUT_RECHECK.
if (entry->cluthash != 0) {
const u64 cachekeyMin = (u64)(entry->addr & 0x3FFFFFFF) << 32;
const u64 cachekeyMax = cachekeyMin + (1ULL << 32);
for (auto it = cache_.lower_bound(cachekeyMin), end = cache_.upper_bound(cachekeyMax); it != end; ++it) {
it->second->maxSeenV = entry->maxSeenV;
}
}
} }
} }


Expand Down
2 changes: 1 addition & 1 deletion ext/native/thin3d/GLQueueRunner.cpp
Expand Up @@ -1166,7 +1166,7 @@ void GLQueueRunner::PerformReadbackImage(const GLRStep &pass) {
int pixelStride = pass.readback_image.srcRect.w; int pixelStride = pass.readback_image.srcRect.w;
glPixelStorei(GL_PACK_ALIGNMENT, 4); glPixelStorei(GL_PACK_ALIGNMENT, 4);


GLRect2D rect = pass.readback.srcRect; GLRect2D rect = pass.readback_image.srcRect;


int size = 4 * rect.w * rect.h; int size = 4 * rect.w * rect.h;
if (size > readbackBufferSize_) { if (size > readbackBufferSize_) {
Expand Down

0 comments on commit c413da7

Please sign in to comment.