diff --git a/BenchmarkDemoQt6/BenchmarkUI/Logger.qml b/BenchmarkDemoQt6/BenchmarkUI/Logger.qml index aa402db9318333d7512bf31996f4382ae05fd1b1..786177c5732a3204db5706354d57b6815f63a267 100644 --- a/BenchmarkDemoQt6/BenchmarkUI/Logger.qml +++ b/BenchmarkDemoQt6/BenchmarkUI/Logger.qml @@ -25,6 +25,11 @@ Item { property real renderTime: source === null ? 0 : source.renderStats.renderTime property real syncTime: source === null ? 0 : source.renderStats.syncTime property int fps: source === null ? 0 : source.renderStats.fps + property int drawCallCount: source === null ? 0 : source.renderStats.drawCallCount + property int drawVertexCount: source === null ? 0 : source.renderStats.drawVertexCount + property int imageDataSize: source === null ? 0 : source.renderStats.imageDataSize + property int meshDataSize: source === null ? 0 : source.renderStats.meshDataSize + property int renderPassCount: source === null ? 0 : source.renderStats.renderPassCount // min/max property real maxFrameTime: 0 @@ -130,6 +135,7 @@ Item { interval: 5000 running: false onTriggered: { + source.renderStats.extendedDataCollectionEnabled = (QtVersion[0] == 6 && QtVersion[1] >= 5) reset(); measureTimer.start(); } @@ -155,91 +161,101 @@ Item { measurementLog += "\nMaximum Sync Time: " + maxSyncTime; for (var i = 0; i < config.length; ++i) measurementLog += "\n" + config[i]; - if (reportModelStats) { - measurementLog += "\nModel statistics:\n"; - var drawCalls = 0; - var shadowDrawCalls = 0; - var aoDrawCalls = 0; - var skyboxDrawCalls = 0; - switch (benchmarkRoot.modelIndex) { - case 0: - measurementLog += "-Model consists of 3 separate meshes of 336 triangles each.\n"; - measurementLog += "-There is one material used by all meshes.\n"; - drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 3; - measurementLog += "-This results in 3 separate draw calls per model, i.e. " - + drawCalls + " draw calls per frame.\n"; - if (instancing) { - measurementLog += "-Due to instancing each draw call draws " - + benchmarkRoot.modelInstanceCount - + " times the original triangle count." + if (reportModelStats || (QtVersion[0] == 6 && QtVersion[1] >= 5)) { + if (QtVersion[0] == 6 && QtVersion[1] >= 5) { + measurementLog += "\nScene statistics:"; + measurementLog += "\n - draw calls: " + drawCallCount; + measurementLog += "\n - vertices: " + drawVertexCount; + measurementLog += "\n - triangles: " + drawVertexCount / 3; + measurementLog += "\n - render passes: " + renderPassCount; + measurementLog += "\n - image data: " + imageDataSize + " bytes"; + measurementLog += "\n - mesh data: " + meshDataSize + " bytes\n"; + } else { + measurementLog += "\nModel statistics:\n"; + var drawCalls = 0; + var shadowDrawCalls = 0; + var aoDrawCalls = 0; + var skyboxDrawCalls = 0; + switch (benchmarkRoot.modelIndex) { + case 0: + measurementLog += "-Model consists of 3 separate meshes of 336 triangles each.\n"; + measurementLog += "-There is one material used by all meshes.\n"; + drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 3; + measurementLog += "-This results in 3 separate draw calls per model, i.e. " + + drawCalls + " draw calls per frame.\n"; + if (instancing) { + measurementLog += "-Due to instancing each draw call draws " + + benchmarkRoot.modelInstanceCount + + " times the original triangle count." + } + break; + case 1: + measurementLog += "-Model consists of 5 separate meshes. One has 21196 triangles and the rest 1600 triangles each.\n"; + measurementLog += "-There is one material used by all meshes.\n"; + drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 5; + measurementLog += "-This results in 5 separate draw calls per model, i.e. " + + drawCalls + " draw calls per frame.\n"; + if (instancing) { + measurementLog += "-Due to instancing each draw call draws " + + benchmarkRoot.modelInstanceCount + + " times the original triangle count." + } + break; + case 2: + measurementLog += "-Model consists of 5 separate meshes. One has 81734 triangles and the rest 1600 triangles each.\n"; + measurementLog += "-There are 10 materials used by one mesh and 1 used by the rest.\n"; + drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 14; + measurementLog += "-This results in 14 separate draw calls per model, i.e. " + + drawCalls + " draw calls per frame.\n"; + if (instancing) { + measurementLog += "-Due to instancing each draw call draws " + + benchmarkRoot.modelInstanceCount + + " times the original triangle count." + } + break; + case 3: + measurementLog += "-Model consists of 5 separate meshes. One has 154397 triangles and the rest 1600 triangles each.\n"; + measurementLog += "-There are 10 materials used by one mesh and 1 used by the rest.\n"; + drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 14; + measurementLog += "-This results in 14 separate draw calls per model, i.e. " + + drawCalls + " draw calls per frame.\n"; + if (instancing) { + measurementLog += "-Due to instancing each draw call draws " + + benchmarkRoot.modelInstanceCount + + " times the original triangle count." + } + break; + case 4: + measurementLog += "-Model consists of 5 separate meshes. One has 879892 triangles and the rest 1600 triangles each.\n"; + measurementLog += "-There are 10 materials used by one mesh and 1 used by the rest.\n"; + drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 14; + measurementLog += "-This results in 14 separate draw calls per model, i.e. " + + drawCalls + " draw calls per frame.\n"; + if (instancing) { + measurementLog += "-Due to instancing each draw call draws " + + benchmarkRoot.modelInstanceCount + + " times the original triangle count." + } + break; } - break; - case 1: - measurementLog += "-Model consists of 5 separate meshes. One has 21196 triangles and the rest 1600 triangles each.\n"; - measurementLog += "-There is one material used by all meshes.\n"; - drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 5; - measurementLog += "-This results in 5 separate draw calls per model, i.e. " - + drawCalls + " draw calls per frame.\n"; - if (instancing) { - measurementLog += "-Due to instancing each draw call draws " - + benchmarkRoot.modelInstanceCount - + " times the original triangle count." + if (benchmarkRoot.skyboxEnabled && benchmarkRoot.iblEnabled) { + skyboxDrawCalls = 1; + measurementLog += "-Taking skybox into account there are " + + (drawCalls + skyboxDrawCalls) + + " draw calls per frame.\n"; } - break; - case 2: - measurementLog += "-Model consists of 5 separate meshes. One has 81734 triangles and the rest 1600 triangles each.\n"; - measurementLog += "-There are 10 materials used by one mesh and 1 used by the rest.\n"; - drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 14; - measurementLog += "-This results in 14 separate draw calls per model, i.e. " - + drawCalls + " draw calls per frame.\n"; - if (instancing) { - measurementLog += "-Due to instancing each draw call draws " - + benchmarkRoot.modelInstanceCount - + " times the original triangle count." + if (benchmarkRoot.shadowsEnabled) { + shadowDrawCalls = benchmarkRoot.lightTypeIndex === 0 ? drawCalls : 6 * drawCalls; + measurementLog += "-Taking shadows into account there are " + + (drawCalls + skyboxDrawCalls + shadowDrawCalls) + + " draw calls per frame.\n"; } - break; - case 3: - measurementLog += "-Model consists of 5 separate meshes. One has 154397 triangles and the rest 1600 triangles each.\n"; - measurementLog += "-There are 10 materials used by one mesh and 1 used by the rest.\n"; - drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 14; - measurementLog += "-This results in 14 separate draw calls per model, i.e. " - + drawCalls + " draw calls per frame.\n"; - if (instancing) { - measurementLog += "-Due to instancing each draw call draws " - + benchmarkRoot.modelInstanceCount - + " times the original triangle count." + if (benchmarkRoot.aoEnabled) { + aoDrawCalls = drawCalls; + measurementLog += "-Taking ambient occlusion into account there are " + + (drawCalls + skyboxDrawCalls + shadowDrawCalls + aoDrawCalls) + + " draw calls per frame, " + aoDrawCalls + " being depth-only.\n"; } - break; - case 4: - measurementLog += "-Model consists of 5 separate meshes. One has 879892 triangles and the rest 1600 triangles each.\n"; - measurementLog += "-There are 10 materials used by one mesh and 1 used by the rest.\n"; - drawCalls = (instancing ? 1 : benchmarkRoot.modelInstanceCount) * 14; - measurementLog += "-This results in 14 separate draw calls per model, i.e. " - + drawCalls + " draw calls per frame.\n"; - if (instancing) { - measurementLog += "-Due to instancing each draw call draws " - + benchmarkRoot.modelInstanceCount - + " times the original triangle count." - } - break; - } - if (benchmarkRoot.skyboxEnabled && benchmarkRoot.iblEnabled) { - skyboxDrawCalls = 1; - measurementLog += "-Taking skybox into account there are " - + (drawCalls + skyboxDrawCalls) - + " draw calls per frame.\n"; - } - if (benchmarkRoot.shadowsEnabled) { - shadowDrawCalls = benchmarkRoot.lightTypeIndex === 0 ? drawCalls : 6 * drawCalls; - measurementLog += "-Taking shadows into account there are " - + (drawCalls + skyboxDrawCalls + shadowDrawCalls) - + " draw calls per frame.\n"; - } - if (benchmarkRoot.aoEnabled) { - aoDrawCalls = drawCalls; - measurementLog += "-Taking ambient occlusion into account there are " - + (drawCalls + skyboxDrawCalls + shadowDrawCalls + aoDrawCalls) - + " draw calls per frame, " + aoDrawCalls + " being depth-only.\n"; } } if (singleReportMode)