summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/am/am.cpp1
-rw-r--r--src/core/hle/service/am/applets/applets.cpp6
-rw-r--r--src/core/hle/service/am/applets/software_keyboard.cpp3
-rw-r--r--src/video_core/engines/shader_bytecode.h4
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp24
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 {
16AppletDataBroker::AppletDataBroker() { 16AppletDataBroker::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
26AppletDataBroker::~AppletDataBroker() = default; 26AppletDataBroker::~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 }