exit_program.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // Copyright 2021 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "common/common_types.h"
  5. #include "shader_recompiler/exception.h"
  6. #include "shader_recompiler/frontend/maxwell/translate/impl/impl.h"
  7. namespace Shader::Maxwell {
  8. namespace {
  9. void ExitFragment(TranslatorVisitor& v) {
  10. const ProgramHeader sph{v.env.SPH()};
  11. IR::Reg src_reg{IR::Reg::R0};
  12. for (u32 render_target = 0; render_target < 8; ++render_target) {
  13. const std::array<bool, 4> mask{sph.ps.EnabledOutputComponents(render_target)};
  14. for (u32 component = 0; component < 4; ++component) {
  15. if (!mask[component]) {
  16. continue;
  17. }
  18. v.ir.SetFragColor(render_target, component, v.F(src_reg));
  19. ++src_reg;
  20. }
  21. }
  22. if (sph.ps.omap.sample_mask != 0) {
  23. throw NotImplementedException("Sample mask");
  24. }
  25. if (sph.ps.omap.depth != 0) {
  26. throw NotImplementedException("Fragment depth");
  27. }
  28. }
  29. } // Anonymous namespace
  30. void TranslatorVisitor::EXIT() {
  31. switch (env.ShaderStage()) {
  32. case Stage::Fragment:
  33. ExitFragment(*this);
  34. break;
  35. default:
  36. break;
  37. }
  38. }
  39. } // namespace Shader::Maxwell