Playing with buffers.

This commit is contained in:
Ben Vanik
2014-12-25 01:39:10 -08:00
parent f438ae1bfd
commit 39541aaaac
13 changed files with 351 additions and 93 deletions

View File

@@ -0,0 +1,51 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2014 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_GPU_GL4_CIRCULAR_BUFFER_H_
#define XENIA_GPU_GL4_CIRCULAR_BUFFER_H_
#include <xenia/gpu/gl4/gl_context.h>
namespace xe {
namespace gpu {
namespace gl4 {
// TODO(benvanik): uh, make this circular.
// TODO(benvanik): fences to prevent this from ever flushing.
class CircularBuffer {
public:
CircularBuffer(size_t capacity);
~CircularBuffer();
struct Allocation {
void* host_ptr;
GLuint64 gpu_ptr;
size_t length;
};
bool Initialize();
Allocation Acquire(size_t length);
void Commit(Allocation allocation);
void WaitUntilClean();
private:
size_t capacity_;
uintptr_t write_head_;
GLuint buffer_;
GLuint64 gpu_base_;
uint8_t* host_base_;
};
} // namespace gl4
} // namespace gpu
} // namespace xe
#endif // XENIA_GPU_GL4_CIRCULAR_BUFFER_H_