diff options
author | pineappleEA <pineaea@gmail.com> | 2021-07-29 21:34:06 +0200 |
---|---|---|
committer | pineappleEA <pineaea@gmail.com> | 2021-07-29 21:34:06 +0200 |
commit | 80ad76aa9e8f8fa274b31f82497947f70e8b1a5f (patch) | |
tree | d7caaec59e3fd30461a40649c4abed19b94836d8 | |
parent | 21ca602747563c73b8fbfa4f9c8566057b21e28b (diff) |
early-access version 1942EA-1942
-rwxr-xr-x | README.md | 2 | ||||
-rwxr-xr-x | src/common/uuid.cpp | 2 | ||||
-rwxr-xr-x | src/core/hle/service/acc/acc.cpp | 22 | ||||
-rwxr-xr-x | src/core/hle/service/friend/friend.cpp | 6 | ||||
-rwxr-xr-x | src/core/hle/service/ns/language.cpp | 2 | ||||
-rwxr-xr-x | src/input_common/sdl/sdl_impl.cpp | 6 | ||||
-rwxr-xr-x | src/input_common/tas/tas_input.cpp | 17 | ||||
-rwxr-xr-x | src/input_common/tas/tas_input.h | 3 | ||||
-rwxr-xr-x | src/video_core/renderer_vulkan/vk_blit_screen.cpp | 15 | ||||
-rwxr-xr-x | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 9 | ||||
-rwxr-xr-x | src/yuzu/main.cpp | 9 |
11 files changed, 44 insertions, 49 deletions
@@ -1,7 +1,7 @@ | |||
1 | yuzu emulator early access | 1 | yuzu emulator early access |
2 | ============= | 2 | ============= |
3 | 3 | ||
4 | This is the source code for early-access 1940. | 4 | This is the source code for early-access 1942. |
5 | 5 | ||
6 | ## Legal Notice | 6 | ## Legal Notice |
7 | 7 | ||
diff --git a/src/common/uuid.cpp b/src/common/uuid.cpp index 26db03fba..18303a1e3 100755 --- a/src/common/uuid.cpp +++ b/src/common/uuid.cpp | |||
@@ -18,7 +18,7 @@ UUID UUID::Generate() { | |||
18 | } | 18 | } |
19 | 19 | ||
20 | std::string UUID::Format() const { | 20 | std::string UUID::Format() const { |
21 | return fmt::format("0x{:016X}{:016X}", uuid[1], uuid[0]); | 21 | return fmt::format("{:016x}{:016x}", uuid[1], uuid[0]); |
22 | } | 22 | } |
23 | 23 | ||
24 | std::string UUID::FormatSwitch() const { | 24 | std::string UUID::FormatSwitch() const { |
diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index 2e969f2a8..882fc1492 100755 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp | |||
@@ -292,7 +292,7 @@ public: | |||
292 | 292 | ||
293 | protected: | 293 | protected: |
294 | void Get(Kernel::HLERequestContext& ctx) { | 294 | void Get(Kernel::HLERequestContext& ctx) { |
295 | LOG_DEBUG(Service_ACC, "called user_id={}", user_id.Format()); | 295 | LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.Format()); |
296 | ProfileBase profile_base{}; | 296 | ProfileBase profile_base{}; |
297 | ProfileData data{}; | 297 | ProfileData data{}; |
298 | if (profile_manager.GetProfileBaseAndData(user_id, profile_base, data)) { | 298 | if (profile_manager.GetProfileBaseAndData(user_id, profile_base, data)) { |
@@ -301,7 +301,7 @@ protected: | |||
301 | rb.Push(ResultSuccess); | 301 | rb.Push(ResultSuccess); |
302 | rb.PushRaw(profile_base); | 302 | rb.PushRaw(profile_base); |
303 | } else { | 303 | } else { |
304 | LOG_ERROR(Service_ACC, "Failed to get profile base and data for user={}", | 304 | LOG_ERROR(Service_ACC, "Failed to get profile base and data for user=0x{}", |
305 | user_id.Format()); | 305 | user_id.Format()); |
306 | IPC::ResponseBuilder rb{ctx, 2}; | 306 | IPC::ResponseBuilder rb{ctx, 2}; |
307 | rb.Push(ResultUnknown); // TODO(ogniK): Get actual error code | 307 | rb.Push(ResultUnknown); // TODO(ogniK): Get actual error code |
@@ -309,14 +309,14 @@ protected: | |||
309 | } | 309 | } |
310 | 310 | ||
311 | void GetBase(Kernel::HLERequestContext& ctx) { | 311 | void GetBase(Kernel::HLERequestContext& ctx) { |
312 | LOG_DEBUG(Service_ACC, "called user_id={}", user_id.Format()); | 312 | LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.Format()); |
313 | ProfileBase profile_base{}; | 313 | ProfileBase profile_base{}; |
314 | if (profile_manager.GetProfileBase(user_id, profile_base)) { | 314 | if (profile_manager.GetProfileBase(user_id, profile_base)) { |
315 | IPC::ResponseBuilder rb{ctx, 16}; | 315 | IPC::ResponseBuilder rb{ctx, 16}; |
316 | rb.Push(ResultSuccess); | 316 | rb.Push(ResultSuccess); |
317 | rb.PushRaw(profile_base); | 317 | rb.PushRaw(profile_base); |
318 | } else { | 318 | } else { |
319 | LOG_ERROR(Service_ACC, "Failed to get profile base for user={}", user_id.Format()); | 319 | LOG_ERROR(Service_ACC, "Failed to get profile base for user=0x{}", user_id.Format()); |
320 | IPC::ResponseBuilder rb{ctx, 2}; | 320 | IPC::ResponseBuilder rb{ctx, 2}; |
321 | rb.Push(ResultUnknown); // TODO(ogniK): Get actual error code | 321 | rb.Push(ResultUnknown); // TODO(ogniK): Get actual error code |
322 | } | 322 | } |
@@ -372,7 +372,7 @@ protected: | |||
372 | 372 | ||
373 | const auto user_data = ctx.ReadBuffer(); | 373 | const auto user_data = ctx.ReadBuffer(); |
374 | 374 | ||
375 | LOG_DEBUG(Service_ACC, "called, username='{}', timestamp={:016X}, uuid={}", | 375 | LOG_DEBUG(Service_ACC, "called, username='{}', timestamp={:016X}, uuid=0x{}", |
376 | Common::StringFromFixedZeroTerminatedBuffer( | 376 | Common::StringFromFixedZeroTerminatedBuffer( |
377 | reinterpret_cast<const char*>(base.username.data()), base.username.size()), | 377 | reinterpret_cast<const char*>(base.username.data()), base.username.size()), |
378 | base.timestamp, base.user_uuid.Format()); | 378 | base.timestamp, base.user_uuid.Format()); |
@@ -405,7 +405,7 @@ protected: | |||
405 | const auto user_data = ctx.ReadBuffer(); | 405 | const auto user_data = ctx.ReadBuffer(); |
406 | const auto image_data = ctx.ReadBuffer(1); | 406 | const auto image_data = ctx.ReadBuffer(1); |
407 | 407 | ||
408 | LOG_DEBUG(Service_ACC, "called, username='{}', timestamp={:016X}, uuid={}", | 408 | LOG_DEBUG(Service_ACC, "called, username='{}', timestamp={:016X}, uuid=0x{}", |
409 | Common::StringFromFixedZeroTerminatedBuffer( | 409 | Common::StringFromFixedZeroTerminatedBuffer( |
410 | reinterpret_cast<const char*>(base.username.data()), base.username.size()), | 410 | reinterpret_cast<const char*>(base.username.data()), base.username.size()), |
411 | base.timestamp, base.user_uuid.Format()); | 411 | base.timestamp, base.user_uuid.Format()); |
@@ -662,7 +662,7 @@ void Module::Interface::GetUserCount(Kernel::HLERequestContext& ctx) { | |||
662 | void Module::Interface::GetUserExistence(Kernel::HLERequestContext& ctx) { | 662 | void Module::Interface::GetUserExistence(Kernel::HLERequestContext& ctx) { |
663 | IPC::RequestParser rp{ctx}; | 663 | IPC::RequestParser rp{ctx}; |
664 | Common::UUID user_id = rp.PopRaw<Common::UUID>(); | 664 | Common::UUID user_id = rp.PopRaw<Common::UUID>(); |
665 | LOG_DEBUG(Service_ACC, "called user_id={}", user_id.Format()); | 665 | LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.Format()); |
666 | 666 | ||
667 | IPC::ResponseBuilder rb{ctx, 3}; | 667 | IPC::ResponseBuilder rb{ctx, 3}; |
668 | rb.Push(ResultSuccess); | 668 | rb.Push(ResultSuccess); |
@@ -693,7 +693,7 @@ void Module::Interface::GetLastOpenedUser(Kernel::HLERequestContext& ctx) { | |||
693 | void Module::Interface::GetProfile(Kernel::HLERequestContext& ctx) { | 693 | void Module::Interface::GetProfile(Kernel::HLERequestContext& ctx) { |
694 | IPC::RequestParser rp{ctx}; | 694 | IPC::RequestParser rp{ctx}; |
695 | Common::UUID user_id = rp.PopRaw<Common::UUID>(); | 695 | Common::UUID user_id = rp.PopRaw<Common::UUID>(); |
696 | LOG_DEBUG(Service_ACC, "called user_id={}", user_id.Format()); | 696 | LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.Format()); |
697 | 697 | ||
698 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 698 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
699 | rb.Push(ResultSuccess); | 699 | rb.Push(ResultSuccess); |
@@ -802,7 +802,7 @@ void Module::Interface::GetProfileEditor(Kernel::HLERequestContext& ctx) { | |||
802 | IPC::RequestParser rp{ctx}; | 802 | IPC::RequestParser rp{ctx}; |
803 | Common::UUID user_id = rp.PopRaw<Common::UUID>(); | 803 | Common::UUID user_id = rp.PopRaw<Common::UUID>(); |
804 | 804 | ||
805 | LOG_DEBUG(Service_ACC, "called, user_id={}", user_id.Format()); | 805 | LOG_DEBUG(Service_ACC, "called, user_id=0x{}", user_id.Format()); |
806 | 806 | ||
807 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 807 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
808 | rb.Push(ResultSuccess); | 808 | rb.Push(ResultSuccess); |
@@ -844,7 +844,7 @@ void Module::Interface::StoreSaveDataThumbnailApplication(Kernel::HLERequestCont | |||
844 | IPC::RequestParser rp{ctx}; | 844 | IPC::RequestParser rp{ctx}; |
845 | const auto uuid = rp.PopRaw<Common::UUID>(); | 845 | const auto uuid = rp.PopRaw<Common::UUID>(); |
846 | 846 | ||
847 | LOG_WARNING(Service_ACC, "(STUBBED) called, uuid={}", uuid.Format()); | 847 | LOG_WARNING(Service_ACC, "(STUBBED) called, uuid=0x{}", uuid.Format()); |
848 | 848 | ||
849 | // TODO(ogniK): Check if application ID is zero on acc initialize. As we don't have a reliable | 849 | // TODO(ogniK): Check if application ID is zero on acc initialize. As we don't have a reliable |
850 | // way of confirming things like the TID, we're going to assume a non zero value for the time | 850 | // way of confirming things like the TID, we're going to assume a non zero value for the time |
@@ -858,7 +858,7 @@ void Module::Interface::StoreSaveDataThumbnailSystem(Kernel::HLERequestContext& | |||
858 | const auto uuid = rp.PopRaw<Common::UUID>(); | 858 | const auto uuid = rp.PopRaw<Common::UUID>(); |
859 | const auto tid = rp.Pop<u64_le>(); | 859 | const auto tid = rp.Pop<u64_le>(); |
860 | 860 | ||
861 | LOG_WARNING(Service_ACC, "(STUBBED) called, uuid={}, tid={:016X}", uuid.Format(), tid); | 861 | LOG_WARNING(Service_ACC, "(STUBBED) called, uuid=0x{}, tid={:016X}", uuid.Format(), tid); |
862 | StoreSaveDataThumbnail(ctx, uuid, tid); | 862 | StoreSaveDataThumbnail(ctx, uuid, tid); |
863 | } | 863 | } |
864 | 864 | ||
diff --git a/src/core/hle/service/friend/friend.cpp b/src/core/hle/service/friend/friend.cpp index a3c939c0c..b58c152ce 100755 --- a/src/core/hle/service/friend/friend.cpp +++ b/src/core/hle/service/friend/friend.cpp | |||
@@ -158,7 +158,7 @@ private: | |||
158 | const auto local_play = rp.Pop<bool>(); | 158 | const auto local_play = rp.Pop<bool>(); |
159 | const auto uuid = rp.PopRaw<Common::UUID>(); | 159 | const auto uuid = rp.PopRaw<Common::UUID>(); |
160 | 160 | ||
161 | LOG_WARNING(Service_Friend, "(STUBBED) called local_play={} uuid={}", local_play, | 161 | LOG_WARNING(Service_Friend, "(STUBBED) called, local_play={}, uuid=0x{}", local_play, |
162 | uuid.Format()); | 162 | uuid.Format()); |
163 | 163 | ||
164 | IPC::ResponseBuilder rb{ctx, 2}; | 164 | IPC::ResponseBuilder rb{ctx, 2}; |
@@ -171,7 +171,7 @@ private: | |||
171 | const auto uuid = rp.PopRaw<Common::UUID>(); | 171 | const auto uuid = rp.PopRaw<Common::UUID>(); |
172 | [[maybe_unused]] const auto filter = rp.PopRaw<SizedFriendFilter>(); | 172 | [[maybe_unused]] const auto filter = rp.PopRaw<SizedFriendFilter>(); |
173 | const auto pid = rp.Pop<u64>(); | 173 | const auto pid = rp.Pop<u64>(); |
174 | LOG_WARNING(Service_Friend, "(STUBBED) called, offset={}, uuid={}, pid={}", friend_offset, | 174 | LOG_WARNING(Service_Friend, "(STUBBED) called, offset={}, uuid=0x{}, pid={}", friend_offset, |
175 | uuid.Format(), pid); | 175 | uuid.Format(), pid); |
176 | 176 | ||
177 | IPC::ResponseBuilder rb{ctx, 3}; | 177 | IPC::ResponseBuilder rb{ctx, 3}; |
@@ -289,7 +289,7 @@ void Module::Interface::CreateNotificationService(Kernel::HLERequestContext& ctx | |||
289 | IPC::RequestParser rp{ctx}; | 289 | IPC::RequestParser rp{ctx}; |
290 | auto uuid = rp.PopRaw<Common::UUID>(); | 290 | auto uuid = rp.PopRaw<Common::UUID>(); |
291 | 291 | ||
292 | LOG_DEBUG(Service_Friend, "called, uuid={}", uuid.Format()); | 292 | LOG_DEBUG(Service_Friend, "called, uuid=0x{}", uuid.Format()); |
293 | 293 | ||
294 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 294 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
295 | rb.Push(ResultSuccess); | 295 | rb.Push(ResultSuccess); |
diff --git a/src/core/hle/service/ns/language.cpp b/src/core/hle/service/ns/language.cpp index 29c4a820c..54b644830 100755 --- a/src/core/hle/service/ns/language.cpp +++ b/src/core/hle/service/ns/language.cpp | |||
@@ -344,8 +344,10 @@ std::optional<ApplicationLanguage> ConvertToApplicationLanguage( | |||
344 | return ApplicationLanguage::Russian; | 344 | return ApplicationLanguage::Russian; |
345 | case Set::LanguageCode::KO: | 345 | case Set::LanguageCode::KO: |
346 | return ApplicationLanguage::Korean; | 346 | return ApplicationLanguage::Korean; |
347 | case Set::LanguageCode::ZH_TW: | ||
347 | case Set::LanguageCode::ZH_HANT: | 348 | case Set::LanguageCode::ZH_HANT: |
348 | return ApplicationLanguage::TraditionalChinese; | 349 | return ApplicationLanguage::TraditionalChinese; |
350 | case Set::LanguageCode::ZH_CN: | ||
349 | case Set::LanguageCode::ZH_HANS: | 351 | case Set::LanguageCode::ZH_HANS: |
350 | return ApplicationLanguage::SimplifiedChinese; | 352 | return ApplicationLanguage::SimplifiedChinese; |
351 | default: | 353 | default: |
diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index 5a56ee72f..f1f950d8a 100755 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp | |||
@@ -170,7 +170,7 @@ public: | |||
170 | float GetAxis(int axis, float range, float offset) const { | 170 | float GetAxis(int axis, float range, float offset) const { |
171 | std::lock_guard lock{mutex}; | 171 | std::lock_guard lock{mutex}; |
172 | const float value = static_cast<float>(state.axes.at(axis)) / 32767.0f; | 172 | const float value = static_cast<float>(state.axes.at(axis)) / 32767.0f; |
173 | return (value + offset) * range; | 173 | return (value + offset) / range; |
174 | } | 174 | } |
175 | 175 | ||
176 | bool RumblePlay(u16 amp_low, u16 amp_high) { | 176 | bool RumblePlay(u16 amp_low, u16 amp_high) { |
@@ -538,8 +538,8 @@ public: | |||
538 | } | 538 | } |
539 | 539 | ||
540 | std::tuple<float, float> GetRawStatus() const override { | 540 | std::tuple<float, float> GetRawStatus() const override { |
541 | const float x = joystick->GetAxis(axis_x, 1.0f, offset_x); | 541 | const float x = joystick->GetAxis(axis_x, range, offset_x); |
542 | const float y = joystick->GetAxis(axis_y, 1.0f, offset_y); | 542 | const float y = joystick->GetAxis(axis_y, range, offset_y); |
543 | return {x, -y}; | 543 | return {x, -y}; |
544 | } | 544 | } |
545 | 545 | ||
diff --git a/src/input_common/tas/tas_input.cpp b/src/input_common/tas/tas_input.cpp index 7c1fe2dd7..1598092b6 100755 --- a/src/input_common/tas/tas_input.cpp +++ b/src/input_common/tas/tas_input.cpp | |||
@@ -47,8 +47,7 @@ Tas::Tas() { | |||
47 | } | 47 | } |
48 | 48 | ||
49 | Tas::~Tas() { | 49 | Tas::~Tas() { |
50 | SwapToStoredController(); | 50 | Stop(); |
51 | is_running = false; | ||
52 | }; | 51 | }; |
53 | 52 | ||
54 | void Tas::LoadTasFiles() { | 53 | void Tas::LoadTasFiles() { |
@@ -189,8 +188,7 @@ std::string Tas::ButtonsToString(u32 button) const { | |||
189 | void Tas::UpdateThread() { | 188 | void Tas::UpdateThread() { |
190 | if (!Settings::values.tas_enable) { | 189 | if (!Settings::values.tas_enable) { |
191 | if (is_running) { | 190 | if (is_running) { |
192 | SwapToStoredController(); | 191 | Stop(); |
193 | is_running = false; | ||
194 | } | 192 | } |
195 | return; | 193 | return; |
196 | } | 194 | } |
@@ -305,14 +303,19 @@ void Tas::StartStop() { | |||
305 | if (!Settings::values.tas_enable) { | 303 | if (!Settings::values.tas_enable) { |
306 | return; | 304 | return; |
307 | } | 305 | } |
308 | is_running = !is_running; | ||
309 | if (is_running) { | 306 | if (is_running) { |
310 | SwapToTasController(); | 307 | Stop(); |
311 | } else { | 308 | } else { |
312 | SwapToStoredController(); | 309 | is_running = true; |
310 | SwapToTasController(); | ||
313 | } | 311 | } |
314 | } | 312 | } |
315 | 313 | ||
314 | void Tas::Stop() { | ||
315 | is_running = false; | ||
316 | SwapToStoredController(); | ||
317 | } | ||
318 | |||
316 | void Tas::SwapToTasController() { | 319 | void Tas::SwapToTasController() { |
317 | if (!Settings::values.tas_swap_controllers) { | 320 | if (!Settings::values.tas_swap_controllers) { |
318 | return; | 321 | return; |
diff --git a/src/input_common/tas/tas_input.h b/src/input_common/tas/tas_input.h index 401e51fab..3e2db8f00 100755 --- a/src/input_common/tas/tas_input.h +++ b/src/input_common/tas/tas_input.h | |||
@@ -105,6 +105,9 @@ public: | |||
105 | // Sets the flag to start or stop the TAS command excecution and swaps controllers profiles | 105 | // Sets the flag to start or stop the TAS command excecution and swaps controllers profiles |
106 | void StartStop(); | 106 | void StartStop(); |
107 | 107 | ||
108 | // Stop the TAS and reverts any controller profile | ||
109 | void Stop(); | ||
110 | |||
108 | // Sets the flag to reload the file and start from the begining in the next update | 111 | // Sets the flag to reload the file and start from the begining in the next update |
109 | void Reset(); | 112 | void Reset(); |
110 | 113 | ||
diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp index 01a2b2b78..5c43b8acf 100755 --- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp +++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp | |||
@@ -635,22 +635,9 @@ void VKBlitScreen::CreateFramebuffers() { | |||
635 | const VkExtent2D size{swapchain.GetSize()}; | 635 | const VkExtent2D size{swapchain.GetSize()}; |
636 | framebuffers.resize(image_count); | 636 | framebuffers.resize(image_count); |
637 | 637 | ||
638 | VkFramebufferCreateInfo ci{ | ||
639 | .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, | ||
640 | .pNext = nullptr, | ||
641 | .flags = 0, | ||
642 | .renderPass = *renderpass, | ||
643 | .attachmentCount = 1, | ||
644 | .pAttachments = nullptr, | ||
645 | .width = size.width, | ||
646 | .height = size.height, | ||
647 | .layers = 1, | ||
648 | }; | ||
649 | |||
650 | for (std::size_t i = 0; i < image_count; ++i) { | 638 | for (std::size_t i = 0; i < image_count; ++i) { |
651 | const VkImageView image_view{swapchain.GetImageViewIndex(i)}; | 639 | const VkImageView image_view{swapchain.GetImageViewIndex(i)}; |
652 | ci.pAttachments = &image_view; | 640 | framebuffers[i] = CreateFramebuffer(image_view, size); |
653 | framebuffers[i] = device.GetLogical().CreateFramebuffer(ci); | ||
654 | } | 641 | } |
655 | } | 642 | } |
656 | 643 | ||
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 609f5c576..c6e093718 100755 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
@@ -61,11 +61,16 @@ struct DrawParams { | |||
61 | VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index) { | 61 | VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index) { |
62 | const auto& src = regs.viewport_transform[index]; | 62 | const auto& src = regs.viewport_transform[index]; |
63 | const float width = src.scale_x * 2.0f; | 63 | const float width = src.scale_x * 2.0f; |
64 | const float height = src.scale_y * 2.0f; | 64 | float y = src.translate_y - src.scale_y; |
65 | float height = src.scale_y * 2.0f; | ||
66 | if (regs.screen_y_control.y_negate) { | ||
67 | y += height; | ||
68 | height = -height; | ||
69 | } | ||
65 | const float reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1.0f : 0.0f; | 70 | const float reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1.0f : 0.0f; |
66 | VkViewport viewport{ | 71 | VkViewport viewport{ |
67 | .x = src.translate_x - src.scale_x, | 72 | .x = src.translate_x - src.scale_x, |
68 | .y = src.translate_y - src.scale_y, | 73 | .y = y, |
69 | .width = width != 0.0f ? width : 1.0f, | 74 | .width = width != 0.0f ? width : 1.0f, |
70 | .height = height != 0.0f ? height : 1.0f, | 75 | .height = height != 0.0f ? height : 1.0f, |
71 | .minDepth = src.translate_z - src.scale_z * reduce_z, | 76 | .minDepth = src.translate_z - src.scale_z * reduce_z, |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 7fd4b1894..972cfeb04 100755 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
@@ -1044,12 +1044,7 @@ void GMainWindow::InitializeHotkeys() { | |||
1044 | input_subsystem->GetTas()->StartStop(); | 1044 | input_subsystem->GetTas()->StartStop(); |
1045 | }); | 1045 | }); |
1046 | connect(hotkey_registry.GetHotkey(main_window, QStringLiteral("TAS Reset"), this), | 1046 | connect(hotkey_registry.GetHotkey(main_window, QStringLiteral("TAS Reset"), this), |
1047 | &QShortcut::activated, this, [&] { | 1047 | &QShortcut::activated, this, [&] { input_subsystem->GetTas()->Reset(); }); |
1048 | if (emulation_running) { | ||
1049 | input_subsystem->GetTas()->Reset(); | ||
1050 | } | ||
1051 | input_subsystem->GetTas()->Reset(); | ||
1052 | }); | ||
1053 | connect(hotkey_registry.GetHotkey(main_window, QStringLiteral("TAS Record"), this), | 1048 | connect(hotkey_registry.GetHotkey(main_window, QStringLiteral("TAS Record"), this), |
1054 | &QShortcut::activated, this, [&] { | 1049 | &QShortcut::activated, this, [&] { |
1055 | if (!emulation_running) { | 1050 | if (!emulation_running) { |
@@ -1515,7 +1510,7 @@ void GMainWindow::ShutdownGame() { | |||
1515 | } | 1510 | } |
1516 | game_list->SetFilterFocus(); | 1511 | game_list->SetFilterFocus(); |
1517 | tas_label->clear(); | 1512 | tas_label->clear(); |
1518 | input_subsystem->GetTas()->~Tas(); | 1513 | input_subsystem->GetTas()->Stop(); |
1519 | 1514 | ||
1520 | render_window->removeEventFilter(render_window); | 1515 | render_window->removeEventFilter(render_window); |
1521 | render_window->setAttribute(Qt::WA_Hover, false); | 1516 | render_window->setAttribute(Qt::WA_Hover, false); |