Pure dynamic MMIO access. Prep for more complex GPU memory management.
This commit is contained in:
@@ -45,12 +45,13 @@ X_STATUS GraphicsSystem::Setup() {
|
||||
worker_ = new RingBufferWorker(this, memory_);
|
||||
|
||||
// Let the processor know we want register access callbacks.
|
||||
RegisterAccessCallbacks callbacks;
|
||||
callbacks.context = this;
|
||||
callbacks.handles = (RegisterHandlesCallback)HandlesRegisterThunk;
|
||||
callbacks.read = (RegisterReadCallback)ReadRegisterThunk;
|
||||
callbacks.write = (RegisterWriteCallback)WriteRegisterThunk;
|
||||
emulator_->processor()->AddRegisterAccessCallbacks(callbacks);
|
||||
emulator_->memory()->AddMappedRange(
|
||||
0x7FC80000,
|
||||
0xFFFF0000,
|
||||
0x0000FFFF,
|
||||
this,
|
||||
reinterpret_cast<MMIOReadCallback>(MMIOReadRegisterThunk),
|
||||
reinterpret_cast<MMIOWriteCallback>(MMIOWriteRegisterThunk));
|
||||
|
||||
// Create worker thread.
|
||||
// This will initialize the graphics system.
|
||||
@@ -132,10 +133,6 @@ void GraphicsSystem::EnableReadPointerWriteBack(uint32_t ptr,
|
||||
worker_->EnableReadPointerWriteBack(ptr, block_size);
|
||||
}
|
||||
|
||||
bool GraphicsSystem::HandlesRegister(uint64_t addr) {
|
||||
return (addr & 0xFFFF0000) == 0x7FC80000;
|
||||
}
|
||||
|
||||
uint64_t GraphicsSystem::ReadRegister(uint64_t addr) {
|
||||
uint32_t r = addr & 0xFFFF;
|
||||
XELOGGPU("ReadRegister(%.4X)", r);
|
||||
|
||||
@@ -40,7 +40,6 @@ public:
|
||||
void InitializeRingBuffer(uint32_t ptr, uint32_t page_count);
|
||||
void EnableReadPointerWriteBack(uint32_t ptr, uint32_t block_size);
|
||||
|
||||
bool HandlesRegister(uint64_t addr);
|
||||
virtual uint64_t ReadRegister(uint64_t addr);
|
||||
virtual void WriteRegister(uint64_t addr, uint64_t value);
|
||||
|
||||
@@ -59,14 +58,11 @@ private:
|
||||
}
|
||||
void ThreadStart();
|
||||
|
||||
static bool HandlesRegisterThunk(GraphicsSystem* gs, uint64_t addr) {
|
||||
return gs->HandlesRegister(addr);
|
||||
}
|
||||
static uint64_t ReadRegisterThunk(GraphicsSystem* gs, uint64_t addr) {
|
||||
static uint64_t MMIOReadRegisterThunk(GraphicsSystem* gs, uint64_t addr) {
|
||||
return gs->ReadRegister(addr);
|
||||
}
|
||||
static void WriteRegisterThunk(GraphicsSystem* gs, uint64_t addr,
|
||||
uint64_t value) {
|
||||
static void MMIOWriteRegisterThunk(GraphicsSystem* gs, uint64_t addr,
|
||||
uint64_t value) {
|
||||
gs->WriteRegister(addr, value);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user