MethodUniformBufferBind.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Ryujinx.Graphics.Gpu.State;
  2. namespace Ryujinx.Graphics.Gpu.Engine
  3. {
  4. partial class Methods
  5. {
  6. private void UniformBufferBindVertex(int argument)
  7. {
  8. UniformBufferBind(argument, ShaderType.Vertex);
  9. }
  10. private void UniformBufferBindTessControl(int argument)
  11. {
  12. UniformBufferBind(argument, ShaderType.TessellationControl);
  13. }
  14. private void UniformBufferBindTessEvaluation(int argument)
  15. {
  16. UniformBufferBind(argument, ShaderType.TessellationEvaluation);
  17. }
  18. private void UniformBufferBindGeometry(int argument)
  19. {
  20. UniformBufferBind(argument, ShaderType.Geometry);
  21. }
  22. private void UniformBufferBindFragment(int argument)
  23. {
  24. UniformBufferBind(argument, ShaderType.Fragment);
  25. }
  26. private void UniformBufferBind(int argument, ShaderType type)
  27. {
  28. bool enable = (argument & 1) != 0;
  29. int index = (argument >> 4) & 0x1f;
  30. if (enable)
  31. {
  32. var uniformBuffer = _context.State.Get<UniformBufferState>(MethodOffset.UniformBufferState);
  33. ulong address = uniformBuffer.Address.Pack();
  34. _bufferManager.SetGraphicsUniformBuffer((int)type, index, address, (uint)uniformBuffer.Size);
  35. }
  36. else
  37. {
  38. _bufferManager.SetGraphicsUniformBuffer((int)type, index, 0, 0);
  39. }
  40. }
  41. }
  42. }