samples_helper.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <utility>
  5. #include "common/assert.h"
  6. #include "video_core/textures/texture.h"
  7. namespace VideoCommon {
  8. [[nodiscard]] inline std::pair<int, int> SamplesLog2(int num_samples) {
  9. switch (num_samples) {
  10. case 1:
  11. return {0, 0};
  12. case 2:
  13. return {1, 0};
  14. case 4:
  15. return {1, 1};
  16. case 8:
  17. return {2, 1};
  18. case 16:
  19. return {2, 2};
  20. }
  21. ASSERT_MSG(false, "Invalid number of samples={}", num_samples);
  22. return {0, 0};
  23. }
  24. [[nodiscard]] inline int NumSamples(Tegra::Texture::MsaaMode msaa_mode) {
  25. using Tegra::Texture::MsaaMode;
  26. switch (msaa_mode) {
  27. case MsaaMode::Msaa1x1:
  28. return 1;
  29. case MsaaMode::Msaa2x1:
  30. case MsaaMode::Msaa2x1_D3D:
  31. return 2;
  32. case MsaaMode::Msaa2x2:
  33. case MsaaMode::Msaa2x2_VC4:
  34. case MsaaMode::Msaa2x2_VC12:
  35. return 4;
  36. case MsaaMode::Msaa4x2:
  37. case MsaaMode::Msaa4x2_D3D:
  38. case MsaaMode::Msaa4x2_VC8:
  39. case MsaaMode::Msaa4x2_VC24:
  40. return 8;
  41. case MsaaMode::Msaa4x4:
  42. return 16;
  43. }
  44. ASSERT_MSG(false, "Invalid MSAA mode={}", static_cast<int>(msaa_mode));
  45. return 1;
  46. }
  47. [[nodiscard]] inline int NumSamplesX(Tegra::Texture::MsaaMode msaa_mode) {
  48. using Tegra::Texture::MsaaMode;
  49. switch (msaa_mode) {
  50. case MsaaMode::Msaa1x1:
  51. return 1;
  52. case MsaaMode::Msaa2x1:
  53. case MsaaMode::Msaa2x1_D3D:
  54. case MsaaMode::Msaa2x2:
  55. case MsaaMode::Msaa2x2_VC4:
  56. case MsaaMode::Msaa2x2_VC12:
  57. return 2;
  58. case MsaaMode::Msaa4x2:
  59. case MsaaMode::Msaa4x2_D3D:
  60. case MsaaMode::Msaa4x2_VC8:
  61. case MsaaMode::Msaa4x2_VC24:
  62. case MsaaMode::Msaa4x4:
  63. return 4;
  64. }
  65. ASSERT_MSG(false, "Invalid MSAA mode={}", static_cast<int>(msaa_mode));
  66. return 1;
  67. }
  68. [[nodiscard]] inline int NumSamplesY(Tegra::Texture::MsaaMode msaa_mode) {
  69. using Tegra::Texture::MsaaMode;
  70. switch (msaa_mode) {
  71. case MsaaMode::Msaa1x1:
  72. case MsaaMode::Msaa2x1:
  73. case MsaaMode::Msaa2x1_D3D:
  74. return 1;
  75. case MsaaMode::Msaa2x2:
  76. case MsaaMode::Msaa2x2_VC4:
  77. case MsaaMode::Msaa2x2_VC12:
  78. case MsaaMode::Msaa4x2:
  79. case MsaaMode::Msaa4x2_D3D:
  80. case MsaaMode::Msaa4x2_VC8:
  81. case MsaaMode::Msaa4x2_VC24:
  82. return 2;
  83. case MsaaMode::Msaa4x4:
  84. return 4;
  85. }
  86. ASSERT_MSG(false, "Invalid MSAA mode={}", static_cast<int>(msaa_mode));
  87. return 1;
  88. }
  89. } // namespace VideoCommon