From c921e496eb47de49a4d6ce62527581b966dca259 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Fri, 3 Jan 2020 16:16:29 -0400 Subject: GPU: Implement guest driver profile and deduce texture handler sizes. --- src/video_core/guest_driver.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/video_core/guest_driver.cpp (limited to 'src/video_core/guest_driver.cpp') diff --git a/src/video_core/guest_driver.cpp b/src/video_core/guest_driver.cpp new file mode 100644 index 000000000..b1ac254ff --- /dev/null +++ b/src/video_core/guest_driver.cpp @@ -0,0 +1,34 @@ +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "video_core/guest_driver.h" + +namespace VideoCore { + +void GuestDriverProfile::DeduceTextureHandlerSize(std::vector&& bound_offsets) { + if (texture_handler_size_deduced) { + return; + } + std::size_t size = bound_offsets.size(); + if (size < 2) { + return; + } + std::sort(bound_offsets.begin(), bound_offsets.end(), + [](const u32& a, const u32& b) { return a < b; }); + u32 min_val = 0xFFFFFFFF; // set to highest possible 32 bit integer; + for (std::size_t i = 1; i < size; i++) { + if (bound_offsets[i] == bound_offsets[i - 1]) { + continue; + } + const u32 new_min = bound_offsets[i] - bound_offsets[i - 1]; + min_val = std::min(min_val, new_min); + } + if (min_val > 2) { + return; + } + texture_handler_size_deduced = true; + texture_handler_size = sizeof(u32) * min_val; +} + +} // namespace VideoCore -- cgit v1.2.3 From 74aa7de5e3905a9438f8839fa273024edd118f19 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Sat, 4 Jan 2020 12:30:11 -0400 Subject: Guest_driver: Correct compiling errors in GCC. --- src/video_core/guest_driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/video_core/guest_driver.cpp') diff --git a/src/video_core/guest_driver.cpp b/src/video_core/guest_driver.cpp index b1ac254ff..55b9bd021 100644 --- a/src/video_core/guest_driver.cpp +++ b/src/video_core/guest_driver.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include + #include "video_core/guest_driver.h" namespace VideoCore { @@ -28,7 +30,7 @@ void GuestDriverProfile::DeduceTextureHandlerSize(std::vector&& bound_offse return; } texture_handler_size_deduced = true; - texture_handler_size = sizeof(u32) * min_val; + texture_handler_size = min_texture_handler_size * min_val; } } // namespace VideoCore -- cgit v1.2.3 From dc5cfa8d287757dede737553b6f1f8521971c6e2 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Sun, 5 Jan 2020 12:08:39 -0400 Subject: Shader_IR: Address Feedback --- src/video_core/guest_driver.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/video_core/guest_driver.cpp') diff --git a/src/video_core/guest_driver.cpp b/src/video_core/guest_driver.cpp index 55b9bd021..1ded52905 100644 --- a/src/video_core/guest_driver.cpp +++ b/src/video_core/guest_driver.cpp @@ -1,8 +1,9 @@ -// Copyright 2019 yuzu Emulator Project +// Copyright 2020 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #include +#include #include "video_core/guest_driver.h" @@ -12,13 +13,13 @@ void GuestDriverProfile::DeduceTextureHandlerSize(std::vector&& bound_offse if (texture_handler_size_deduced) { return; } - std::size_t size = bound_offsets.size(); + const std::size_t size = bound_offsets.size(); if (size < 2) { return; } std::sort(bound_offsets.begin(), bound_offsets.end(), [](const u32& a, const u32& b) { return a < b; }); - u32 min_val = 0xFFFFFFFF; // set to highest possible 32 bit integer; + u32 min_val = UINT_MAX; for (std::size_t i = 1; i < size; i++) { if (bound_offsets[i] == bound_offsets[i - 1]) { continue; -- cgit v1.2.3 From 64496f24569ecc23ebbb816725f27142867b1468 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Wed, 8 Jan 2020 11:46:36 -0400 Subject: Shader_IR: Address Feedback --- src/video_core/guest_driver.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/video_core/guest_driver.cpp') diff --git a/src/video_core/guest_driver.cpp b/src/video_core/guest_driver.cpp index 1ded52905..6adef459e 100644 --- a/src/video_core/guest_driver.cpp +++ b/src/video_core/guest_driver.cpp @@ -3,7 +3,7 @@ // Refer to the license.txt file included. #include -#include +#include #include "video_core/guest_driver.h" @@ -17,10 +17,9 @@ void GuestDriverProfile::DeduceTextureHandlerSize(std::vector&& bound_offse if (size < 2) { return; } - std::sort(bound_offsets.begin(), bound_offsets.end(), - [](const u32& a, const u32& b) { return a < b; }); - u32 min_val = UINT_MAX; - for (std::size_t i = 1; i < size; i++) { + std::sort(bound_offsets.begin(), bound_offsets.end(), std::less{}); + u32 min_val = std::numeric_limits::max(); + for (std::size_t i = 1; i < size; ++i) { if (bound_offsets[i] == bound_offsets[i - 1]) { continue; } -- cgit v1.2.3