diff options
| author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-06-26 19:22:29 -0300 |
|---|---|---|
| committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-06-26 19:28:11 -0300 |
| commit | 1d6be9febf7b9613014ec60fc0ec42e40cc073c9 (patch) | |
| tree | 66d105c6dc07957c1fd53c862bb604d0050b3e1f /src/video_core/compatible_formats.h | |
| parent | c4fe83a7bc302acbefe0eedee48eabc671d33964 (diff) | |
video_core/compatible_formats: Table to test if two formats are legal to view or copy
Add a flat table to test if it's legal to create a texture view between
two formats or copy betweem them.
This table is based on ARB_copy_image and ARB_texture_view. Copies are
more permissive than views.
Diffstat (limited to 'src/video_core/compatible_formats.h')
| -rw-r--r-- | src/video_core/compatible_formats.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/video_core/compatible_formats.h b/src/video_core/compatible_formats.h new file mode 100644 index 000000000..d1082566d --- /dev/null +++ b/src/video_core/compatible_formats.h @@ -0,0 +1,32 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <array> +#include <bitset> +#include <cstddef> + +#include "video_core/surface.h" + +namespace VideoCore::Surface { + +class FormatCompatibility { +public: + using Table = std::array<std::bitset<MaxPixelFormat>, MaxPixelFormat>; + + explicit FormatCompatibility(); + + bool TestView(PixelFormat format_a, PixelFormat format_b) const noexcept { + return view[static_cast<size_t>(format_a)][static_cast<size_t>(format_b)]; + } + + bool TestCopy(PixelFormat format_a, PixelFormat format_b) const noexcept { + return copy[static_cast<size_t>(format_a)][static_cast<size_t>(format_b)]; + } + +private: + Table view; + Table copy; +}; + +} // namespace VideoCore::Surface |
