surface_view.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. ViewParams(VideoCore::Surface::SurfaceTarget target, u32 base_layer, u32 num_layers,
  12. 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. VideoCore::Surface::SurfaceTarget target{};
  18. u32 base_layer{};
  19. u32 num_layers{};
  20. u32 base_level{};
  21. u32 num_levels{};
  22. bool IsLayered() const {
  23. switch (target) {
  24. case VideoCore::Surface::SurfaceTarget::Texture1DArray:
  25. case VideoCore::Surface::SurfaceTarget::Texture2DArray:
  26. case VideoCore::Surface::SurfaceTarget::TextureCubemap:
  27. case VideoCore::Surface::SurfaceTarget::TextureCubeArray:
  28. return true;
  29. default:
  30. return false;
  31. }
  32. }
  33. };
  34. class ViewBase {
  35. public:
  36. ViewBase(const ViewParams& params) : params{params} {}
  37. const ViewParams& GetViewParams() const {
  38. return params;
  39. }
  40. protected:
  41. ViewParams params;
  42. };
  43. } // namespace VideoCommon
  44. namespace std {
  45. template <>
  46. struct hash<VideoCommon::ViewParams> {
  47. std::size_t operator()(const VideoCommon::ViewParams& k) const noexcept {
  48. return k.Hash();
  49. }
  50. };
  51. } // namespace std