guest_driver.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  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 <vector>
  7. #include "common/common_types.h"
  8. #include "video_core/guest_driver.h"
  9. namespace VideoCore {
  10. void GuestDriverProfile::DeduceTextureHandlerSize(std::vector<u32> bound_offsets) {
  11. if (texture_handler_size) {
  12. return;
  13. }
  14. const std::size_t size = bound_offsets.size();
  15. if (size < 2) {
  16. return;
  17. }
  18. std::sort(bound_offsets.begin(), bound_offsets.end(), std::less{});
  19. u32 min_val = std::numeric_limits<u32>::max();
  20. for (std::size_t i = 1; i < size; ++i) {
  21. if (bound_offsets[i] == bound_offsets[i - 1]) {
  22. continue;
  23. }
  24. const u32 new_min = bound_offsets[i] - bound_offsets[i - 1];
  25. min_val = std::min(min_val, new_min);
  26. }
  27. if (min_val > 2) {
  28. return;
  29. }
  30. texture_handler_size = min_texture_handler_size * min_val;
  31. }
  32. } // namespace VideoCore