import sys
if 'renderdoc' not in sys.modules and '_renderdoc' not in sys.modules:
import renderdoc
rd = renderdoc
actions = {}
def iterDraw(d, indent = ''):
global actions
actions[d.eventId] = d
for d in d.children:
iterDraw(d, indent + ' ')
def sampleCode(controller):
for d in controller.GetRootActions():
iterDraw(d)
counters = controller.EnumerateCounters()
if not (rd.GPUCounter.EventGPUDuration in counters):
raise RuntimeError("Implementation doesn't support GPU Duration counter")
results = controller.FetchCounters([rd.GPUCounter.EventGPUDuration])
EventGPUDurationDesc = controller.DescribeCounter(
rd.GPUCounter.EventGPUDuration)
for c in counters:
desc = controller.DescribeCounter(c)
print("Counter %d (%s):" % (c, desc.name))
print(" %s" % desc.description)
print(" Returns %d byte %s, representing %s" % (desc.resultByteWidth, desc.resultType, desc.unit))
for r in results:
draw = actions[r.eventId]
print("EID %d: %f" % (r.eventId, r.value.d))
def loadCapture(filename):
cap = rd.OpenCaptureFile()
result = cap.OpenFile(filename, '', None)
if result != rd.ResultCode.Succeeded:
raise RuntimeError("Couldn't open file: " + str(result))
if not cap.LocalReplaySupport():
raise RuntimeError("Capture cannot be replayed")
result, controller = cap.OpenCapture(rd.ReplayOptions(), None)
if result != rd.ResultCode.Succeeded:
raise RuntimeError("Couldn't initialise replay: " + str(result))
return cap,controller
if 'pyrenderdoc' in globals():
pyrenderdoc.Replay().BlockInvoke(sampleCode)
else:
rd.InitialiseReplay(rd.GlobalEnvironment(), [])
if len(sys.argv) <= 1:
print('Usage: python3 {} filename.rdc'.format(sys.argv[0]))
sys.exit(0)
cap,controller = loadCapture(sys.argv[1])
sampleCode(controller)
controller.Shutdown()
cap.Shutdown()
rd.ShutdownReplay()