[Scummvm-cvs-logs] SF.net SVN: scummvm:[52815] scummvm/trunk/backends/platform/psp

Bluddy at users.sourceforge.net Bluddy at users.sourceforge.net
Mon Sep 20 16:05:33 CEST 2010


Revision: 52815
          http://scummvm.svn.sourceforge.net/scummvm/?rev=52815&view=rev
Author:   Bluddy
Date:     2010-09-20 14:05:32 +0000 (Mon, 20 Sep 2010)

Log Message:
-----------
PSP: moved VramAllocator to display_manager.cpp.

It didn't really belong in memory.cpp and we're going to want to include memory.h everywhere.
* * *
PSP: more Vram Allocator cleanup

Modified Paths:
--------------
    scummvm/trunk/backends/platform/psp/display_manager.cpp
    scummvm/trunk/backends/platform/psp/display_manager.h
    scummvm/trunk/backends/platform/psp/memory.cpp
    scummvm/trunk/backends/platform/psp/memory.h

Modified: scummvm/trunk/backends/platform/psp/display_manager.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/display_manager.cpp	2010-09-20 00:02:34 UTC (rev 52814)
+++ scummvm/trunk/backends/platform/psp/display_manager.cpp	2010-09-20 14:05:32 UTC (rev 52815)
@@ -59,6 +59,71 @@
 	{0, 0, 0}
 };
 
+
+// Class VramAllocator -----------------------------------
+
+DECLARE_SINGLETON(VramAllocator)
+
+//#define __PSP_DEBUG_FUNCS__	/* For debugging the stack */
+//#define __PSP_DEBUG_PRINT__
+
+#include "backends/platform/psp/trace.h"
+
+
+void *VramAllocator::allocate(int32 size, bool smallAllocation /* = false */) {
+	DEBUG_ENTER_FUNC();
+	assert(size > 0);
+
+	byte *lastAddress = smallAllocation ? (byte *)VRAM_SMALL_ADDRESS : (byte *)VRAM_START_ADDRESS;
+	Common::List<Allocation>::iterator i;
+
+	// Find a block that fits, starting from the beginning
+	for (i = _allocList.begin(); i != _allocList.end(); ++i) {
+		byte *currAddress = (*i).address;
+
+		if (currAddress - lastAddress >= size) // We found a match
+			break;
+
+		if ((*i).getEnd() > lastAddress)
+			lastAddress = (byte *)(*i).getEnd();
+	}
+
+	if (lastAddress + size > (byte *)VRAM_END_ADDRESS) {
+		PSP_DEBUG_PRINT("No space for allocation of %d bytes. %d bytes already allocated.\n",
+		                size, _bytesAllocated);
+		return NULL;
+	}
+
+	_allocList.insert(i, Allocation(lastAddress, size));
+	_bytesAllocated += size;
+
+	PSP_DEBUG_PRINT("Allocated in VRAM, size %u at %p.\n", size, lastAddress);
+	PSP_DEBUG_PRINT("Total allocated %u, remaining %u.\n", _bytesAllocated, (2 * 1024 * 1024) - _bytesAllocated);
+
+	return lastAddress;
+}
+
+// Deallocate a block from VRAM
+void VramAllocator::deallocate(void *address) {
+	DEBUG_ENTER_FUNC();
+	address = (byte *)CACHED(address);	// Make sure all addresses are the same
+
+	Common::List<Allocation>::iterator i;
+
+	// Find the Allocator to deallocate
+	for (i = _allocList.begin(); i != _allocList.end(); ++i) {
+		if ((*i).address == address) {
+			_bytesAllocated -= (*i).size;
+			_allocList.erase(i);
+			PSP_DEBUG_PRINT("Deallocated address[%p], size[%u]\n", (*i).address, (*i).size);
+			return;
+		}
+	}
+
+	PSP_DEBUG_PRINT("Address[%p] not allocated.\n", address);
+}
+
+
 // Class MasterGuRenderer ----------------------------------------------
 
 void MasterGuRenderer::setupCallbackThread() {

Modified: scummvm/trunk/backends/platform/psp/display_manager.h
===================================================================
--- scummvm/trunk/backends/platform/psp/display_manager.h	2010-09-20 00:02:34 UTC (rev 52814)
+++ scummvm/trunk/backends/platform/psp/display_manager.h	2010-09-20 14:05:32 UTC (rev 52815)
@@ -27,8 +27,50 @@
 #define PSP_DISPLAY_MAN_H
 
 #include "backends/platform/psp/thread.h"
+#include "common/list.h"
 
+#define UNCACHED(x)		((byte *)(((uint32)(x)) | 0x40000000))	/* make an uncached access */
+#define CACHED(x)		((byte *)(((uint32)(x)) & 0xBFFFFFFF))	/* make an uncached access into a cached one */
+
 /**
+ *	Class that allocates memory in the VRAM
+ */
+class VramAllocator : public Common::Singleton<VramAllocator> {
+public:
+	VramAllocator() : _bytesAllocated(0) {}
+	void *allocate(int32 size, bool smallAllocation = false);	// smallAllocation e.g. palettes
+	void deallocate(void *pointer);
+
+	static inline bool isAddressInVram(void *address) {
+		if ((uint32)(CACHED(address)) >= VRAM_START_ADDRESS && (uint32)(CACHED(address)) < VRAM_END_ADDRESS)
+			return true;
+		return false;
+	}
+
+
+private:
+	/**
+	 *	Used to allocate in VRAM
+	 */
+	struct Allocation {
+		byte *address;
+		uint32 size;
+		void *getEnd() { return address + size; }
+		Allocation(void *Address, uint32 Size) : address((byte *)Address), size(Size) {}
+		Allocation() : address(0), size(0) {}
+	};
+
+	enum {
+		VRAM_START_ADDRESS = 0x04000000,
+		VRAM_END_ADDRESS   = 0x04200000,
+		VRAM_SMALL_ADDRESS = VRAM_END_ADDRESS - (4 * 1024)	// 4K in the end for small allocations
+	};
+	Common::List <Allocation> _allocList;		// List of allocations
+	uint32 _bytesAllocated;
+};
+
+
+/**
  *	Class used only by DisplayManager to start/stop GU rendering
  */
 class MasterGuRenderer : public PspThreadable {

Modified: scummvm/trunk/backends/platform/psp/memory.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/memory.cpp	2010-09-20 00:02:34 UTC (rev 52814)
+++ scummvm/trunk/backends/platform/psp/memory.cpp	2010-09-20 14:05:32 UTC (rev 52815)
@@ -25,7 +25,6 @@
 
 #include "common/scummsys.h"
 #include "common/singleton.h"
-#include "common/list.h"
 #include "backends/platform/psp/psppixelformat.h"
 #include "backends/platform/psp/memory.h"
 
@@ -424,79 +423,3 @@
 		*((uint16 *)dst32) = format.swapRedBlue16((uint16)(srcWord >> shiftValue));
 	}
 }
-
-inline void PspMemory::copy16(uint16 *dst16, const uint16 *src16, uint32 bytes) {
-	PSP_DEBUG_PRINT("copy16(): dst16[%p], src16[%p], bytes[%d]\n", dst16, src16, bytes);
-	
-	uint32 shorts = bytes >> 1;
-	uint32 remainingBytes = bytes & 1;
-
-	for (; shorts > 0 ; shorts--) {
-		*dst16++ = *src16++;
-	}
-	if (remainingBytes)
-		*(byte *)dst16 = *(byte *)src16;
-}
-
-// Class VramAllocator -----------------------------------
-
-DECLARE_SINGLETON(VramAllocator)
-
-//#define __PSP_DEBUG_FUNCS__	/* For debugging the stack */
-//#define __PSP_DEBUG_PRINT__
-
-#include "backends/platform/psp/trace.h"
-
-
-void *VramAllocator::allocate(int32 size, bool smallAllocation /* = false */) {
-	DEBUG_ENTER_FUNC();
-	assert(size > 0);
-
-	byte *lastAddress = smallAllocation ? (byte *)VRAM_SMALL_ADDRESS : (byte *)VRAM_START_ADDRESS;
-	Common::List<Allocation>::iterator i;
-
-	// Find a block that fits, starting from the beginning
-	for (i = _allocList.begin(); i != _allocList.end(); ++i) {
-		byte *currAddress = (*i).address;
-
-		if (currAddress - lastAddress >= size) // We found a match
-			break;
-
-		if ((*i).getEnd() > lastAddress)
-			lastAddress = (byte *)(*i).getEnd();
-	}
-
-	if (lastAddress + size > (byte *)VRAM_END_ADDRESS) {
-		PSP_DEBUG_PRINT("No space for allocation of %d bytes. %d bytes already allocated.\n",
-		                size, _bytesAllocated);
-		return NULL;
-	}
-
-	_allocList.insert(i, Allocation(lastAddress, size));
-	_bytesAllocated += size;
-
-	PSP_DEBUG_PRINT("Allocated in VRAM, size %u at %p.\n", size, lastAddress);
-	PSP_DEBUG_PRINT("Total allocated %u, remaining %u.\n", _bytesAllocated, (2 * 1024 * 1024) - _bytesAllocated);
-
-	return lastAddress;
-}
-
-// Deallocate a block from VRAM
-void VramAllocator::deallocate(void *address) {
-	DEBUG_ENTER_FUNC();
-	address = (byte *)CACHED(address);	// Make sure all addresses are the same
-
-	Common::List<Allocation>::iterator i;
-
-	// Find the Allocator to deallocate
-	for (i = _allocList.begin(); i != _allocList.end(); ++i) {
-		if ((*i).address == address) {
-			_bytesAllocated -= (*i).size;
-			_allocList.erase(i);
-			PSP_DEBUG_PRINT("Deallocated address[%p], size[%u]\n", (*i).address, (*i).size);
-			return;
-		}
-	}
-
-	PSP_DEBUG_PRINT("Address[%p] not allocated.\n", address);
-}

Modified: scummvm/trunk/backends/platform/psp/memory.h
===================================================================
--- scummvm/trunk/backends/platform/psp/memory.h	2010-09-20 00:02:34 UTC (rev 52814)
+++ scummvm/trunk/backends/platform/psp/memory.h	2010-09-20 14:05:32 UTC (rev 52815)
@@ -27,12 +27,6 @@
 #ifndef PSP_MEMORY_H
 #define PSP_MEMORY_H
 
-#include "backends/platform/psp/psppixelformat.h"
-#include "common/list.h"
-
-#define UNCACHED(x)		((byte *)(((uint32)(x)) | 0x40000000))	/* make an uncached access */
-#define CACHED(x)		((byte *)(((uint32)(x)) & 0xBFFFFFFF))	/* make an uncached access into a cached one */
-
 #define MIN_AMOUNT_FOR_COMPLEX_COPY  8
 #define MIN_AMOUNT_FOR_MISALIGNED_COPY 8
 
@@ -91,41 +85,6 @@
 	}
 };
 
-/**
- *	Class that allocates memory in the VRAM
- */
-class VramAllocator : public Common::Singleton<VramAllocator> {
-public:
-	VramAllocator() : _bytesAllocated(0) {}
-	void *allocate(int32 size, bool smallAllocation = false);	// smallAllocation e.g. palettes
-	void deallocate(void *pointer);
+#endif /* PSP_MEMORY_H */
 
-	static inline bool isAddressInVram(void *address) {
-		if ((uint32)(CACHED(address)) >= VRAM_START_ADDRESS && (uint32)(CACHED(address)) < VRAM_END_ADDRESS)
-			return true;
-		return false;
-	}
 
-
-private:
-	/**
-	 *	Used to allocate in VRAM
-	 */
-	struct Allocation {
-		byte *address;
-		uint32 size;
-		void *getEnd() { return address + size; }
-		Allocation(void *Address, uint32 Size) : address((byte *)Address), size(Size) {}
-		Allocation() : address(0), size(0) {}
-	};
-
-	enum {
-		VRAM_START_ADDRESS = 0x04000000,
-		VRAM_END_ADDRESS   = 0x04200000,
-		VRAM_SMALL_ADDRESS = VRAM_END_ADDRESS - (4 * 1024)	// 4K in the end for small allocations
-	};
-	Common::List <Allocation> _allocList;		// List of allocations
-	uint32 _bytesAllocated;
-};
-
-#endif /* PSP_MEMORY_H */


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list