guest_driver.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <algorithm>
  5. #include <limits>
  6. #include "video_core/guest_driver.h"
  7. namespace VideoCore {
  8. void GuestDriverProfile::DeduceTextureHandlerSize(std::vector<u32>&& bound_offsets) {
  9. if (texture_handler_size_deduced) {
  10. return;
  11. }
  12. const std::size_t size = bound_offsets.size();
  13. if (size < 2) {
  14. return;
  15. }
  16. std::sort(bound_offsets.begin(), bound_offsets.end(), std::less{});
  17. u32 min_val = std::numeric_limits<u32>::max();
  18. for (std::size_t i = 1; i < size; ++i) {
  19. if (bound_offsets[i] == bound_offsets[i - 1]) {
  20. continue;
  21. }
  22. const u32 new_min = bound_offsets[i] - bound_offsets[i - 1];
  23. min_val = std::min(min_val, new_min);
  24. }
  25. if (min_val > 2) {
  26. return;
  27. }
  28. texture_handler_size_deduced = true;
  29. texture_handler_size = min_texture_handler_size * min_val;
  30. }
  31. } // namespace VideoCore