Fixing wraparound.

This still needs a tremendous amount of cleanup.
This commit is contained in:
Ben Vanik
2013-10-13 21:18:23 -07:00
parent 4887234bba
commit 2eed0b1575
2 changed files with 334 additions and 273 deletions

View File

@@ -35,8 +35,17 @@ public:
void Pump();
protected:
void ExecuteSegment(uint32_t ptr, uint32_t length);
private:
typedef struct {
uint32_t ptr;
uint32_t base_ptr;
uint32_t max_address;
uint32_t ptr_mask;
} PacketArgs;
void AdvancePtr(PacketArgs& args, uint32_t n);
void ExecutePrimaryBuffer(uint32_t start_index, uint32_t end_index);
void ExecuteIndirectBuffer(uint32_t ptr, uint32_t length);
uint32_t ExecutePacket(PacketArgs& args);
protected:
xe_memory_ref memory_;
@@ -52,6 +61,7 @@ protected:
HANDLE write_ptr_index_event_;
volatile uint32_t write_ptr_index_;
volatile uint32_t write_ptr_max_index_;
};