diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/am/am.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/applets.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/software_keyboard.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/engines/shader_bytecode.h | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 24 |
5 files changed, 26 insertions, 12 deletions
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 3a7b6da84..f83730cd6 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp | |||
| @@ -565,7 +565,6 @@ private: | |||
| 565 | void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) { | 565 | void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) { |
| 566 | LOG_DEBUG(Service_AM, "called"); | 566 | LOG_DEBUG(Service_AM, "called"); |
| 567 | 567 | ||
| 568 | applet->GetBroker().SignalStateChanged(); | ||
| 569 | const auto event = applet->GetBroker().GetStateChangedEvent(); | 568 | const auto event = applet->GetBroker().GetStateChangedEvent(); |
| 570 | 569 | ||
| 571 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 570 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp index 47da35537..7698ca819 100644 --- a/src/core/hle/service/am/applets/applets.cpp +++ b/src/core/hle/service/am/applets/applets.cpp | |||
| @@ -16,11 +16,11 @@ namespace Service::AM::Applets { | |||
| 16 | AppletDataBroker::AppletDataBroker() { | 16 | AppletDataBroker::AppletDataBroker() { |
| 17 | auto& kernel = Core::System::GetInstance().Kernel(); | 17 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 18 | state_changed_event = Kernel::WritableEvent::CreateEventPair( | 18 | state_changed_event = Kernel::WritableEvent::CreateEventPair( |
| 19 | kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:StateChangedEvent"); | 19 | kernel, Kernel::ResetType::Sticky, "ILibraryAppletAccessor:StateChangedEvent"); |
| 20 | pop_out_data_event = Kernel::WritableEvent::CreateEventPair( | 20 | pop_out_data_event = Kernel::WritableEvent::CreateEventPair( |
| 21 | kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:PopDataOutEvent"); | 21 | kernel, Kernel::ResetType::Sticky, "ILibraryAppletAccessor:PopDataOutEvent"); |
| 22 | pop_interactive_out_data_event = Kernel::WritableEvent::CreateEventPair( | 22 | pop_interactive_out_data_event = Kernel::WritableEvent::CreateEventPair( |
| 23 | kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:PopInteractiveDataOutEvent"); | 23 | kernel, Kernel::ResetType::Sticky, "ILibraryAppletAccessor:PopInteractiveDataOutEvent"); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | AppletDataBroker::~AppletDataBroker() = default; | 26 | AppletDataBroker::~AppletDataBroker() = default; |
diff --git a/src/core/hle/service/am/applets/software_keyboard.cpp b/src/core/hle/service/am/applets/software_keyboard.cpp index 981bdec51..f255f74b5 100644 --- a/src/core/hle/service/am/applets/software_keyboard.cpp +++ b/src/core/hle/service/am/applets/software_keyboard.cpp | |||
| @@ -146,11 +146,10 @@ void SoftwareKeyboard::WriteText(std::optional<std::u16string> text) { | |||
| 146 | 146 | ||
| 147 | if (complete) { | 147 | if (complete) { |
| 148 | broker.PushNormalDataFromApplet(IStorage{output_main}); | 148 | broker.PushNormalDataFromApplet(IStorage{output_main}); |
| 149 | broker.SignalStateChanged(); | ||
| 149 | } else { | 150 | } else { |
| 150 | broker.PushInteractiveDataFromApplet(IStorage{output_sub}); | 151 | broker.PushInteractiveDataFromApplet(IStorage{output_sub}); |
| 151 | } | 152 | } |
| 152 | |||
| 153 | broker.SignalStateChanged(); | ||
| 154 | } else { | 153 | } else { |
| 155 | output_main[0] = 1; | 154 | output_main[0] = 1; |
| 156 | complete = true; | 155 | complete = true; |
diff --git a/src/video_core/engines/shader_bytecode.h b/src/video_core/engines/shader_bytecode.h index 5ea094e64..2efeb6e1a 100644 --- a/src/video_core/engines/shader_bytecode.h +++ b/src/video_core/engines/shader_bytecode.h | |||
| @@ -575,7 +575,7 @@ union Instruction { | |||
| 575 | 575 | ||
| 576 | union { | 576 | union { |
| 577 | BitField<39, 2, u64> tab5cb8_2; | 577 | BitField<39, 2, u64> tab5cb8_2; |
| 578 | BitField<41, 3, u64> tab5c68_1; | 578 | BitField<41, 3, u64> postfactor; |
| 579 | BitField<44, 2, u64> tab5c68_0; | 579 | BitField<44, 2, u64> tab5c68_0; |
| 580 | BitField<48, 1, u64> negate_b; | 580 | BitField<48, 1, u64> negate_b; |
| 581 | } fmul; | 581 | } fmul; |
| @@ -609,7 +609,7 @@ union Instruction { | |||
| 609 | 609 | ||
| 610 | BitField<31, 1, u64> negate_b; | 610 | BitField<31, 1, u64> negate_b; |
| 611 | BitField<30, 1, u64> abs_b; | 611 | BitField<30, 1, u64> abs_b; |
| 612 | BitField<47, 2, HalfType> type_b; | 612 | BitField<28, 2, HalfType> type_b; |
| 613 | 613 | ||
| 614 | BitField<35, 2, HalfType> type_c; | 614 | BitField<35, 2, HalfType> type_c; |
| 615 | } alu_half; | 615 | } alu_half; |
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index a5cfa0070..bd61af463 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp | |||
| @@ -1867,9 +1867,6 @@ private: | |||
| 1867 | UNIMPLEMENTED_IF_MSG(instr.fmul.tab5cb8_2 != 0, | 1867 | UNIMPLEMENTED_IF_MSG(instr.fmul.tab5cb8_2 != 0, |
| 1868 | "FMUL tab5cb8_2({}) is not implemented", | 1868 | "FMUL tab5cb8_2({}) is not implemented", |
| 1869 | instr.fmul.tab5cb8_2.Value()); | 1869 | instr.fmul.tab5cb8_2.Value()); |
| 1870 | UNIMPLEMENTED_IF_MSG(instr.fmul.tab5c68_1 != 0, | ||
| 1871 | "FMUL tab5cb8_1({}) is not implemented", | ||
| 1872 | instr.fmul.tab5c68_1.Value()); | ||
| 1873 | UNIMPLEMENTED_IF_MSG( | 1870 | UNIMPLEMENTED_IF_MSG( |
| 1874 | instr.fmul.tab5c68_0 != 1, "FMUL tab5cb8_0({}) is not implemented", | 1871 | instr.fmul.tab5c68_0 != 1, "FMUL tab5cb8_0({}) is not implemented", |
| 1875 | instr.fmul.tab5c68_0 | 1872 | instr.fmul.tab5c68_0 |
| @@ -1879,7 +1876,26 @@ private: | |||
| 1879 | 1876 | ||
| 1880 | op_b = GetOperandAbsNeg(op_b, false, instr.fmul.negate_b); | 1877 | op_b = GetOperandAbsNeg(op_b, false, instr.fmul.negate_b); |
| 1881 | 1878 | ||
| 1882 | regs.SetRegisterToFloat(instr.gpr0, 0, op_a + " * " + op_b, 1, 1, | 1879 | std::string postfactor_op; |
| 1880 | if (instr.fmul.postfactor != 0) { | ||
| 1881 | s8 postfactor = static_cast<s8>(instr.fmul.postfactor); | ||
| 1882 | |||
| 1883 | // postfactor encoded as 3-bit 1's complement in instruction, | ||
| 1884 | // interpreted with below logic. | ||
| 1885 | if (postfactor >= 4) { | ||
| 1886 | postfactor = 7 - postfactor; | ||
| 1887 | } else { | ||
| 1888 | postfactor = 0 - postfactor; | ||
| 1889 | } | ||
| 1890 | |||
| 1891 | if (postfactor > 0) { | ||
| 1892 | postfactor_op = " * " + std::to_string(1 << postfactor); | ||
| 1893 | } else { | ||
| 1894 | postfactor_op = " / " + std::to_string(1 << -postfactor); | ||
| 1895 | } | ||
| 1896 | } | ||
| 1897 | |||
| 1898 | regs.SetRegisterToFloat(instr.gpr0, 0, op_a + " * " + op_b + postfactor_op, 1, 1, | ||
| 1883 | instr.alu.saturate_d, 0, true); | 1899 | instr.alu.saturate_d, 0, true); |
| 1884 | break; | 1900 | break; |
| 1885 | } | 1901 | } |