BufferState.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 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 Swap(Auto<DisposableBuffer> from, Auto<DisposableBuffer> to)
  26. {
  27. if (_buffer == from)
  28. {
  29. _buffer.DecrementReferenceCount();
  30. to.IncrementReferenceCount();
  31. _buffer = to;
  32. }
  33. }
  34. public void Dispose()
  35. {
  36. _buffer?.DecrementReferenceCount();
  37. }
  38. }
  39. }