Misc. Linux improvements and bug fixes. (#121)

Co-authored-by: Tom Lally <tomlally@protonmail.com>
This commit is contained in:
Tom Lally 2022-09-01 19:46:20 +01:00 committed by GitHub
parent b8d4cf5b29
commit d3a7b3b5a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 101 additions and 104 deletions

View file

@ -81,31 +81,31 @@ void LatteShader_calculateFSKey(LatteFetchShader* fetchShader)
{
LatteParsedFetchShaderAttribute_t* attrib = group.attrib + f;
key += (uint64)attrib->endianSwap;
key = std::rotl(key, 3);
key = std::rotl<uint64>(key, 3);
key += (uint64)attrib->nfa;
key = std::rotl(key, 3);
key = std::rotl<uint64>(key, 3);
key += (uint64)(attrib->isSigned?1:0);
key = std::rotl(key, 1);
key = std::rotl<uint64>(key, 1);
key += (uint64)attrib->format;
key = std::rotl(key, 7);
key = std::rotl<uint64>(key, 7);
key += (uint64)attrib->fetchType;
key = std::rotl(key, 8);
key = std::rotl<uint64>(key, 8);
key += (uint64)attrib->ds[0];
key = std::rotl(key, 2);
key = std::rotl<uint64>(key, 2);
key += (uint64)attrib->ds[1];
key = std::rotl(key, 2);
key = std::rotl<uint64>(key, 2);
key += (uint64)attrib->ds[2];
key = std::rotl(key, 2);
key = std::rotl<uint64>(key, 2);
key += (uint64)attrib->ds[3];
key = std::rotl(key, 2);
key = std::rotl<uint64>(key, 2);
key += (uint64)(attrib->aluDivisor+1);
key = std::rotl(key, 2);
key = std::rotl<uint64>(key, 2);
key += (uint64)attrib->attributeBufferIndex;
key = std::rotl(key, 8);
key = std::rotl<uint64>(key, 8);
key += (uint64)attrib->semanticId;
key = std::rotl(key, 8);
key = std::rotl<uint64>(key, 8);
key += (uint64)(attrib->offset & 3);
key = std::rotl(key, 2);
key = std::rotl<uint64>(key, 2);
}
}
// todo - also hash invalid buffer groups?

View file

@ -743,7 +743,7 @@ private:
//h ^= *memU64;
//memU64++;
h = std::rotr(h, 7);
h = std::rotr<uint64>(h, 7);
h += (*memU64 + (uint64)i);
memU64++;
}

View file

@ -158,15 +158,15 @@ void LatteMRT::ApplyCurrentState()
if (colorView)
{
key += ((uint64)colorView);
key = std::rotl(key, 5);
key = std::rotl<uint64>(key, 5);
fboLookupView = colorView;
}
key = std::rotl(key, 7);
key = std::rotl<uint64>(key, 7);
}
if (sLatteCurrentRendertargets.depthBuffer.view)
{
key += ((uint64)sLatteCurrentRendertargets.depthBuffer.view);
key = std::rotl(key, 5);
key = std::rotl<uint64>(key, 5);
key += (sLatteCurrentRendertargets.depthBuffer.hasStencil);
if (fboLookupView == NULL)
{

View file

@ -263,7 +263,7 @@ void LatteShader_UpdatePSInputs(uint32* contextRegisters)
cemu_assert_debug(psSemanticId != 0xFF);
key += (uint64)psInputControl;
key = std::rotl(key, 7);
key = std::rotl<uint64>(key, 7);
if (spi0_positionEnable && f == spi0_positionAddr)
{
_activePSImportTable.import[f].semanticId = LATTE_ANALYZER_IMPORT_INDEX_SPIPOSITION;
@ -546,7 +546,7 @@ uint64 LatteSHRC_CalcVSAuxHash(LatteDecompilerShader* vertexShader, uint32* cont
if(!vertexShader->streamoutBufferWriteMask2[i])
continue;
uint32 bufferStride = contextRegisters[mmVGT_STRMOUT_VTX_STRIDE_0 + i * 4];
auxHash = std::rotl(auxHash, 7);
auxHash = std::rotl<uint64>(auxHash, 7);
auxHash += (uint64)bufferStride;
}
}
@ -559,7 +559,7 @@ uint64 LatteSHRC_CalcVSAuxHash(LatteDecompilerShader* vertexShader, uint32* cont
if ((word4 & 0x300) == 0x100)
{
// integer format
auxHashTex = std::rotl(auxHashTex, 7);
auxHashTex = std::rotl<uint64>(auxHashTex, 7);
auxHashTex += 0x333;
}
}