Dreamcast Changes

This commit is contained in:
The Gang
2024-12-26 11:10:17 +02:00
committed by Stefanos Kornilios Mitsis Poiitidis
parent 310dd86371
commit 29550ea045
555 changed files with 206934 additions and 1507 deletions

View File

@@ -85,6 +85,10 @@ int32 islandLODcomSub;
int32 islandLODsubInd;
int32 islandLODsubCom;
#define memory_logf(...) // printf(__VA_ARGS__)
#define STREAMING_MEM_SIZE (4 * 1024 * 1024)
bool
CStreamingInfo::GetCdPosnAndSize(uint32 &posn, uint32 &size)
{
@@ -203,11 +207,11 @@ CStreaming::Init2(void)
// allocate streaming buffers
if(ms_streamingBufferSize & 1) ms_streamingBufferSize++;
#ifndef ONE_THREAD_PER_CHANNEL
ms_pStreamingBuffer[0] = (int8*)RwMallocAlign(ms_streamingBufferSize*CDSTREAM_SECTOR_SIZE, CDSTREAM_SECTOR_SIZE);
ms_pStreamingBuffer[0] = (int8*)RwMallocAlign(ms_streamingBufferSize*CDSTREAM_SECTOR_SIZE, 32);
ms_streamingBufferSize /= 2;
ms_pStreamingBuffer[1] = ms_pStreamingBuffer[0] + ms_streamingBufferSize*CDSTREAM_SECTOR_SIZE;
#else
ms_pStreamingBuffer[0] = (int8*)RwMallocAlign(ms_streamingBufferSize*2*CDSTREAM_SECTOR_SIZE, CDSTREAM_SECTOR_SIZE);
ms_pStreamingBuffer[0] = (int8*)RwMallocAlign(ms_streamingBufferSize*2*CDSTREAM_SECTOR_SIZE, 32);
ms_streamingBufferSize /= 2;
ms_pStreamingBuffer[1] = ms_pStreamingBuffer[0] + ms_streamingBufferSize*CDSTREAM_SECTOR_SIZE;
ms_pStreamingBuffer[2] = ms_pStreamingBuffer[1] + ms_streamingBufferSize*CDSTREAM_SECTOR_SIZE;
@@ -217,17 +221,11 @@ CStreaming::Init2(void)
// PC only, figure out how much memory we got
#ifdef GTA_PC
#define MB (1024*1024)
extern size_t _dwMemAvailPhys;
ms_memoryAvailable = (_dwMemAvailPhys - 10*MB)/2;
if(ms_memoryAvailable < 50*MB)
ms_memoryAvailable = 50*MB;
desiredNumVehiclesLoaded = (int32)((ms_memoryAvailable / MB - 50) / 3 + 12);
ms_memoryAvailable = STREAMING_MEM_SIZE;
desiredNumVehiclesLoaded = 12; //(int32)((ms_memoryAvailable / MB /*- 50*/) / 3 + 12);
if(desiredNumVehiclesLoaded > MAXVEHICLESLOADED)
desiredNumVehiclesLoaded = MAXVEHICLESLOADED;
debug("Memory allocated to Streaming is %zuMB", ms_memoryAvailable/MB); // original modifier was %d
#undef MB
debug("Memory allocated to Streaming is %.2fMB", ms_memoryAvailable/1024.f/1024.f);
#endif
// find island LODs
@@ -372,17 +370,9 @@ CStreaming::LoadCdDirectory(void)
#ifdef GTA_PC
ms_imageOffsets[0] = 0;
ms_imageOffsets[1] = -1;
ms_imageOffsets[2] = -1;
ms_imageOffsets[3] = -1;
ms_imageOffsets[4] = -1;
ms_imageOffsets[5] = -1;
ms_imageOffsets[6] = -1;
ms_imageOffsets[7] = -1;
ms_imageOffsets[8] = -1;
ms_imageOffsets[9] = -1;
ms_imageOffsets[10] = -1;
ms_imageOffsets[11] = -1;
for(i = 1; i < NUMCDIMAGES; ++i) {
ms_imageOffsets[i] = -1;
}
ms_imageSize = GetGTA3ImgSize();
// PS2 uses CFileMgr::GetCdFile on all IMG files to fill the array
#endif
@@ -390,7 +380,7 @@ CStreaming::LoadCdDirectory(void)
i = CdStreamGetNumImages();
while(i-- >= 1){
strcpy(dirname, CdStreamGetImageName(i));
strncpy(strrchr(dirname, '.') + 1, "DIR", 3);
strncpy(strrchr(dirname, '.') + 1, "DIR", 4);
LoadCdDirectory(dirname, i);
}
@@ -399,10 +389,10 @@ CStreaming::LoadCdDirectory(void)
}
void
CStreaming::LoadCdDirectory(const char *dirname, int n)
CStreaming::LoadCdDirectory(const char *dirname, int32 n)
{
int fd, lastID, imgSelector;
int modelId, txdId;
int32 modelId, txdId;
uint32 posn, size;
CDirectory::DirectoryInfo direntry;
char *dot;
@@ -635,7 +625,11 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
if(ms_aInfoForModel[streamId].m_loadState != STREAMSTATE_STARTED){
ms_aInfoForModel[streamId].m_loadState = STREAMSTATE_LOADED;
#ifndef USE_CUSTOM_ALLOCATOR
ms_memoryUsed += ms_aInfoForModel[streamId].GetCdSize() * CDSTREAM_SECTOR_SIZE;
// Don't count textures here
if(streamId < STREAM_OFFSET_TXD) {
ms_memoryUsed += ms_aInfoForModel[streamId].GetCdSize() * CDSTREAM_SECTOR_SIZE;
memory_logf("ConvertBufferToObject: Memory used: %d\n", ms_memoryUsed);
}
#endif
}
@@ -701,7 +695,11 @@ CStreaming::FinishLoadingLargeFile(int8 *buf, int32 streamId)
ms_aInfoForModel[streamId].m_loadState = STREAMSTATE_LOADED; // only done if success on PS2
#ifndef USE_CUSTOM_ALLOCATOR
ms_memoryUsed += ms_aInfoForModel[streamId].GetCdSize() * CDSTREAM_SECTOR_SIZE;
// Don't count textures here
if(streamId < STREAM_OFFSET_TXD) {
ms_memoryUsed += ms_aInfoForModel[streamId].GetCdSize() * CDSTREAM_SECTOR_SIZE;
memory_logf("FinishLoadingLargeFile: Memory used: %d\n", ms_memoryUsed);
}
#endif
if(!success){
@@ -947,7 +945,10 @@ CStreaming::RemoveModel(int32 id)
#ifdef USE_CUSTOM_ALLOCATOR
UpdateMemoryUsed();
#else
ms_memoryUsed -= ms_aInfoForModel[id].GetCdSize()*CDSTREAM_SECTOR_SIZE;
if (id < STREAM_OFFSET_TXD) {
ms_memoryUsed -= ms_aInfoForModel[id].GetCdSize()*CDSTREAM_SECTOR_SIZE;
memory_logf("Remove Model: %d\n", ms_memoryUsed);
}
#endif
}
@@ -1159,6 +1160,10 @@ found:
return true;
}
bool re3RemoveLeastUsedModel() {
return CStreaming::RemoveLeastUsedModel();
}
bool
CStreaming::RemoveLeastUsedModel(void)
{
@@ -1207,8 +1212,9 @@ CStreaming::RemoveReferencedTxds(size_t mem)
CStreamingInfo *si;
int streamId;
for(si = ms_endLoadedList.m_prev; si != &ms_startLoadedList; si = si->m_prev){
for(si = ms_endLoadedList.m_prev; si != &ms_startLoadedList; ){
streamId = si - ms_aInfoForModel;
si = si->m_prev;
if(streamId >= STREAM_OFFSET_TXD &&
CTxdStore::GetNumRefs(streamId-STREAM_OFFSET_TXD) == 0){
RemoveModel(streamId);
@@ -1396,7 +1402,7 @@ CStreaming::LoadInitialPeds(void)
void
CStreaming::LoadInitialVehicles(void)
{
int id;
int32 id;
ms_numVehiclesLoaded = 0;
ms_lastVehicleDeleted = 0;
@@ -1410,7 +1416,7 @@ CStreaming::LoadInitialVehicles(void)
void
CStreaming::StreamVehiclesAndPeds(void)
{
int i, model;
int32 i, model;
static int timeBeforeNextLoad = 0;
static int modelQualityClass = 0;
@@ -2685,13 +2691,9 @@ void
CStreaming::MakeSpaceFor(int32 size)
{
#ifdef FIX_BUGS
#define MB (1024 * 1024)
if(ms_memoryAvailable == 0) {
extern size_t _dwMemAvailPhys;
ms_memoryAvailable = (_dwMemAvailPhys - 10 * MB) / 2;
if(ms_memoryAvailable < 50 * MB) ms_memoryAvailable = 50 * MB;
ms_memoryAvailable = STREAMING_MEM_SIZE;
}
#undef MB
#endif
while(ms_memoryUsed >= ms_memoryAvailable - size)
if(!RemoveLeastUsedModel()) {