diff --git a/src/Cafe/HW/Latte/Renderer/OpenGL/OpenGLRendererCore.cpp b/src/Cafe/HW/Latte/Renderer/OpenGL/OpenGLRendererCore.cpp index 94620cda..bcac9199 100644 --- a/src/Cafe/HW/Latte/Renderer/OpenGL/OpenGLRendererCore.cpp +++ b/src/Cafe/HW/Latte/Renderer/OpenGL/OpenGLRendererCore.cpp @@ -27,7 +27,7 @@ extern bool hasValidFramebufferAttached; void LatteDraw_resetAttributePointerCache() { - CommonRenderer_resetAttributePointerCache(); + RendererCore_resetAttributePointerCache(); } void _setAttributeBufferPointerRaw(uint32 attributeShaderLoc, uint8* buffer, uint32 bufferSize, uint32 stride, LatteParsedFetchShaderAttribute_t* attrib, uint8* vboOutput, uint32 vboStride) @@ -36,7 +36,7 @@ void _setAttributeBufferPointerRaw(uint32 attributeShaderLoc, uint8* buffer, uin bool isSigned = attrib->isSigned != 0; uint8 nfa = attrib->nfa; // don't call glVertexAttribIPointer if parameters have not changed - bool attributePointerChanged = CommonRenderer_checkIfAttributePointerCacheChanged(attributeShaderLoc, vboOutput, vboStride, dataFormat, nfa, isSigned); + bool attributePointerChanged = RendererCore_checkIfAttributePointerCacheChanged(attributeShaderLoc, vboOutput, vboStride, dataFormat, nfa, isSigned); if (!attributePointerChanged) { return; } @@ -139,7 +139,7 @@ void OpenGLRenderer::SetAttributeArrayState(uint32 index, bool isEnabled, sint32 // Sets the currently active element array buffer and binds it void OpenGLRenderer::SetArrayElementBuffer(GLuint arrayElementBuffer) { - indexState_t* indexState = CommonRenderer_getIndexState(); + indexState_t* indexState = RendererCore_getIndexState(); if (arrayElementBuffer == indexState->glActiveElementArrayBuffer) return; glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, arrayElementBuffer); @@ -150,7 +150,7 @@ void _decodeAndUploadIndexData(indexDataCacheEntry2_t* cacheEntry) { uint32 count = cacheEntry->key.count; uint32 primitiveRestartIndex = cacheEntry->key.primitiveRestartIndex; - indexState_t *indexState = CommonRenderer_getIndexState(); + indexState_t *indexState = RendererCore_getIndexState(); if (cacheEntry->indexType == _INDEX_TYPE::U16_BE) { // 16bit indices @@ -227,16 +227,16 @@ void _decodeAndUploadIndexData(indexDataCacheEntry2_t* cacheEntry) void LatteDrawGL_removeLeastRecentlyUsedIndexCacheEntries(sint32 count) { - indexState_t *indexState = CommonRenderer_getIndexState(); - indexDataCacheEntry2_t** indexDataCacheFirst = CommonRenderer_getIndexDataCacheFirst(); + indexState_t *indexState = RendererCore_getIndexState(); + indexDataCacheEntry2_t** indexDataCacheFirst = RendererCore_getIndexDataCacheFirst(); while (*indexDataCacheFirst && count > 0) { indexDataCacheEntry2_t* entry = *indexDataCacheFirst; // remove entry virtualBufferHeap_free(indexState->indexBufferVirtualHeap, entry->heapEntry); - CommonRenderer_removeFromUsageLinkedList(entry); - CommonRenderer_removeFromBucket(entry); + RendererCore_removeFromUsageLinkedList(entry); + RendererCore_removeFromBucket(entry); free(entry); count--; } @@ -274,8 +274,8 @@ uint32 LatteDrawGL_calculateIndexDataHash(uint8* data, uint32 size) // todo - Outdated cache implementation. Update OpenGL renderer to use the generic implementation that is also used by the Vulkan renderer void LatteDrawGL_prepareIndicesWithGPUCache(MPTR indexDataMPTR, _INDEX_TYPE indexType, sint32 count, sint32 primitiveMode) { - indexState_t* indexState = CommonRenderer_getIndexState(); - indexDataCacheEntry2_t** indexDataCacheFirst = CommonRenderer_getIndexDataCacheFirst(); + indexState_t* indexState = RendererCore_getIndexState(); + indexDataCacheEntry2_t** indexDataCacheFirst = RendererCore_getIndexDataCacheFirst(); if (indexType == _INDEX_TYPE::AUTO) { @@ -289,7 +289,7 @@ void LatteDrawGL_prepareIndicesWithGPUCache(MPTR indexDataMPTR, _INDEX_TYPE inde uint32 indexDataBucketIdx = (uint32)((indexDataMPTR + count) ^ (indexDataMPTR >> 16)) % INDEX_DATA_CACHE_BUCKETS; // find matching entry uint32 primitiveRestartIndex = LatteGPUState.contextNew.VGT_MULTI_PRIM_IB_RESET_INDX.get_RESTART_INDEX(); - indexDataCacheEntry2_t* cacheEntryItr = *CommonRenderer_getIndexDataCacheBucket(indexDataBucketIdx); + indexDataCacheEntry2_t* cacheEntryItr = *RendererCore_getIndexDataCacheBucket(indexDataBucketIdx); indexDataCacheKey_t compareKey; compareKey.physAddr = indexDataMPTR; compareKey.count = count; @@ -317,8 +317,8 @@ void LatteDrawGL_prepareIndicesWithGPUCache(MPTR indexDataMPTR, _INDEX_TYPE inde cacheEntryItr->hash = h; } // move entry to the front - CommonRenderer_removeFromUsageLinkedList(cacheEntryItr); - CommonRenderer_appendToUsageLinkedList(cacheEntryItr); + RendererCore_removeFromUsageLinkedList(cacheEntryItr); + RendererCore_appendToUsageLinkedList(cacheEntryItr); return; } // calculate size of index data in cache @@ -356,15 +356,15 @@ void LatteDrawGL_prepareIndicesWithGPUCache(MPTR indexDataMPTR, _INDEX_TYPE inde cacheEntry->heapEntry = heapEntry; cacheEntry->lastAccessFrameCount = LatteGPUState.frameCounter; // append entry in bucket list - indexDataCacheEntry2_t** bucket = CommonRenderer_getIndexDataCacheBucket(indexDataBucketIdx); + indexDataCacheEntry2_t** bucket = RendererCore_getIndexDataCacheBucket(indexDataBucketIdx); cacheEntry->nextInBucket = *bucket; *bucket = cacheEntry; // append as most recently used entry - CommonRenderer_appendToUsageLinkedList(cacheEntry); + RendererCore_appendToUsageLinkedList(cacheEntry); // decode and upload the data _decodeAndUploadIndexData(cacheEntry); - sint32* indexDataCacheEntryCount = CommonRenderer_getIndexDataCacheEntryCount(); + sint32* indexDataCacheEntryCount = RendererCore_getIndexDataCacheEntryCount(); (*indexDataCacheEntryCount)++; indexState->minIndex = cacheEntry->minIndex; indexState->maxIndex = cacheEntry->maxIndex; @@ -373,7 +373,7 @@ void LatteDrawGL_prepareIndicesWithGPUCache(MPTR indexDataMPTR, _INDEX_TYPE inde void LatteDrawGL_doDraw(_INDEX_TYPE indexType, uint32 baseVertex, uint32 baseInstance, uint32 instanceCount, uint32 count) { - indexState_t* indexState = CommonRenderer_getIndexState(); + indexState_t* indexState = RendererCore_getIndexState(); if (indexType == _INDEX_TYPE::U16_BE) { // 16bit index, big endian @@ -824,7 +824,7 @@ void OpenGLRenderer::draw_genericDrawHandler(uint32 baseVertex, uint32 baseInsta endPerfMonProfiling(performanceMonitor.gpuTime_dcStageIndexMgr); // synchronize vertex and uniform buffers - indexState_t *indexState = CommonRenderer_getIndexState(); + indexState_t *indexState = RendererCore_getIndexState(); LatteBufferCache_Sync(indexState->minIndex + baseVertex, indexState->maxIndex + baseVertex, baseInstance, instanceCount); _setupVertexAttributes(); @@ -1016,7 +1016,7 @@ void OpenGLRenderer::draw_endSequence() void OpenGLRenderer::draw_init() { - indexState_t* indexState = CommonRenderer_getIndexState(); + indexState_t* indexState = RendererCore_getIndexState(); if (indexState->initialized) return; indexState->initialized = true; diff --git a/src/Cafe/HW/Latte/Renderer/Common/CommonRendererCore.cpp b/src/Cafe/HW/Latte/Renderer/RendererCore.cpp similarity index 89% rename from src/Cafe/HW/Latte/Renderer/Common/CommonRendererCore.cpp rename to src/Cafe/HW/Latte/Renderer/RendererCore.cpp index 19690550..4a6a82d5 100644 --- a/src/Cafe/HW/Latte/Renderer/Common/CommonRendererCore.cpp +++ b/src/Cafe/HW/Latte/Renderer/RendererCore.cpp @@ -1,4 +1,4 @@ -#include "CommonRendererCore.h" +#include "RendererCore.h" #include "Cafe/HW/Latte/Renderer/Renderer.h" #include "Cafe/HW/Latte/ISA/RegDefines.h" #include "config/CemuConfig.h" @@ -16,7 +16,7 @@ indexDataCacheEntry2_t* indexDataCacheFirst = nullptr; // points to least recent indexDataCacheEntry2_t* indexDataCacheLast = nullptr; // points to most recently used item sint32 indexDataCacheEntryCount = 0; -void CommonRenderer_resetAttributePointerCache() +void RendererCore_resetAttributePointerCache() { for (sint32 i = 0; i < LATTE_VS_ATTRIBUTE_LIMIT; i++) { @@ -25,7 +25,7 @@ void CommonRenderer_resetAttributePointerCache() } } -bool CommonRenderer_checkIfAttributePointerCacheChanged(uint32 attributeShaderLoc, uint8* vboOutput, uint32 vboStride, uint8 dataFormat, uint8 nfa, bool isSigned) +bool RendererCore_checkIfAttributePointerCacheChanged(uint32 attributeShaderLoc, uint8* vboOutput, uint32 vboStride, uint8 dataFormat, uint8 nfa, bool isSigned) { // don't call glVertexAttribPointer if parameters have not changed if ( @@ -47,27 +47,27 @@ bool CommonRenderer_checkIfAttributePointerCacheChanged(uint32 attributeShaderLo return true; } -indexState_t* CommonRenderer_getIndexState() +indexState_t* RendererCore_getIndexState() { return &indexState; } -indexDataCacheEntry2_t** CommonRenderer_getIndexDataCacheFirst() +indexDataCacheEntry2_t** RendererCore_getIndexDataCacheFirst() { return &indexDataCacheFirst; } -indexDataCacheEntry2_t** CommonRenderer_getIndexDataCacheBucket(uint32 bucketIdx) +indexDataCacheEntry2_t** RendererCore_getIndexDataCacheBucket(uint32 bucketIdx) { return &indexDataCacheBucket[bucketIdx]; } -sint32* CommonRenderer_getIndexDataCacheEntryCount() +sint32* RendererCore_getIndexDataCacheEntryCount() { return &indexDataCacheEntryCount; } -void CommonRenderer_appendToUsageLinkedList(indexDataCacheEntry2_t* entry) +void RendererCore_appendToUsageLinkedList(indexDataCacheEntry2_t* entry) { if (indexDataCacheLast == nullptr) { @@ -85,7 +85,7 @@ void CommonRenderer_appendToUsageLinkedList(indexDataCacheEntry2_t* entry) } } -void CommonRenderer_removeFromUsageLinkedList(indexDataCacheEntry2_t* entry) +void RendererCore_removeFromUsageLinkedList(indexDataCacheEntry2_t* entry) { if (entry->prevInMostRecentUsage) { @@ -103,7 +103,7 @@ void CommonRenderer_removeFromUsageLinkedList(indexDataCacheEntry2_t* entry) entry->nextInMostRecentUsage = nullptr; } -void CommonRenderer_removeFromBucket(indexDataCacheEntry2_t* entry) +void RendererCore_removeFromBucket(indexDataCacheEntry2_t* entry) { uint32 indexDataBucketIdx = (uint32)((entry->key.physAddr + entry->key.count) ^ (entry->key.physAddr >> 16)) % INDEX_DATA_CACHE_BUCKETS; if (indexDataCacheBucket[indexDataBucketIdx] == entry) @@ -137,8 +137,8 @@ void LatteDraw_cleanupAfterFrame() break; // remove entry virtualBufferHeap_free(indexState.indexBufferVirtualHeap, entry->heapEntry); - CommonRenderer_removeFromUsageLinkedList(entry); - CommonRenderer_removeFromBucket(entry); + RendererCore_removeFromUsageLinkedList(entry); + RendererCore_removeFromBucket(entry); free(entry); } } @@ -200,6 +200,7 @@ void LatteDraw_handleSpecialState8_clearAsDepth() //cemu_assert_debug(false); // implement g_renderer->texture_clearColorSlice properly for OpenGL renderer if (glClearTexSubImage) glClearTexSubImage(((LatteTextureViewGL*)view)->glTexId, mipIndex, 0, 0, 0, effectiveClearWidth, effectiveClearHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE, clearColor); + break; } #endif default: diff --git a/src/Cafe/HW/Latte/Renderer/Common/CommonRendererCore.h b/src/Cafe/HW/Latte/Renderer/RendererCore.h similarity index 74% rename from src/Cafe/HW/Latte/Renderer/Common/CommonRendererCore.h rename to src/Cafe/HW/Latte/Renderer/RendererCore.h index 1866c30c..1c681373 100644 --- a/src/Cafe/HW/Latte/Renderer/Common/CommonRendererCore.h +++ b/src/Cafe/HW/Latte/Renderer/RendererCore.h @@ -77,16 +77,16 @@ typedef struct _indexDataCacheEntry_t _indexDataCacheEntry_t* prevInMostRecentUsage; // points to element which was used less recently }indexDataCacheEntry2_t; -void CommonRenderer_resetAttributePointerCache(); -bool CommonRenderer_checkIfAttributePointerCacheChanged(uint32 attributeShaderLoc, uint8* vboOutput, uint32 vboStride, uint8 dataFormat, uint8 nfa, bool isSigned); +void RendererCore_resetAttributePointerCache(); +bool RendererCore_checkIfAttributePointerCacheChanged(uint32 attributeShaderLoc, uint8* vboOutput, uint32 vboStride, uint8 dataFormat, uint8 nfa, bool isSigned); -indexState_t* CommonRenderer_getIndexState(); -indexDataCacheEntry2_t** CommonRenderer_getIndexDataCacheFirst(); -indexDataCacheEntry2_t** CommonRenderer_getIndexDataCacheBucket(uint32 bucketIdx); -sint32* CommonRenderer_getIndexDataCacheEntryCount(); +indexState_t* RendererCore_getIndexState(); +indexDataCacheEntry2_t** RendererCore_getIndexDataCacheFirst(); +indexDataCacheEntry2_t** RendererCore_getIndexDataCacheBucket(uint32 bucketIdx); +sint32* RendererCore_getIndexDataCacheEntryCount(); -void CommonRenderer_appendToUsageLinkedList(indexDataCacheEntry2_t* entry); -void CommonRenderer_removeFromUsageLinkedList(indexDataCacheEntry2_t* entry); -void CommonRenderer_removeFromBucket(indexDataCacheEntry2_t* entry); +void RendererCore_appendToUsageLinkedList(indexDataCacheEntry2_t* entry); +void RendererCore_removeFromUsageLinkedList(indexDataCacheEntry2_t* entry); +void RendererCore_removeFromBucket(indexDataCacheEntry2_t* entry); void LatteDraw_cleanupAfterFrame(); void LatteDraw_handleSpecialState8_clearAsDepth(); \ No newline at end of file