2
1
Fork 0
mirror of https://github.com/yuzu-emu/yuzu.git synced 2024-07-04 23:31:19 +01:00

shader_cache: Correct versioning and size calculation.

This commit is contained in:
Fernando Sahmkow 2019-06-20 15:02:53 -04:00 committed by ReinUsesLisp
parent 97c8c9f49a
commit 51ba60b27e
2 changed files with 7 additions and 2 deletions

View file

@ -103,15 +103,20 @@ constexpr std::tuple<const char*, const char*, u32> GetPrimitiveDescription(GLen
/// Calculates the size of a program stream /// Calculates the size of a program stream
std::size_t CalculateProgramSize(const GLShader::ProgramCode& program) { std::size_t CalculateProgramSize(const GLShader::ProgramCode& program) {
constexpr std::size_t start_offset = 10; constexpr std::size_t start_offset = 10;
constexpr u64 key = 0xE2400FFFFF07000FULL;
constexpr u64 mask =0xFFFFFFFFFF7FFFFFULL;
std::size_t offset = start_offset; std::size_t offset = start_offset;
std::size_t size = start_offset * sizeof(u64); std::size_t size = start_offset * sizeof(u64);
while (offset < program.size()) { while (offset < program.size()) {
const u64 instruction = program[offset]; const u64 instruction = program[offset];
if (!IsSchedInstruction(offset, start_offset)) { if (!IsSchedInstruction(offset, start_offset)) {
if (instruction == 0 || (instruction >> 52) == 0x50b) { if ((instruction & mask) == key) {
// End on Maxwell's "nop" instruction // End on Maxwell's "nop" instruction
break; break;
} }
if (instruction == 0) {
break;
}
} }
size += sizeof(u64); size += sizeof(u64);
offset++; offset++;

View file

@ -34,7 +34,7 @@ enum class PrecompiledEntryKind : u32 {
Dump, Dump,
}; };
constexpr u32 NativeVersion = 3; constexpr u32 NativeVersion = 4;
// Making sure sizes doesn't change by accident // Making sure sizes doesn't change by accident
static_assert(sizeof(BaseBindings) == 16); static_assert(sizeof(BaseBindings) == 16);