Merge pull request #976 from bunnei/shader-imm

gl_shader_decompiler: Let OpenGL interpret floats.
This commit is contained in:
bunnei 2018-08-08 19:17:01 -04:00 committed by GitHub
commit cf917a5e93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 11 deletions

View File

@ -254,20 +254,15 @@ union Instruction {
BitField<56, 1, u64> invert_b; BitField<56, 1, u64> invert_b;
} lop32i; } lop32i;
float GetImm20_19() const { u32 GetImm20_19() const {
float result{};
u32 imm{static_cast<u32>(imm20_19)}; u32 imm{static_cast<u32>(imm20_19)};
imm <<= 12; imm <<= 12;
imm |= negate_imm ? 0x80000000 : 0; imm |= negate_imm ? 0x80000000 : 0;
std::memcpy(&result, &imm, sizeof(imm)); return imm;
return result;
} }
float GetImm20_32() const { u32 GetImm20_32() const {
float result{}; return static_cast<u32>(imm20_32);
s32 imm{static_cast<s32>(imm20_32)};
std::memcpy(&result, &imm, sizeof(imm));
return result;
} }
s32 GetSignedImm20_20() const { s32 GetSignedImm20_20() const {

View File

@ -602,12 +602,12 @@ private:
/// Generates code representing a 19-bit immediate value /// Generates code representing a 19-bit immediate value
static std::string GetImmediate19(const Instruction& instr) { static std::string GetImmediate19(const Instruction& instr) {
return std::to_string(instr.alu.GetImm20_19()); return fmt::format("uintBitsToFloat({})", instr.alu.GetImm20_19());
} }
/// Generates code representing a 32-bit immediate value /// Generates code representing a 32-bit immediate value
static std::string GetImmediate32(const Instruction& instr) { static std::string GetImmediate32(const Instruction& instr) {
return std::to_string(instr.alu.GetImm20_32()); return fmt::format("uintBitsToFloat({})", instr.alu.GetImm20_32());
} }
/// Generates code representing a texture sampler. /// Generates code representing a texture sampler.