add verbose logging
This commit is contained in:
@@ -11,6 +11,14 @@
|
|||||||
#include "renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp"
|
#include "renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp"
|
||||||
#include "renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h"
|
#include "renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h"
|
||||||
|
|
||||||
|
#define TYRA_QBUFF_RENDERER_VERBOSE_LOG 1
|
||||||
|
|
||||||
|
#ifdef TYRA_QBUFF_RENDERER_VERBOSE_LOG
|
||||||
|
#define Verbose(...) Debug::writeLines("VRB: ", ##__VA_ARGS__, "\n")
|
||||||
|
#else
|
||||||
|
#define Verbose(...) ((void)0)
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Tyra {
|
namespace Tyra {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,7 +58,7 @@ void StaPipQBufferRenderer::allocateOnUse() {
|
|||||||
staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
|
staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
|
||||||
objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
|
objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
|
||||||
|
|
||||||
packets = new packet2_t*[buffersCount];
|
packets = new packet2_t*[2];
|
||||||
for (u16 i = 0; i < 2; i++)
|
for (u16 i = 0; i < 2; i++)
|
||||||
packets[i] =
|
packets[i] =
|
||||||
packet2_create(qbuffersPacketSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
|
packet2_create(qbuffersPacketSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
|
||||||
@@ -213,8 +221,13 @@ void StaPipQBufferRenderer::setDoubleBuffer() {
|
|||||||
|
|
||||||
StaPipQBuffer* StaPipQBufferRenderer::getBuffer() {
|
StaPipQBuffer* StaPipQBufferRenderer::getBuffer() {
|
||||||
currentBufferIndex = nextBufferIndex++;
|
currentBufferIndex = nextBufferIndex++;
|
||||||
|
Verbose("Proposing buffer: ", currentBufferIndex);
|
||||||
auto* result = buffers[currentBufferIndex];
|
auto* result = buffers[currentBufferIndex];
|
||||||
if (nextBufferIndex >= buffersCount) nextBufferIndex = 0;
|
if (nextBufferIndex >= buffersCount) {
|
||||||
|
Verbose("Rollup - clearing buffer indices. currentBufferIndex: ",
|
||||||
|
currentBufferIndex, " (before)nextBufferIndex: ", nextBufferIndex);
|
||||||
|
nextBufferIndex = 0;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,6 +235,7 @@ u16 StaPipQBufferRenderer::getQBufferIndex(StaPipQBuffer* buffer) {
|
|||||||
for (u16 i = 0; i < buffersCount; i++) {
|
for (u16 i = 0; i < buffersCount; i++) {
|
||||||
if (buffers[i] == buffer) return i;
|
if (buffers[i] == buffer) return i;
|
||||||
}
|
}
|
||||||
|
TYRA_TRAP("Buffer not found!");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,13 +254,15 @@ void StaPipQBufferRenderer::flushBuffers() {
|
|||||||
if (!is1stDBuffer && !is2ndDBuffer) {
|
if (!is1stDBuffer && !is2ndDBuffer) {
|
||||||
auto offset = currentBufferIndex >= buffersCount / 2 ? buffersCount / 2 : 0;
|
auto offset = currentBufferIndex >= buffersCount / 2 ? buffersCount / 2 : 0;
|
||||||
auto size = (currentBufferIndex + 1) - offset;
|
auto size = (currentBufferIndex + 1) - offset;
|
||||||
auto dbuffer = &buffers[offset];
|
Verbose("-- End flush. from: ", offset, " to: ", offset + size);
|
||||||
addBufferDataToPacket(dbuffer, size);
|
addBuffersDataToPacket(offset, offset + size);
|
||||||
sendPacket();
|
sendPacket();
|
||||||
}
|
}
|
||||||
|
|
||||||
currentBufferIndex = 0;
|
currentBufferIndex = 0;
|
||||||
nextBufferIndex = 0;
|
nextBufferIndex = 0;
|
||||||
|
|
||||||
|
Verbose("End flush - zeroing buffer indices.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void StaPipQBufferRenderer::cull(StaPipQBuffer* buffer) {
|
void StaPipQBufferRenderer::cull(StaPipQBuffer* buffer) {
|
||||||
@@ -259,9 +275,16 @@ void StaPipQBufferRenderer::cull(StaPipQBuffer* buffer) {
|
|||||||
auto is1stDBuffer = is1stDBufferFlushTime();
|
auto is1stDBuffer = is1stDBufferFlushTime();
|
||||||
auto is2ndDBuffer = is2ndDBufferFlushTime();
|
auto is2ndDBuffer = is2ndDBufferFlushTime();
|
||||||
|
|
||||||
|
Verbose("Add cull[", getQBufferIndex(buffer), "]: ", buffer->size);
|
||||||
|
|
||||||
if (is1stDBuffer || is2ndDBuffer) {
|
if (is1stDBuffer || is2ndDBuffer) {
|
||||||
auto dbuffer = &buffers[is1stDBuffer ? 0 : buffersCount / 2];
|
auto from = is1stDBuffer ? 0 : buffersCount / 2;
|
||||||
addBufferDataToPacket(dbuffer, buffersCount / 2);
|
auto to = from + buffersCount / 2;
|
||||||
|
|
||||||
|
Verbose("-- Half flush at ", getQBufferIndex(buffer), ". from: ", from,
|
||||||
|
" to: ", to);
|
||||||
|
|
||||||
|
addBuffersDataToPacket(from, to);
|
||||||
sendPacket();
|
sendPacket();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -275,12 +298,19 @@ void StaPipQBufferRenderer::clip(StaPipQBuffer* buffer) {
|
|||||||
|
|
||||||
clipper.clip(buffer);
|
clipper.clip(buffer);
|
||||||
|
|
||||||
|
Verbose("Add clip[", getQBufferIndex(buffer), "]: ", buffer->size);
|
||||||
|
|
||||||
auto is1stDBuffer = is1stDBufferFlushTime();
|
auto is1stDBuffer = is1stDBufferFlushTime();
|
||||||
auto is2ndDBuffer = is2ndDBufferFlushTime();
|
auto is2ndDBuffer = is2ndDBufferFlushTime();
|
||||||
|
|
||||||
if (is1stDBuffer || is2ndDBuffer) {
|
if (is1stDBuffer || is2ndDBuffer) {
|
||||||
auto dbuffer = &buffers[is1stDBuffer ? 0 : buffersCount / 2];
|
auto from = is1stDBuffer ? 0 : buffersCount / 2;
|
||||||
addBufferDataToPacket(dbuffer, buffersCount / 2);
|
auto to = from + buffersCount / 2;
|
||||||
|
|
||||||
|
Verbose("-- Half flush at ", getQBufferIndex(buffer), ". from: ", from,
|
||||||
|
" to: ", to);
|
||||||
|
|
||||||
|
addBuffersDataToPacket(from, to);
|
||||||
sendPacket();
|
sendPacket();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -289,20 +319,24 @@ void StaPipQBufferRenderer::clearLastProgramName() {
|
|||||||
lastProgramName = StaPipUndefinedProgram;
|
lastProgramName = StaPipUndefinedProgram;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StaPipQBufferRenderer::addBufferDataToPacket(StaPipQBuffer** buffers,
|
void StaPipQBufferRenderer::addBuffersDataToPacket(const u32& from,
|
||||||
const u32& count) {
|
const u32& to) {
|
||||||
currentPacket = packets[context];
|
currentPacket = packets[context];
|
||||||
packet2_reset(currentPacket, false);
|
packet2_reset(currentPacket, false);
|
||||||
|
|
||||||
for (u32 i = 0; i < count; i++) {
|
for (u32 i = from; i < to; i++) {
|
||||||
if (!buffers[i]->any()) continue;
|
if (!buffers[i]->any()) continue;
|
||||||
|
|
||||||
dBufferPrograms[i]->addBufferDataToPacket(currentPacket, buffers[i], prim);
|
auto* program = dBufferPrograms[i];
|
||||||
|
|
||||||
if (lastProgramName != dBufferPrograms[i]->getName()) {
|
program->addBufferDataToPacket(currentPacket, buffers[i], prim);
|
||||||
packet2_utils_vu_add_start_program(
|
|
||||||
currentPacket, dBufferPrograms[i]->getDestinationAddress());
|
Verbose("Send ", program->getStringName(), "[", i, "]: ", buffers[i]->size);
|
||||||
lastProgramName = dBufferPrograms[i]->getName();
|
|
||||||
|
if (lastProgramName != program->getName()) {
|
||||||
|
packet2_utils_vu_add_start_program(currentPacket,
|
||||||
|
program->getDestinationAddress());
|
||||||
|
lastProgramName = program->getName();
|
||||||
} else {
|
} else {
|
||||||
packet2_utils_vu_add_continue_program(currentPacket);
|
packet2_utils_vu_add_continue_program(currentPacket);
|
||||||
}
|
}
|
||||||
@@ -315,6 +349,9 @@ void StaPipQBufferRenderer::sendPacket() {
|
|||||||
dma_channel_wait(DMA_CHANNEL_VIF1, 0);
|
dma_channel_wait(DMA_CHANNEL_VIF1, 0);
|
||||||
dma_channel_send_packet2(currentPacket, DMA_CHANNEL_VIF1, true);
|
dma_channel_send_packet2(currentPacket, DMA_CHANNEL_VIF1, true);
|
||||||
|
|
||||||
|
TYRA_ASSERT(packet2_get_qw_count(currentPacket) <= qbuffersPacketSize,
|
||||||
|
"Packet is too big. Internal error");
|
||||||
|
|
||||||
// Switch packet, so we can proceed during DMA transfer
|
// Switch packet, so we can proceed during DMA transfer
|
||||||
context = !context;
|
context = !context;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user