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.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/video_core/guest_driver.h (limited to 'src/video_core/guest_driver.h') diff --git a/src/video_core/guest_driver.h b/src/video_core/guest_driver.h new file mode 100644 index 000000000..f64f043af --- /dev/null +++ b/src/video_core/guest_driver.h @@ -0,0 +1,37 @@ +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include + +#include "common/common_types.h" + +namespace VideoCore { + +/** + * The GuestDriverProfile class is used to learn about the GPU drivers behavior and collect + * information necessary for impossible to avoid HLE methods like shader tracks. + */ +class GuestDriverProfile { +public: + u32 GetTextureHandlerSize() const { + return texture_handler_size; + } + + bool TextureHandlerSizeKnown() const { + return texture_handler_size_deduced; + } + + void DeduceTextureHandlerSize(std::vector&& bound_offsets); + +private: + // This goes with Vulkan and OpenGL standards but Nvidia GPUs can easily + // use 4 bytes instead. Thus, certain drivers may squish the size. + static constexpr u32 default_texture_handler_size = 8; + u32 texture_handler_size{default_texture_handler_size}; + bool texture_handler_size_deduced{}; +}; + +} // namespace VideoCore -- cgit v1.2.3