Misc GPU stats etc changes

This commit is contained in:
Henrik Rydgard 2013-01-25 00:36:59 +01:00
parent 7a5aa60b3a
commit 8a32779150
5 changed files with 36 additions and 25 deletions

View file

@ -211,8 +211,9 @@ void hleEnterVblank(u64 userdata, int cyclesLate) {
"Draw calls: %i, flushes %i\n"
"Cached Draw calls: %i\n"
"Num Tracked Vertex Arrays: %i\n"
"Vertices Transformed: %i\n"
"Vertices Submitted: %i\n"
"Cached Vertices Drawn: %i\n"
"Uncached Vertices Drawn: %i\n"
"FBOs active: %i\n"
"Textures active: %i, decoded: %i\n"
"Texture invalidations: %i\n"
@ -230,8 +231,9 @@ void hleEnterVblank(u64 userdata, int cyclesLate) {
gpuStats.numFlushes,
gpuStats.numCachedDrawCalls,
gpuStats.numTrackedVertexArrays,
gpuStats.numVertsTransformed,
gpuStats.numVertsSubmitted,
gpuStats.numCachedVertsDrawn,
gpuStats.numUncachedVertsDrawn,
gpuStats.numFBOs,
gpuStats.numTextures,
gpuStats.numTexturesDecoded,
@ -241,10 +243,11 @@ void hleEnterVblank(u64 userdata, int cyclesLate) {
gpuStats.numShaders
);
float zoom = 0.5f; /// g_Config.iWindowZoom;
float zoom = 0.3f; /// g_Config.iWindowZoom;
float soff = 0.3f;
PPGeBegin();
PPGeDrawText(stats, 1, 1, 0, zoom, 0xFF000000);
PPGeDrawText(stats, -1, -1, 0, zoom, 0xFF000000);
PPGeDrawText(stats, soff, soff, 0, zoom, 0xCC000000);
PPGeDrawText(stats, -soff, -soff, 0, zoom, 0xCC000000);
PPGeDrawText(stats, 0, 0, 0, zoom, 0xFFFFFFFF);
PPGeEnd();

View file

@ -166,8 +166,8 @@ const int flushBeforeCommandList[] = {
GLES_GPU::GLES_GPU(int renderWidth, int renderHeight)
: interruptsEnabled_(true),
displayFramebufPtr_(0),
prevDisplayFramebufPtr_(0),
prevPrevDisplayFramebufPtr_(0),
prevDisplayFramebuf_(0),
prevPrevDisplayFramebuf_(0),
renderWidth_(renderWidth),
renderHeight_(renderHeight)
{
@ -257,8 +257,6 @@ void GLES_GPU::BeginFrame() {
void GLES_GPU::SetDisplayFramebuffer(u32 framebuf, u32 stride, int format) {
if (framebuf & 0x04000000) {
//DEBUG_LOG(G3D, "Switch display framebuffer %08x", framebuf);
prevPrevDisplayFramebufPtr_ = prevDisplayFramebufPtr_;
prevDisplayFramebufPtr_ = displayFramebufPtr_;
displayFramebufPtr_ = framebuf;
displayStride_ = stride;
displayFormat_ = format;
@ -275,6 +273,9 @@ void GLES_GPU::CopyDisplayToOutput() {
EndDebugDraw();
VirtualFramebuffer *vfb = GetDisplayFBO();
prevPrevDisplayFramebuf_ = prevDisplayFramebuf_;
prevDisplayFramebuf_ = displayFramebuf_;
displayFramebuf_ = vfb;
fbo_unbind();
glstate.viewport.set(0, 0, PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight);
@ -307,17 +308,12 @@ void GLES_GPU::CopyDisplayToOutput() {
BeginDebugDraw();
}
static bool MaskedEqual(u32 addr1, u32 addr2) {
return (addr1 & 0x3FFFFFF) == (addr2 & 0x3FFFFFF);
}
void GLES_GPU::DecimateFBOs() {
for (auto iter = vfbs_.begin(); iter != vfbs_.end();) {
VirtualFramebuffer *v = *iter;
if (MaskedEqual(v->fb_address, displayFramebufPtr_) ||
MaskedEqual(v->fb_address, prevDisplayFramebufPtr_) ||
MaskedEqual(v->fb_address, prevPrevDisplayFramebufPtr_)) {
if (v == displayFramebuf_ ||
v == prevDisplayFramebuf_ ||
v == prevPrevDisplayFramebuf_) {
++iter;
continue;
}
@ -330,6 +326,10 @@ void GLES_GPU::DecimateFBOs() {
}
}
static bool MaskedEqual(u32 addr1, u32 addr2) {
return (addr1 & 0x3FFFFFF) == (addr2 & 0x3FFFFFF);
}
GLES_GPU::VirtualFramebuffer *GLES_GPU::GetDisplayFBO() {
for (auto iter = vfbs_.begin(); iter != vfbs_.end(); ++iter) {
if (MaskedEqual((*iter)->fb_address, displayFramebufPtr_) && (*iter)->format == displayFormat_) {
@ -338,7 +338,7 @@ GLES_GPU::VirtualFramebuffer *GLES_GPU::GetDisplayFBO() {
}
}
DEBUG_LOG(HLE, "Finding no FBO matching address %08x", displayFramebufPtr_);
#ifdef _DEBUG
#if 0 // defined(_DEBUG)
std::string debug = "FBOs: ";
for (auto iter = vfbs_.begin(); iter != vfbs_.end(); ++iter) {
char temp[256];
@ -376,7 +376,7 @@ void GLES_GPU::SetRenderFrameBuffer() {
VirtualFramebuffer *vfb = 0;
for (auto iter = vfbs_.begin(); iter != vfbs_.end(); ++iter) {
VirtualFramebuffer *v = *iter;
if (v->fb_address == fb_address && v->width == drawing_width && v->height == drawing_height && v->format == fmt) {
if (v->fb_address == fb_address && v->width == drawing_width && v->height == drawing_height /* && v->format == fmt */) {
// Let's not be so picky for now. Let's say this is the one.
vfb = v;
// Update fb stride in case it changed
@ -406,7 +406,7 @@ void GLES_GPU::SetRenderFrameBuffer() {
case GE_FORMAT_8888: vfb->colorDepth = FBO_8888;
}
//#ifdef ANDROID
// vfb->colorDepth = FBO_5551;
// vfb->colorDepth = FBO_8888;
//#endif
vfb->fbo = fbo_create(vfb->width * renderWidthFactor_, vfb->height * renderHeightFactor_, 1, true, vfb->colorDepth);

View file

@ -73,8 +73,6 @@ private:
bool interruptsEnabled_;
u32 displayFramebufPtr_;
u32 prevDisplayFramebufPtr_;
u32 prevPrevDisplayFramebufPtr_;
u32 displayStride_;
int displayFormat_;
@ -107,6 +105,10 @@ private:
FBO *fbo;
};
VirtualFramebuffer *displayFramebuf_;
VirtualFramebuffer *prevDisplayFramebuf_;
VirtualFramebuffer *prevPrevDisplayFramebuf_;
void SetRenderFrameBuffer(); // Uses parameters computed from gstate
// TODO: Break out into some form of FBO manager
VirtualFramebuffer *GetDisplayFBO();

View file

@ -691,7 +691,7 @@ void TransformDrawEngine::SubmitPrim(void *verts, void *inds, int prim, int vert
gpuStats.numJoins++;
}
gpuStats.numDrawCalls++;
gpuStats.numVertsTransformed += vertexCount;
gpuStats.numVertsSubmitted += vertexCount;
DeferredDrawCall &dc = drawCalls[numDrawCalls++];
dc.verts = verts;
@ -921,6 +921,7 @@ void TransformDrawEngine::Flush() {
if (vai->ebo)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vai->ebo);
useElements = vai->ebo ? true : false;
gpuStats.numCachedVertsDrawn += vai->numVerts;
}
vbo = vai->vbo;
ebo = vai->ebo;
@ -934,6 +935,7 @@ void TransformDrawEngine::Flush() {
{
vai->numDraws++;
gpuStats.numCachedDrawCalls++;
gpuStats.numCachedVertsDrawn += vai->numVerts;
// DecodeVerts(); // TODO : Remove
vbo = vai->vbo;
ebo = vai->ebo;
@ -955,6 +957,7 @@ void TransformDrawEngine::Flush() {
} else {
DecodeVerts();
rotateVBO:
gpuStats.numUncachedVertsDrawn += indexGen.VertexCount();
useElements = !indexGen.SeenOnlyPurePrims();
if (g_Config.bUseVBO) {
// Just rotate VBO.
@ -991,6 +994,7 @@ rotateVBO:
glBindBuffer(GL_ARRAY_BUFFER, 0);
} else {
DecodeVerts();
gpuStats.numUncachedVertsDrawn += indexGen.VertexCount();
prim = indexGen.Prim();
DEBUG_LOG(G3D, "Flush prim %i SW! %i verts in one go", prim, indexGen.VertexCount());

View file

@ -259,8 +259,9 @@ struct GPUStatistics
numJoins = 0;
numDrawCalls = 0;
numCachedDrawCalls = 0;
numVertsTransformed = 0;
numVertsSubmitted = 0;
numCachedVertsDrawn = 0;
numUncachedVertsDrawn = 0;
numTrackedVertexArrays = 0;
numTextureInvalidations = 0;
numTextureSwitches = 0;
@ -275,8 +276,9 @@ struct GPUStatistics
int numDrawCalls;
int numCachedDrawCalls;
int numFlushes;
int numVertsTransformed;
int numVertsSubmitted;
int numCachedVertsDrawn;
int numUncachedVertsDrawn;
int numTrackedVertexArrays;
int numTextureInvalidations;
int numTextureSwitches;