Adds a function for printing nv50_ir_prog_info_out structure in JSON-like format, which could be used in debugging.
Signed-off-by: Mark Menzynski <mmenz...@redhat.com> --- .../nouveau/codegen/.nv50_ir_from_nir.cpp.swp | Bin 0 -> 16384 bytes .../drivers/nouveau/codegen/nv50_ir_driver.h | 3 + .../drivers/nouveau/codegen/nv50_ir_print.cpp | 154 ++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 src/gallium/drivers/nouveau/codegen/.nv50_ir_from_nir.cpp.swp diff --git a/src/gallium/drivers/nouveau/codegen/.nv50_ir_from_nir.cpp.swp b/src/gallium/drivers/nouveau/codegen/.nv50_ir_from_nir.cpp.swp new file mode 100644 index 0000000000000000000000000000000000000000..c405065a5df6c33ee4f0439c30c474d446b87730 GIT binary patch literal 16384 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 I=L)m@7rk>&Q2+n{ literal 0 HcmV?d00001 diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h b/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h index eea32133ccf..10ae5cbe420 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h @@ -275,6 +275,9 @@ namespace nv50_ir } #endif +extern void +nv50_ir_prog_info_out_print(struct nv50_ir_prog_info_out *); + /* Serialize a nv50_ir_prog_info_out structure and save it into blob */ extern bool nv50_ir_prog_info_out_serialize(struct blob *, struct nv50_ir_prog_info_out *); diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp index 5dcbf3c3e0c..2c13bef5e1a 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp @@ -22,6 +22,7 @@ #include "codegen/nv50_ir.h" #include "codegen/nv50_ir_target.h" +#include "codegen/nv50_ir_driver.h" #include <inttypes.h> @@ -852,3 +853,156 @@ Function::printLiveIntervals() const } } // namespace nv50_ir + +extern void +nv50_ir_prog_info_out_print(struct nv50_ir_prog_info_out *info_out) +{ + int i; + + INFO("{\n"); + INFO(" \"target\":\"%d\",\n", info_out->target); + INFO(" \"type\":\"%d\",\n", info_out->type); + + // Bin + INFO(" \"bin\":{\n"); + INFO(" \"maxGPR\":\"%d\",\n", info_out->bin.maxGPR); + INFO(" \"tlsSpace\":\"%d\",\n", info_out->bin.tlsSpace); + INFO(" \"smemSize\":\"%d\",\n", info_out->bin.smemSize); + INFO(" \"codeSize\":\"%d\",\n", info_out->bin.codeSize); + INFO(" \"instructions\":\"%d\",\n", info_out->bin.instructions); + + // RelocInfo + INFO(" \"RelocInfo\":"); + if (!info_out->bin.relocData) { + INFO("\"NULL\",\n"); + } else { + nv50_ir::RelocInfo *reloc = (nv50_ir::RelocInfo *)info_out->bin.relocData; + INFO("{\n"); + INFO(" \"codePos\":\"%d\",\n", reloc->codePos); + INFO(" \"libPos\":\"%d\",\n", reloc->libPos); + INFO(" \"dataPos\":\"%d\",\n", reloc->dataPos); + INFO(" \"count\":\"%d\",\n", reloc->count); + INFO(" \"RelocEntry\":[\n"); + for (unsigned int i = 0; i < reloc->count; i++) { + INFO(" {\"data\":\"%d\",\t\"mask\":\"%d\",\t\"offset\":\"%d\",\t\"bitPos\":\"%d\",\t\"type\":\"%d\"}", + reloc->entry[i].data, reloc->entry[i].mask, reloc->entry[i].offset, reloc->entry[i].bitPos, reloc->entry[i].type + ); + } + INFO("\n"); + INFO(" ]\n"); + INFO(" },\n"); + } + + // FixupInfo + INFO(" \"FixupInfo\":"); + if (!info_out->bin.fixupData) { + INFO("\"NULL\"\n"); + } else { + nv50_ir::FixupInfo *fixup = (nv50_ir::FixupInfo *)info_out->bin.fixupData; + INFO("{\n"); + INFO(" \"count\":\"%d\"\n", fixup->count); + INFO(" \"FixupEntry\":[\n"); + for (unsigned int i = 0; i < fixup->count; i++) { + INFO(" {\"apply\":\"%p\",\t\"ipa\":\"%d\",\t\"reg\":\"%d\",\t\"loc\":\"%d\"}\n", + fixup->entry[i].apply, fixup->entry[i].ipa, fixup->entry[i].reg, fixup->entry[i].loc); + } + INFO("\n"); + INFO(" ]\n"); + INFO(" }\n"); + + INFO(" },\n"); + } + + if (info_out->numSysVals) { + INFO(" \"sv\":[\n"); + for (i = 0; i < info_out->numSysVals; i++) { + if (&(info_out->sv[i])) { + INFO(" {\"id\":\"%d\", \"sn\":\"%d\", \"si\":\"%d\"}\n", + info_out->sv[i].id, info_out->sv[i].sn, info_out->sv[i].si); + } + } + INFO("\n ],\n"); + } + if (info_out->numInputs) { + INFO(" \"in\":[\n"); + for (i = 0; i < info_out->numInputs; i++) { + if (&(info_out->in[i])) { + INFO(" {\"id\":\"%d\",\t\"sn\":\"%d\",\t\"si\":\"%d\"}\n", + info_out->in[i].id, info_out->in[i].sn, info_out->in[i].si); + } + } + INFO("\n ],\n"); + } + if (info_out->numOutputs) { + INFO(" \"out\":[\n"); + for (i = 0; i < info_out->numOutputs; i++) { + if (&(info_out->out[i])) { + INFO(" {\"id\":\"%d\",\t\"sn\":\"%d\",\t\"si\":\"%d\"}\n", + info_out->out[i].id, info_out->out[i].sn, info_out->out[i].si); + } + } + INFO("\n ],\n"); + } + + INFO(" \"numInputs\":\"%d\",\n", info_out->numInputs); + INFO(" \"numOutputs\":\"%d\",\n", info_out->numOutputs); + INFO(" \"numPatchConstants\":\"%d\",\n", info_out->numPatchConstants); + INFO(" \"numSysVals\":\"%d\",\n", info_out->numSysVals); + + INFO(" \"prop\":{\n"); + switch (info_out->type) { + case PIPE_SHADER_VERTEX: + INFO(" \"vp\": {\"usesDrawParameters\":\"%s\"}\n", + info_out->prop.vp.usesDrawParameters ? "true" : "false"); + break; + case PIPE_SHADER_TESS_CTRL: + case PIPE_SHADER_TESS_EVAL: + INFO(" \"tp\":{\n"); + INFO(" \"outputPatchSize\":\"%d\"\n", info_out->prop.tp.outputPatchSize); + INFO(" \"partitioning\":\"%d\"\n", info_out->prop.tp.partitioning); + INFO(" \"winding\":\"%d\"\n", info_out->prop.tp.winding); + INFO(" \"domain\":\"%d\"\n", info_out->prop.tp.domain); + INFO(" \"outputPrim\":\"%d\"\n", info_out->prop.tp.outputPrim); + break; + case PIPE_SHADER_GEOMETRY: + INFO(" \"gp\":{\n"); + INFO(" \"outputPrim\":\"%d\"\n", info_out->prop.gp.outputPrim); + INFO(" \"instancesCount\":\"%d\"\n", info_out->prop.gp.instanceCount); + INFO(" \"maxVertices\":\"%d\"\n", info_out->prop.gp.maxVertices); + break; + case PIPE_SHADER_FRAGMENT: + INFO(" \"fp\":{\n"); + INFO(" \"numColourResults\":\"%d\"\n", info_out->prop.fp.numColourResults); + INFO(" \"writesDepth\":\"%s\"\n", info_out->prop.fp.writesDepth ? "true" : "false"); + INFO(" \"earlyFragTests\":\"%s\"\n", info_out->prop.fp.earlyFragTests ? "true" : "false"); + INFO(" \"postDepthCoverage\":\"%s\"\n", info_out->prop.fp.postDepthCoverage ? "true" : "false"); + INFO(" \"usesDiscard\":\"%s\"\n", info_out->prop.fp.usesDiscard ? "true" : "false"); + INFO(" \"usesSampleMaskIn\":\"%s\"\n", info_out->prop.fp.usesSampleMaskIn ? "true" : "false"); + INFO(" \"readsFramebuffer\":\"%s\"\n", info_out->prop.fp.readsFramebuffer ? "true" : "false"); + INFO(" \"readsSampleLocations\":\"%s\"\n", info_out->prop.fp.readsSampleLocations ? "true" : "false"); + INFO(" \"separateFragData\":\"%s\"\n", info_out->prop.fp.separateFragData ? "true" : "false"); + break; + default: + assert("!unhandled pipe shader type\n"); + } + INFO(" }\n"); + INFO(" }\n"); + + INFO(" \"io\":{\n"); + INFO(" \"clipDistances\":\"%d\"\n", info_out->io.clipDistances); + INFO(" \"cullDistances\":\"%d\"\n", info_out->io.cullDistances); + INFO(" \"genUserClip\":\"%d\"\n", info_out->io.genUserClip); + INFO(" \"instanceId\":\"%d\"\n", info_out->io.instanceId); + INFO(" \"vertexId\":\"%d\"\n", info_out->io.vertexId); + INFO(" \"edgeFlagIn\":\"%d\"\n", info_out->io.edgeFlagIn); + INFO(" \"edgeFlagOut\":\"%d\"\n", info_out->io.edgeFlagOut); + INFO(" \"fragDepth\":\"%d\"\n", info_out->io.fragDepth); + INFO(" \"sampleMask\":\"%d\"\n", info_out->io.sampleMask); + INFO(" \"globalAccess\":\"%d\"\n", info_out->io.globalAccess); + INFO(" \"fp64\":\"%s\"\n", info_out->io.fp64 ? "true" : "false"); + INFO(" \"}\n"); + INFO(" \"numBarriers\":\"%d\"\n", info_out->numBarriers); + INFO(" \"driverPriv\":\"%p\"\n", info_out->driverPriv); + + INFO("}\n"); +} -- 2.24.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev