Massive refactoring of all code + audio skeleton.
This should make it easier to find files and (in the future) split things up into separate libraries. It also changes around emulator initialization to make it a little more difficult to do things out of order and a little more sensible as to when real init work happens. Also adding a skeleton audio system/driver and reworking CPU register access to be more extensible.
This commit is contained in:
@@ -1,31 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_D3D11_D3D11_PRIVATE_H_
|
||||
#define XENIA_GPU_D3D11_D3D11_PRIVATE_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/gpu/d3d11/d3d11.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
namespace d3d11 {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace d3d11
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_GPU_D3D11_D3D11_PRIVATE_H_
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_D3D11_D3D11_GPU_PRIVATE_H_
|
||||
#define XENIA_GPU_D3D11_D3D11_GPU_PRIVATE_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/gpu/d3d11/d3d11_gpu.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
namespace d3d11 {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace d3d11
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_GPU_D3D11_D3D11_GPU_PRIVATE_H_
|
||||
@@ -1,44 +1,44 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/gpu/d3d11/d3d11.h>
|
||||
|
||||
#include <xenia/gpu/d3d11/d3d11_graphics_system.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::gpu;
|
||||
using namespace xe::gpu::d3d11;
|
||||
|
||||
|
||||
namespace {
|
||||
void InitializeIfNeeded();
|
||||
void CleanupOnShutdown();
|
||||
|
||||
void InitializeIfNeeded() {
|
||||
static bool has_initialized = false;
|
||||
if (has_initialized) {
|
||||
return;
|
||||
}
|
||||
has_initialized = true;
|
||||
|
||||
//
|
||||
|
||||
atexit(CleanupOnShutdown);
|
||||
}
|
||||
|
||||
void CleanupOnShutdown() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GraphicsSystem* xe::gpu::d3d11::Create(const CreationParams* params) {
|
||||
InitializeIfNeeded();
|
||||
return new D3D11GraphicsSystem(params);
|
||||
}
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/gpu/d3d11/d3d11_gpu.h>
|
||||
|
||||
#include <xenia/gpu/d3d11/d3d11_graphics_system.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::gpu;
|
||||
using namespace xe::gpu::d3d11;
|
||||
|
||||
|
||||
namespace {
|
||||
void InitializeIfNeeded();
|
||||
void CleanupOnShutdown();
|
||||
|
||||
void InitializeIfNeeded() {
|
||||
static bool has_initialized = false;
|
||||
if (has_initialized) {
|
||||
return;
|
||||
}
|
||||
has_initialized = true;
|
||||
|
||||
//
|
||||
|
||||
atexit(CleanupOnShutdown);
|
||||
}
|
||||
|
||||
void CleanupOnShutdown() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GraphicsSystem* xe::gpu::d3d11::Create(Emulator* emulator) {
|
||||
InitializeIfNeeded();
|
||||
return new D3D11GraphicsSystem(emulator);
|
||||
}
|
||||
@@ -1,33 +1,33 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_D3D11_D3D11_H_
|
||||
#define XENIA_GPU_D3D11_D3D11_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
|
||||
class CreationParams;
|
||||
class GraphicsSystem;
|
||||
|
||||
namespace d3d11 {
|
||||
|
||||
|
||||
GraphicsSystem* Create(const CreationParams* params);
|
||||
|
||||
|
||||
} // namespace d3d11
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_GPU_D3D11_D3D11_H_
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_D3D11_D3D11_GPU_H_
|
||||
#define XENIA_GPU_D3D11_D3D11_GPU_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
|
||||
|
||||
XEDECLARECLASS1(xe, Emulator);
|
||||
XEDECLARECLASS2(xe, gpu, GraphicsSystem);
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
namespace d3d11 {
|
||||
|
||||
|
||||
GraphicsSystem* Create(Emulator* emulator);
|
||||
|
||||
|
||||
} // namespace d3d11
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_GPU_D3D11_D3D11_GPU_H_
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/gpu/graphics_driver.h>
|
||||
#include <xenia/gpu/d3d11/d3d11-private.h>
|
||||
#include <xenia/gpu/d3d11/d3d11_gpu-private.h>
|
||||
#include <xenia/gpu/xenos/xenos.h>
|
||||
|
||||
#include <d3d11.h>
|
||||
|
||||
@@ -21,7 +21,8 @@ using namespace xe::gpu::d3d11;
|
||||
|
||||
namespace {
|
||||
|
||||
void __stdcall D3D11GraphicsSystemVsyncCallback(D3D11GraphicsSystem* gs, BOOLEAN) {
|
||||
void __stdcall D3D11GraphicsSystemVsyncCallback(
|
||||
D3D11GraphicsSystem* gs, BOOLEAN) {
|
||||
gs->MarkVblank();
|
||||
gs->DispatchInterruptCallback(0);
|
||||
}
|
||||
@@ -29,10 +30,10 @@ void __stdcall D3D11GraphicsSystemVsyncCallback(D3D11GraphicsSystem* gs, BOOLEAN
|
||||
}
|
||||
|
||||
|
||||
D3D11GraphicsSystem::D3D11GraphicsSystem(const CreationParams* params) :
|
||||
D3D11GraphicsSystem::D3D11GraphicsSystem(Emulator* emulator) :
|
||||
window_(0), dxgi_factory_(0), device_(0),
|
||||
timer_queue_(NULL), vsync_timer_(NULL),
|
||||
GraphicsSystem(params) {
|
||||
GraphicsSystem(emulator) {
|
||||
}
|
||||
|
||||
D3D11GraphicsSystem::~D3D11GraphicsSystem() {
|
||||
@@ -78,7 +79,7 @@ void D3D11GraphicsSystem::Initialize() {
|
||||
}
|
||||
// Just go with the default for now.
|
||||
adapter = 0;
|
||||
|
||||
|
||||
D3D_DRIVER_TYPE driver_type =
|
||||
adapter ? D3D_DRIVER_TYPE_UNKNOWN : D3D_DRIVER_TYPE_HARDWARE;
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/gpu/graphics_system.h>
|
||||
#include <xenia/gpu/d3d11/d3d11-private.h>
|
||||
#include <xenia/gpu/d3d11/d3d11_gpu-private.h>
|
||||
|
||||
#include <d3d11.h>
|
||||
|
||||
@@ -25,12 +25,12 @@ namespace d3d11 {
|
||||
class D3D11Window;
|
||||
|
||||
|
||||
GraphicsSystem* Create(const CreationParams* params);
|
||||
GraphicsSystem* Create(Emulator* emulator);
|
||||
|
||||
|
||||
class D3D11GraphicsSystem : public GraphicsSystem {
|
||||
public:
|
||||
D3D11GraphicsSystem(const CreationParams* params);
|
||||
D3D11GraphicsSystem(Emulator* emulator);
|
||||
virtual ~D3D11GraphicsSystem();
|
||||
|
||||
protected:
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Copyright 2013 Ben Vanik. All Rights Reserved.
|
||||
{
|
||||
'sources': [
|
||||
'd3d11-private.h',
|
||||
'd3d11.cc',
|
||||
'd3d11.h',
|
||||
'd3d11_gpu-private.h',
|
||||
'd3d11_gpu.cc',
|
||||
'd3d11_gpu.h',
|
||||
'd3d11_graphics_driver.cc',
|
||||
'd3d11_graphics_driver.h',
|
||||
'd3d11_graphics_system.cc',
|
||||
|
||||
@@ -20,39 +20,39 @@ DEFINE_string(gpu, "any",
|
||||
"Graphics system. Use: [any, nop, d3d11]");
|
||||
|
||||
|
||||
#include <xenia/gpu/nop/nop.h>
|
||||
GraphicsSystem* xe::gpu::CreateNop(const CreationParams* params) {
|
||||
return xe::gpu::nop::Create(params);
|
||||
#include <xenia/gpu/nop/nop_gpu.h>
|
||||
GraphicsSystem* xe::gpu::CreateNop(Emulator* emulator) {
|
||||
return xe::gpu::nop::Create(emulator);
|
||||
}
|
||||
|
||||
|
||||
#if XE_PLATFORM(WIN32)
|
||||
#include <xenia/gpu/d3d11/d3d11.h>
|
||||
GraphicsSystem* xe::gpu::CreateD3D11(const CreationParams* params) {
|
||||
return xe::gpu::d3d11::Create(params);
|
||||
#include <xenia/gpu/d3d11/d3d11_gpu.h>
|
||||
GraphicsSystem* xe::gpu::CreateD3D11(Emulator* emulator) {
|
||||
return xe::gpu::d3d11::Create(emulator);
|
||||
}
|
||||
#endif // WIN32
|
||||
|
||||
|
||||
GraphicsSystem* xe::gpu::Create(const CreationParams* params) {
|
||||
GraphicsSystem* xe::gpu::Create(Emulator* emulator) {
|
||||
if (FLAGS_gpu.compare("nop") == 0) {
|
||||
return CreateNop(params);
|
||||
return CreateNop(emulator);
|
||||
#if XE_PLATFORM(WIN32)
|
||||
} else if (FLAGS_gpu.compare("d3d11") == 0) {
|
||||
return CreateD3D11(params);
|
||||
return CreateD3D11(emulator);
|
||||
#endif // WIN32
|
||||
} else {
|
||||
// Create best available.
|
||||
GraphicsSystem* best = NULL;
|
||||
|
||||
#if XE_PLATFORM(WIN32)
|
||||
best = CreateD3D11(params);
|
||||
best = CreateD3D11(emulator);
|
||||
if (best) {
|
||||
return best;
|
||||
}
|
||||
#endif // WIN32
|
||||
|
||||
// Fallback to nop.
|
||||
return CreateNop(params);
|
||||
return CreateNop(emulator);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,16 +13,19 @@
|
||||
#include <xenia/gpu/graphics_system.h>
|
||||
|
||||
|
||||
XEDECLARECLASS1(xe, Emulator);
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
|
||||
|
||||
GraphicsSystem* Create(const CreationParams* params);
|
||||
GraphicsSystem* Create(Emulator* emulator);
|
||||
|
||||
GraphicsSystem* CreateNop(const CreationParams* params);
|
||||
GraphicsSystem* CreateNop(Emulator* emulator);
|
||||
|
||||
#if XE_PLATFORM(WIN32)
|
||||
GraphicsSystem* CreateD3D11(const CreationParams* params);
|
||||
GraphicsSystem* CreateD3D11(Emulator* emulator);
|
||||
#endif // WIN32
|
||||
|
||||
|
||||
|
||||
@@ -24,7 +24,3 @@ GraphicsDriver::GraphicsDriver(xe_memory_ref memory) :
|
||||
GraphicsDriver::~GraphicsDriver() {
|
||||
xe_memory_release(memory_);
|
||||
}
|
||||
|
||||
xe_memory_ref GraphicsDriver::memory() {
|
||||
return xe_memory_retain(memory_);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ class GraphicsDriver {
|
||||
public:
|
||||
virtual ~GraphicsDriver();
|
||||
|
||||
xe_memory_ref memory();
|
||||
xe_memory_ref memory() const { return memory_; }
|
||||
xenos::RegisterFile* register_file() { return ®ister_file_; };
|
||||
void set_address_translation(uint32_t value) {
|
||||
address_translation_ = value;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <xenia/gpu/graphics_system.h>
|
||||
|
||||
#include <xenia/emulator.h>
|
||||
#include <xenia/cpu/processor.h>
|
||||
#include <xenia/gpu/graphics_driver.h>
|
||||
#include <xenia/gpu/ring_buffer_worker.h>
|
||||
@@ -16,33 +17,21 @@
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::cpu::ppc;
|
||||
using namespace xe::gpu;
|
||||
using namespace xe::gpu::xenos;
|
||||
|
||||
|
||||
GraphicsSystem::GraphicsSystem(const CreationParams* params) :
|
||||
GraphicsSystem::GraphicsSystem(Emulator* emulator) :
|
||||
emulator_(emulator),
|
||||
thread_(0), running_(false), driver_(0), worker_(0),
|
||||
interrupt_callback_(0), interrupt_callback_data_(0),
|
||||
last_interrupt_time_(0), swap_pending_(false) {
|
||||
memory_ = xe_memory_retain(params->memory);
|
||||
|
||||
worker_ = new RingBufferWorker(this, memory_);
|
||||
|
||||
// Set during Initialize();
|
||||
driver_ = 0;
|
||||
memory_ = xe_memory_retain(emulator->memory());
|
||||
|
||||
// Create the run loop used for any windows/etc.
|
||||
// This must be done on the thread we create the driver.
|
||||
run_loop_ = xe_run_loop_create();
|
||||
|
||||
// Create worker thread.
|
||||
// This will initialize the graphics system.
|
||||
// Init needs to happen there so that any thread-local stuff
|
||||
// is created on the right thread.
|
||||
running_ = true;
|
||||
thread_ = xe_thread_create(
|
||||
"GraphicsSystem",
|
||||
(xe_thread_callback)ThreadStartThunk, this);
|
||||
xe_thread_start(thread_);
|
||||
}
|
||||
|
||||
GraphicsSystem::~GraphicsSystem() {
|
||||
@@ -57,16 +46,31 @@ GraphicsSystem::~GraphicsSystem() {
|
||||
xe_memory_release(memory_);
|
||||
}
|
||||
|
||||
xe_memory_ref GraphicsSystem::memory() {
|
||||
return xe_memory_retain(memory_);
|
||||
}
|
||||
X_STATUS GraphicsSystem::Setup() {
|
||||
processor_ = emulator_->processor();
|
||||
|
||||
shared_ptr<cpu::Processor> GraphicsSystem::processor() {
|
||||
return processor_;
|
||||
}
|
||||
// Create worker.
|
||||
worker_ = new RingBufferWorker(this, memory_);
|
||||
|
||||
void GraphicsSystem::set_processor(shared_ptr<cpu::Processor> processor) {
|
||||
processor_ = processor;
|
||||
// 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);
|
||||
|
||||
// Create worker thread.
|
||||
// This will initialize the graphics system.
|
||||
// Init needs to happen there so that any thread-local stuff
|
||||
// is created on the right thread.
|
||||
running_ = true;
|
||||
thread_ = xe_thread_create(
|
||||
"GraphicsSystem",
|
||||
(xe_thread_callback)ThreadStartThunk, this);
|
||||
xe_thread_start(thread_);
|
||||
|
||||
return X_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void GraphicsSystem::ThreadStart() {
|
||||
@@ -128,7 +132,12 @@ void GraphicsSystem::EnableReadPointerWriteBack(uint32_t ptr,
|
||||
worker_->EnableReadPointerWriteBack(ptr, block_size);
|
||||
}
|
||||
|
||||
uint64_t GraphicsSystem::ReadRegister(uint32_t r) {
|
||||
bool GraphicsSystem::HandlesRegister(uint32_t addr) {
|
||||
return (addr & 0xFFFF0000) == 0x7FC80000;
|
||||
}
|
||||
|
||||
uint64_t GraphicsSystem::ReadRegister(uint32_t addr) {
|
||||
uint32_t r = addr & 0xFFFF;
|
||||
XELOGGPU("ReadRegister(%.4X)", r);
|
||||
|
||||
RegisterFile* regs = driver_->register_file();
|
||||
@@ -142,7 +151,8 @@ uint64_t GraphicsSystem::ReadRegister(uint32_t r) {
|
||||
return regs->values[r].u32;
|
||||
}
|
||||
|
||||
void GraphicsSystem::WriteRegister(uint32_t r, uint64_t value) {
|
||||
void GraphicsSystem::WriteRegister(uint32_t addr, uint64_t value) {
|
||||
uint32_t r = addr & 0xFFFF;
|
||||
XELOGGPU("WriteRegister(%.4X, %.8X)", r, value);
|
||||
|
||||
RegisterFile* regs = driver_->register_file();
|
||||
|
||||
@@ -11,13 +11,11 @@
|
||||
#define XENIA_GPU_GRAPHICS_SYSTEM_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
#include <xenia/xbox.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace cpu {
|
||||
class Processor;
|
||||
} // namespace cpu
|
||||
} // namespace xe
|
||||
XEDECLARECLASS1(xe, Emulator);
|
||||
XEDECLARECLASS2(xe, cpu, Processor);
|
||||
|
||||
|
||||
namespace xe {
|
||||
@@ -27,47 +25,29 @@ class GraphicsDriver;
|
||||
class RingBufferWorker;
|
||||
|
||||
|
||||
class CreationParams {
|
||||
public:
|
||||
xe_memory_ref memory;
|
||||
|
||||
CreationParams() :
|
||||
memory(0) {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class GraphicsSystem {
|
||||
public:
|
||||
virtual ~GraphicsSystem();
|
||||
|
||||
xe_memory_ref memory();
|
||||
shared_ptr<cpu::Processor> processor();
|
||||
void set_processor(shared_ptr<cpu::Processor> processor);
|
||||
Emulator* emulator() const { return emulator_; }
|
||||
xe_memory_ref memory() const { return memory_; }
|
||||
cpu::Processor* processor() const { return processor_; }
|
||||
|
||||
virtual X_STATUS Setup();
|
||||
|
||||
void SetInterruptCallback(uint32_t callback, uint32_t user_data);
|
||||
void InitializeRingBuffer(uint32_t ptr, uint32_t page_count);
|
||||
void EnableReadPointerWriteBack(uint32_t ptr, uint32_t block_size);
|
||||
|
||||
virtual uint64_t ReadRegister(uint32_t r);
|
||||
virtual void WriteRegister(uint32_t r, uint64_t value);
|
||||
bool HandlesRegister(uint32_t addr);
|
||||
virtual uint64_t ReadRegister(uint32_t addr);
|
||||
virtual void WriteRegister(uint32_t addr, uint64_t value);
|
||||
|
||||
void MarkVblank();
|
||||
void DispatchInterruptCallback(uint32_t source, uint32_t cpu = 0xFFFFFFFF);
|
||||
bool swap_pending() const { return swap_pending_; }
|
||||
void set_swap_pending(bool value) { swap_pending_ = value; }
|
||||
|
||||
public:
|
||||
// TODO(benvanik): have an HasRegisterHandler() so that the JIT can
|
||||
// just poke the register file directly.
|
||||
static uint64_t ReadRegisterThunk(GraphicsSystem* this_ptr, uint32_t r) {
|
||||
return this_ptr->ReadRegister(r);
|
||||
}
|
||||
static void WriteRegisterThunk(GraphicsSystem* this_ptr, uint32_t r,
|
||||
uint64_t value) {
|
||||
this_ptr->WriteRegister(r, value);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void Initialize();
|
||||
virtual void Pump() = 0;
|
||||
@@ -79,12 +59,24 @@ private:
|
||||
}
|
||||
void ThreadStart();
|
||||
|
||||
protected:
|
||||
GraphicsSystem(const CreationParams* params);
|
||||
static bool HandlesRegisterThunk(GraphicsSystem* gs, uint32_t addr) {
|
||||
return gs->HandlesRegister(addr);
|
||||
}
|
||||
static uint64_t ReadRegisterThunk(GraphicsSystem* gs, uint32_t addr) {
|
||||
return gs->ReadRegister(addr);
|
||||
}
|
||||
static void WriteRegisterThunk(GraphicsSystem* gs, uint32_t addr,
|
||||
uint64_t value) {
|
||||
gs->WriteRegister(addr, value);
|
||||
}
|
||||
|
||||
protected:
|
||||
GraphicsSystem(Emulator* emulator);
|
||||
|
||||
Emulator* emulator_;
|
||||
xe_memory_ref memory_;
|
||||
shared_ptr<cpu::Processor> processor_;
|
||||
|
||||
cpu::Processor* processor_;
|
||||
|
||||
xe_run_loop_ref run_loop_;
|
||||
xe_thread_ref thread_;
|
||||
bool running_;
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_NOP_NOP_PRIVATE_H_
|
||||
#define XENIA_GPU_NOP_NOP_PRIVATE_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/gpu/nop/nop.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
namespace nop {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace nop
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_GPU_NOP_NOP_PRIVATE_H_
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_NOP_NOP_GPU_PRIVATE_H_
|
||||
#define XENIA_GPU_NOP_NOP_GPU_PRIVATE_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/gpu/nop/nop_gpu.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
namespace nop {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace nop
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_GPU_NOP_NOP_PRIVATE_H_
|
||||
@@ -1,44 +1,44 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/gpu/nop/nop.h>
|
||||
|
||||
#include <xenia/gpu/nop/nop_graphics_system.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::gpu;
|
||||
using namespace xe::gpu::nop;
|
||||
|
||||
|
||||
namespace {
|
||||
void InitializeIfNeeded();
|
||||
void CleanupOnShutdown();
|
||||
|
||||
void InitializeIfNeeded() {
|
||||
static bool has_initialized = false;
|
||||
if (has_initialized) {
|
||||
return;
|
||||
}
|
||||
has_initialized = true;
|
||||
|
||||
//
|
||||
|
||||
atexit(CleanupOnShutdown);
|
||||
}
|
||||
|
||||
void CleanupOnShutdown() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GraphicsSystem* xe::gpu::nop::Create(const CreationParams* params) {
|
||||
InitializeIfNeeded();
|
||||
return new NopGraphicsSystem(params);
|
||||
}
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/gpu/nop/nop_gpu.h>
|
||||
|
||||
#include <xenia/gpu/nop/nop_graphics_system.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::gpu;
|
||||
using namespace xe::gpu::nop;
|
||||
|
||||
|
||||
namespace {
|
||||
void InitializeIfNeeded();
|
||||
void CleanupOnShutdown();
|
||||
|
||||
void InitializeIfNeeded() {
|
||||
static bool has_initialized = false;
|
||||
if (has_initialized) {
|
||||
return;
|
||||
}
|
||||
has_initialized = true;
|
||||
|
||||
//
|
||||
|
||||
atexit(CleanupOnShutdown);
|
||||
}
|
||||
|
||||
void CleanupOnShutdown() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GraphicsSystem* xe::gpu::nop::Create(Emulator* emulator) {
|
||||
InitializeIfNeeded();
|
||||
return new NopGraphicsSystem(emulator);
|
||||
}
|
||||
@@ -1,33 +1,33 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_NOP_NOP_H_
|
||||
#define XENIA_GPU_NOP_NOP_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
|
||||
class CreationParams;
|
||||
class GraphicsSystem;
|
||||
|
||||
namespace nop {
|
||||
|
||||
|
||||
GraphicsSystem* Create(const CreationParams* params);
|
||||
|
||||
|
||||
} // namespace nop
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_GPU_NOP_NOP_H_
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_NOP_NOP_GPU_H_
|
||||
#define XENIA_GPU_NOP_NOP_GPU_H_
|
||||
|
||||
#include <xenia/core.h>
|
||||
|
||||
|
||||
XEDECLARECLASS1(xe, Emulator);
|
||||
XEDECLARECLASS2(xe, gpu, GraphicsSystem);
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
namespace nop {
|
||||
|
||||
|
||||
GraphicsSystem* Create(Emulator* emulator);
|
||||
|
||||
|
||||
} // namespace nop
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_GPU_NOP_NOP_GPU_H_
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/gpu/graphics_driver.h>
|
||||
#include <xenia/gpu/nop/nop-private.h>
|
||||
#include <xenia/gpu/nop/nop_gpu-private.h>
|
||||
#include <xenia/gpu/xenos/xenos.h>
|
||||
|
||||
|
||||
|
||||
@@ -28,8 +28,8 @@ void __stdcall NopGraphicsSystemVsyncCallback(NopGraphicsSystem* gs, BOOLEAN) {
|
||||
}
|
||||
|
||||
|
||||
NopGraphicsSystem::NopGraphicsSystem(const CreationParams* params) :
|
||||
GraphicsSystem(params),
|
||||
NopGraphicsSystem::NopGraphicsSystem(Emulator* emulator) :
|
||||
GraphicsSystem(emulator),
|
||||
timer_queue_(NULL),
|
||||
vsync_timer_(NULL) {
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/gpu/graphics_system.h>
|
||||
#include <xenia/gpu/nop/nop-private.h>
|
||||
#include <xenia/gpu/nop/nop_gpu-private.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
@@ -23,7 +23,7 @@ namespace nop {
|
||||
|
||||
class NopGraphicsSystem : public GraphicsSystem {
|
||||
public:
|
||||
NopGraphicsSystem(const CreationParams* params);
|
||||
NopGraphicsSystem(Emulator* emulator);
|
||||
virtual ~NopGraphicsSystem();
|
||||
|
||||
protected:
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Copyright 2013 Ben Vanik. All Rights Reserved.
|
||||
{
|
||||
'sources': [
|
||||
'nop-private.h',
|
||||
'nop.cc',
|
||||
'nop.h',
|
||||
'nop_gpu-private.h',
|
||||
'nop_gpu.cc',
|
||||
'nop_gpu.h',
|
||||
'nop_graphics_driver.cc',
|
||||
'nop_graphics_driver.h',
|
||||
'nop_graphics_system.cc',
|
||||
|
||||
@@ -570,7 +570,7 @@ uint32_t RingBufferWorker::ExecutePacket(PacketArgs& args) {
|
||||
switch (type) {
|
||||
case 0x4: // REGISTER
|
||||
index += 0x2000;
|
||||
for (int n = 0; n < count - 1; n++, index++) {
|
||||
for (uint32_t n = 0; n < count - 1; n++, index++) {
|
||||
uint32_t data = READ_PTR();
|
||||
const char* reg_name = xenos::GetRegisterName(index);
|
||||
XELOGGPU("[%.8X] %.8X -> %.4X %s",
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
'register_table.inc',
|
||||
'registers.cc',
|
||||
'registers.h',
|
||||
'ucode.cc',
|
||||
'ucode.h',
|
||||
'ucode_disassembler.cc',
|
||||
'ucode_disassembler.h',
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/gpu/xenos/ucode.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::gpu;
|
||||
using namespace xe::gpu::xenos;
|
||||
Reference in New Issue
Block a user