NW4F Eft
Loading...
Searching...
No Matches
eft_TemporaryBuffer.h
Go to the documentation of this file.
1#ifndef EFT_TEMPORARY_BUFFER_H_
2#define EFT_TEMPORARY_BUFFER_H_
3
4#include <nw/eft/eft_typeDef.h>
5#include <nw/eft/eft_Heap.h>
6
7namespace nw { namespace eft {
8
10{
11public:
18
19 enum
20 {
22 };
23
24 void Initialize(Heap* heap, u32 size)
25 {
26 mBufferSide = EFT_TEMPORARY_BUFFER_FIRST;
27 mBufferSize = size;
28 mAllocedSize = 0;
29 mFlushedSize = 0;
30 mBuffer[EFT_TEMPORARY_BUFFER_FIRST] = heap->Alloc(mBufferSize, EFT_DOUBLE_BUFFER_ALIGN);
31 mBuffer[EFT_TEMPORARY_BUFFER_SECOND] = heap->Alloc(mBufferSize, EFT_DOUBLE_BUFFER_ALIGN);
32 }
33
39
40 void Swap()
41 {
42 mBufferSide = !mBufferSide;
43 mAllocedSize = 0;
44 mFlushedSize = 0;
45 }
46
47 void* Alloc(u32 size)
48 {
49 if (size == 0)
50 return NULL;
51
52 //u32 allocSize = nw::ut::RoundUp(size, EFT_DOUBLE_BUFFER_ALIGN);
53 u32 allocSize = (size & ~(EFT_DOUBLE_BUFFER_ALIGN - 1)) + EFT_DOUBLE_BUFFER_ALIGN;
54 if (mAllocedSize + allocSize > mBufferSize)
55 return NULL;
56
57 u8* ret = static_cast<u8*>(mBuffer[mBufferSide]) + mAllocedSize;
58 mAllocedSize += allocSize;
59
60 for (u32 i = 0; i < allocSize >> 8; i++)
61 {
62 u32 block0 = i * 0x100 + 0x00;
63 u32 block1 = i * 0x100 + 0x20;
64 u32 block2 = i * 0x100 + 0x40;
65 u32 block3 = i * 0x100 + 0x60;
66 u32 block4 = i * 0x100 + 0x80;
67 u32 block5 = i * 0x100 + 0xA0;
68 u32 block6 = i * 0x100 + 0xC0;
69 u32 block7 = i * 0x100 + 0xE0;
70
79 }
80
81 return ret;
82 }
83
84 u32 GetSize() const { return mBufferSize; }
85 u32 GetUsedSize() const { return mAllocedSize; }
86
88 {
89 if (mFlushedSize != mAllocedSize)
90 {
91 DCFlushRange(static_cast<u8*>(mBuffer[mBufferSide]) + mFlushedSize, mAllocedSize - mFlushedSize);
92 mFlushedSize = mAllocedSize;
93 }
94 }
95
96private:
102};
103static_assert(sizeof(TemporaryBuffer) == 0x18, "nw::eft::TemporaryBuffer size mismatch");
104
105} } // namespace nw::eft
106
107#endif // EFT_TEMPORARY_BUFFER_H_
Definition eft_Heap.h:9
virtual void Free(void *ptr)=0
#define EFT_MEMUTIL_CAFE_DCBZ_OFFSET(addr, offset)
Definition eft_typeDef.h:9
Definition eft_CafeWrapper.cpp:117
Definition eft_TemporaryBuffer.h:10
void Finalize(Heap *heap)
Definition eft_TemporaryBuffer.h:34
BufferSide
Definition eft_TemporaryBuffer.h:13
@ EFT_TEMPORARY_BUFFER_SECOND
Definition eft_TemporaryBuffer.h:15
@ EFT_TEMPORARY_BUFFER_FIRST
Definition eft_TemporaryBuffer.h:14
@ EFT_TEMPORARY_BUFFER_MAX
Definition eft_TemporaryBuffer.h:16
void * mBuffer[EFT_TEMPORARY_BUFFER_MAX]
Definition eft_TemporaryBuffer.h:101
u32 GetSize() const
Definition eft_TemporaryBuffer.h:84
void Swap()
Definition eft_TemporaryBuffer.h:40
u32 mBufferSize
Definition eft_TemporaryBuffer.h:98
u32 mAllocedSize
Definition eft_TemporaryBuffer.h:99
@ EFT_DOUBLE_BUFFER_ALIGN
Definition eft_TemporaryBuffer.h:21
u32 mFlushedSize
Definition eft_TemporaryBuffer.h:100
void FlushCache()
Definition eft_TemporaryBuffer.h:87
u32 GetUsedSize() const
Definition eft_TemporaryBuffer.h:85
u32 mBufferSide
Definition eft_TemporaryBuffer.h:97
void * Alloc(u32 size)
Definition eft_TemporaryBuffer.h:47
void Initialize(Heap *heap, u32 size)
Definition eft_TemporaryBuffer.h:24