ThreadedShader.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Ryujinx.Graphics.GAL.Multithreading.Commands.Shader;
  2. using Ryujinx.Graphics.GAL.Multithreading.Model;
  3. using Ryujinx.Graphics.Shader;
  4. namespace Ryujinx.Graphics.GAL.Multithreading.Resources
  5. {
  6. class ThreadedShader : IShader
  7. {
  8. private ThreadedRenderer _renderer;
  9. private ShaderStage _stage;
  10. private string _code;
  11. public IShader Base;
  12. public ThreadedShader(ThreadedRenderer renderer, ShaderStage stage, string code)
  13. {
  14. _renderer = renderer;
  15. _stage = stage;
  16. _code = code;
  17. }
  18. internal void EnsureCreated()
  19. {
  20. if (_code != null && Base == null)
  21. {
  22. Base = _renderer.BaseRenderer.CompileShader(_stage, _code);
  23. _code = null;
  24. }
  25. }
  26. public void Dispose()
  27. {
  28. _renderer.New<ShaderDisposeCommand>().Set(new TableRef<ThreadedShader>(_renderer, this));
  29. _renderer.QueueCommand();
  30. }
  31. }
  32. }