surface_view.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright 2019 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <functional>
  6. #include "common/common_types.h"
  7. #include "video_core/surface.h"
  8. #include "video_core/texture_cache/surface_params.h"
  9. namespace VideoCommon {
  10. struct ViewParams {
  11. constexpr explicit ViewParams(VideoCore::Surface::SurfaceTarget target, u32 base_layer,
  12. u32 num_layers, u32 base_level, u32 num_levels)
  13. : target{target}, base_layer{base_layer}, num_layers{num_layers}, base_level{base_level},
  14. num_levels{num_levels} {}
  15. std::size_t Hash() const;
  16. bool operator==(const ViewParams& rhs) const;
  17. bool operator!=(const ViewParams& rhs) const;
  18. bool IsLayered() const {
  19. switch (target) {
  20. case VideoCore::Surface::SurfaceTarget::Texture1DArray:
  21. case VideoCore::Surface::SurfaceTarget::Texture2DArray:
  22. case VideoCore::Surface::SurfaceTarget::TextureCubemap:
  23. case VideoCore::Surface::SurfaceTarget::TextureCubeArray:
  24. return true;
  25. default:
  26. return false;
  27. }
  28. }
  29. VideoCore::Surface::SurfaceTarget target{};
  30. u32 base_layer{};
  31. u32 num_layers{};
  32. u32 base_level{};
  33. u32 num_levels{};
  34. };
  35. class ViewBase {
  36. public:
  37. constexpr explicit ViewBase(const ViewParams& params) : params{params} {}
  38. constexpr const ViewParams& GetViewParams() const {
  39. return params;
  40. }
  41. protected:
  42. ViewParams params;
  43. };
  44. } // namespace VideoCommon
  45. namespace std {
  46. template <>
  47. struct hash<VideoCommon::ViewParams> {
  48. std::size_t operator()(const VideoCommon::ViewParams& k) const noexcept {
  49. return k.Hash();
  50. }
  51. };
  52. } // namespace std