rd_frag.py 1.5 KB

123456789101112131415161718192021222324252627282930
  1. import os, renderdoc as rd
  2. out=open(os.environ['OUT'],'w')
  3. cap=rd.OpenCaptureFile(); cap.OpenFile(os.environ['CAP'],'',None)
  4. st,ctl=cap.OpenCapture(rd.ReplayOptions(),None)
  5. names={r.resourceId:r.name for r in ctl.GetResources()}
  6. for eid in [int(x) for x in os.environ['EIDS'].split(',')]:
  7. ctl.SetFrameEvent(eid,True)
  8. s=ctl.GetPipelineState()
  9. out.write('== %d\n'%eid)
  10. for stage in (rd.ShaderStage.Vertex, rd.ShaderStage.Fragment):
  11. refl=s.GetShaderReflection(stage)
  12. if refl is None: continue
  13. for ro in s.GetReadOnlyResources(stage):
  14. out.write(' %s tex slot=%d %s\n'%(stage,ro.access.index,ro.descriptor.resource))
  15. for i,cb in enumerate(refl.constantBlocks):
  16. b=s.GetConstantBlock(stage,i,0); d=b.descriptor
  17. try:
  18. vs=ctl.GetCBufferVariableContents(s.GetGraphicsPipelineObject(), s.GetShader(stage), stage, refl.entryPoint, i, d.resource, d.byteOffset, d.byteSize)
  19. except Exception as e:
  20. out.write(' cb err %s\n'%e); continue
  21. def dump(v,p=''):
  22. if v.members:
  23. for m in v.members: dump(m,p+v.name+'.')
  24. else:
  25. out.write(' %s%s %s = %s\n'%(stage==rd.ShaderStage.Vertex and 'V:' or 'F:',p,v.name,list(v.value.f32v[:v.rows*v.columns])))
  26. for v in vs: dump(v)
  27. if os.environ.get('SRC'):
  28. refl=s.GetShaderReflection(rd.ShaderStage.Fragment)
  29. out.write(' frag entry %s\n'%refl.entryPoint)
  30. ctl.Shutdown(); cap.Shutdown(); out.close(); os._exit(0)