BufferState.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System;
  2. namespace Ryujinx.Graphics.Vulkan
  3. {
  4. struct BufferState : IDisposable
  5. {
  6. public static BufferState Null => new BufferState(null, 0, 0);
  7. private readonly int _offset;
  8. private readonly int _size;
  9. private readonly Auto<DisposableBuffer> _buffer;
  10. public BufferState(Auto<DisposableBuffer> buffer, int offset, int size)
  11. {
  12. _buffer = buffer;
  13. _offset = offset;
  14. _size = size;
  15. buffer?.IncrementReferenceCount();
  16. }
  17. public void BindTransformFeedbackBuffer(VulkanRenderer gd, CommandBufferScoped cbs, uint binding)
  18. {
  19. if (_buffer != null)
  20. {
  21. var buffer = _buffer.Get(cbs, _offset, _size).Value;
  22. gd.TransformFeedbackApi.CmdBindTransformFeedbackBuffers(cbs.CommandBuffer, binding, 1, buffer, (ulong)_offset, (ulong)_size);
  23. }
  24. }
  25. public void Dispose()
  26. {
  27. _buffer?.DecrementReferenceCount();
  28. }
  29. }
  30. }