emit_context.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2021 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "shader_recompiler/backend/glasm/emit_context.h"
  5. #include "shader_recompiler/frontend/ir/program.h"
  6. namespace Shader::Backend::GLASM {
  7. EmitContext::EmitContext(IR::Program& program) {
  8. // FIXME: Temporary partial implementation
  9. u32 cbuf_index{};
  10. for (const auto& desc : program.info.constant_buffer_descriptors) {
  11. if (desc.count != 1) {
  12. throw NotImplementedException("Constant buffer descriptor array");
  13. }
  14. Add("CBUFFER c{}[]={{program.buffer[{}]}};", desc.index, cbuf_index);
  15. ++cbuf_index;
  16. }
  17. for (const auto& desc : program.info.storage_buffers_descriptors) {
  18. if (desc.count != 1) {
  19. throw NotImplementedException("Storage buffer descriptor array");
  20. }
  21. }
  22. if (const size_t num = program.info.storage_buffers_descriptors.size(); num > 0) {
  23. Add("PARAM c[{}]={{program.local[0..{}]}};", num, num - 1);
  24. }
  25. switch (program.stage) {
  26. case Stage::VertexA:
  27. case Stage::VertexB:
  28. stage_name = "vertex";
  29. break;
  30. case Stage::TessellationControl:
  31. case Stage::TessellationEval:
  32. case Stage::Geometry:
  33. stage_name = "primitive";
  34. break;
  35. case Stage::Fragment:
  36. stage_name = "fragment";
  37. break;
  38. case Stage::Compute:
  39. stage_name = "compute";
  40. break;
  41. }
  42. }
  43. } // namespace Shader::Backend::GLASM