[Mesa-dev] [RFC PATCH v2 3/6] nv50/ir: Add prog_info_out print
Mark Menzynski
mmenzyns at redhat.com
Thu Mar 19 20:57:45 UTC 2020
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 <mmenzyns at 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
zcmeHOYmgjO6>bBHf+(U`l!A4$5!hXaojg#f-DJt^>}<A+*_o}G*^NP@>FK^R)263;
z=*Mn0F;N7|@&{n4WtEm?DVBv&md`4+)c+9$@lpCm at dx4q4T2IBQPl6;dwU+8O|n1y
zW%X9R>`b3~&pnU(IOp`;=FU}piQPE0Tf@&~ns(*=bGKb~)t9u_-J)sTF87XZcp;I_
z_2c at M>2~}uni8LEziT?)CLK;B4D&VK^Ft@{1BZwCE)UIo7+CqX>AFtb&D(*q#)B~L
z`SBVz<GkhDyv at D5xAxYZh7%aA!0#HK6HHmX-X_Cjk1`8n7TDARmuh=<@7hVE9b?<s
zYcF5fv{m*nvp{Bn%mSGOG7DrD$SjaqAhSSbf&WhnM7=j@?}cjHlzJ`o`z5L0|4~05
zP|w>b`o9(Z9`*cGivFUa->aT)r~#63{-x-L75yS5P(uHwqTi|LL5lu at qTi?J&!*`A
zQ1n32-+zJpknn$A(Qi}q(<%Dj6 at 5+7YZs38|C^$}OVPidqCcnT#})mWmyY&7t>{VJ
z<o*=>Sw(kL|I1!B+W)Vq at i$WRzbN`URsUb4=+7v6qW`XoM)^OT;(uR?{%1u$r1+mo
z(VtRuuIQzgkMcjI=*hf#Fh&1UivF5cjQ0PdqJK#7Ka!$9sp$Rreer1jKPY-4Upqzr
zy`m at c=iwCncd7AbFB#?kTSdQB$#*hEe?rmM6 at AAmNBgVksO?wuPp0VVarP^-KxTo=
z0+|Ie3uG3^ERb0svp{Bn%mQb%fN5(QrE1@$L>TY?ll<t#S8Lj at fnNe22Ihe0UZrVY
z1a1ee1g-#1UJ5#J4{#IkEb@{E00VeE at Cfpp2Z0BG4Il<0U=>&aW`JqnYTz_-s*}Ly
zfxCgbfDTXvbRY*@16&Sl1D-*S_cZVu;Bnw2 at J--Tz{i320VZ$@a0u8B+yu-37XsUW
zN0Dbf0z3?S4)`qa31A*50yh9}0k#1 at grV*N3c!WH1;EdcN8bxLz&x-6cmcWlNq}<r
z6Toqx1iS%w40VBT0AB|>z#D-dBf0w^Fb6!3y2a0dPXl#e1~>)Zd=DTWeTV#{e%M)l
zn!fKcC#>UEh8eJZtYx|(pP13mJa)Wj&u$}PZ64{K?F8J4#&MOx!1KWILdU|VFbddY
zPPDxdO~b)QE5}w%H|A{e+8nXV=b0IXahKc7k2*Y9cS5e7_s4fIjAceVWKqYA at E>QU
zZ3jFI9j^^BSt#Vpu{CbpFiIj;XO$Q?Muwyu2qqPUWKk#Z<90`kD5dV1f!XB|52lom
zdP`7Se(c$7O=#9JL+1GrGnwVX5~de1bc=FBY+$>P1w4uakK2j5WVP6e9CTvie5yUg
zB7S6oIUe%^n+L4r2jD0!varY(%wach^+TSBW0 at g`wL>35I=B|Y);Y$xBZixpgUd6v
z13OANL$GBbhj-AJwH%k*c;qQ*q7Lkee_dS4aW|L=A$s8G95qQm8ovoIG+m7Ev+%If
zgPd|QpqmHXTYO!yqRBy~#&G1ikh_>N at OS9PfyJRmx958tR`OdkPJbRvOtI1$$5<V5
zf?}2!P1za}63-Ds6CZlm#vLFp8D*S1cqSy!h?Q{XBu(OaV2Sw~hNfZj*3gWQ^I(&f
zsd*z;i&B4dwVc^G;B6<w1lqzlm`%cPLn~=utbJ at J<ReweVvz7!vI1^B$<^4`Mk=vs
zn}H}JnhvvZebY9Cb>*rah$6exSL?is8SYpkqxXGi_`P!oVDm6yld{2_iLGM}*S`)=
zj<9OdqomQMYLJ<RIW_o^h8e)KeLihBbdAvL_FNtqw$sfqwZRpFz})D6t9MM>Uzg$(
zO{>F~u-f`exEFU>+ciwf!p>vd5u2{la(ICD<b`OX$7%Y+o>;BiHo9hSZ;TDGjWwQQ
zL;B6KiW3M`m&~5nRL|Er*}_CmA#{0(cdM-y)^E5a4zvi*aON!2lRaUpk|+-dLFRcY
z-7Spl>1k}kxR|$BHl3VJCg_aT!?ir at KhtC{;ejCb#+Chwa`N(Ed^zyj*kx&fh^+%&
zk;^5yz1KqnOvjclny4#%{fCAh%SqLXo33L`YsWOp#Tmo;Bd}>EX at f^azuU#$ryVEJ
z<Q at ZGW7b&M*dxP?aJDt$h#R5nN8vd6E7w02k7 at MX2%V#RT&xu)cXG*rXlzpU5K1?(
zQ at WT!6B?EY;u&#@c{o<Wo{9ZXX^C02gJVx=sRqKbQLt-zdSr&poI%F%)0shEoY=#(
zv-eURoE9?-tLMfcfz9q?yLax|wR2Bd(+0vFgH(=ZxiJ>TUg_uAp(if3w&Cv<41qHm
zkEAMtzR)B;A`-PBkq1rE<Z}qv?=%**LnlxF$vd8OGjysmHsCszz6u&gj(hGFuD{Mn
z3!}r`9!~yqvJ*E;u}fn%owFekhomAY^0bXL<93QfTRslwAdkgB5M(x)*VrU0#5f#-
zaGKq028h at edC<g;y7w?nI(*n4a2o;B6gbSHHFc;q7E3iYUn-RK%7Hr5D+~`<y}Hmi
zSg4f{MSy2buY<@IYSpD2tFAOyb%9lD)V5fyR7%B$Uahc$dSh{<FEt at vEA<jS4#q0$
zg*m;fHxA|4!Nrmo9-IpJCmDe`*fwhTnq!S>4a3!>m<RQG2{GcNU|U#eELLlEA{ML5
zhidwP#Rglfmgh@&I9FmcOu57sKrd7dv0}NPL;Cr`QsF>}dJ&%my-_LE>#`ABF4P)&
zaiv_SvE`N8ausqHD)X#Tt>~478Z1y+DpeX&j1;d_S!osDSbecjE)y?(X}PSI=5wGH
z%PaF_usN8jQf)w#CB0FahcZHP7`9fZG;|VUfi0D4#YKEgjFRY=xPa+(wp^>O>hs_*
zR)CA at W3U{oO`cG^4iP6(^JcvQ5lZh^u903sOJayy&^WewxEd{DyclzV&S=wRJwK2E
zrizj3ek)ox1BxGEX9}#F{u-Tmy^X+WcOnX89c)S_qFWIXVgYm=1m1`N6)Eh{aEJ!g
zzF^}6xDmsII|Y(0#JWz{LEMLc(MHVZBTS8(@5Wg{Pbgq(`7YKP#q`)kZAS=-vjX~f
zc3uRlLwd;=FBu^xCG?q)4*@rBe^VR{&g&h&OYDgejUx0ClsLpDPO9b*=3=L%-yDHM
zP96_oC&z4TXmaNl(&9Yf9(oC0P=mvyh<1r>A_-eZph-s%@)L9w at qA9%hEz+)E`sSu
z1k=Qfq>yndOcg4p2%T_p`4&a(HmqhL;P+%N5wRmtps~l2!N(?qXv+g9fgLsj-rQg~
zQ$29Ou@!JmV_6-Fl8~187-&P8jQPz7ckfA36M~U!#r|Z#f$(-#gCvVc!*tJ@((;oU
z<^Q)Mw|x(CVaosatK9OZ$oGE&JOq3VxC^KPR{&2U at BbEX0$2v#44g*p{}}Kq;48qL
zzzlE+a53;WY5|V|KLWlDd;~ZFYyd|9su#Qs7z3^bt^%G$P2dN>L%?T%yMZpy0ouSp
zfNBU0U>~p-7zeHc#(<|#Bls%tW#A}q0HFH86 at Ugj0i7QKz5r0Y;A6l?0kXw0Ap6NI
zkXazJKxTo=0+|Ie3;eGwaGdJrgX~<D4o1ruh(lvHl0_mntfNSQ5+zkns8DkKEUFPx
z5uQ`+K{QIz-6<;0P|Pn2Vr7*DFN!3XC9Oo4LCs`nFr at 3_+vWEOs;bC>j}Qg|Ai}3w
zCDLhC144^Ifu>It0*E>g#n3I}42k4Ys^J0=K7+BW<%*io<ODUAD#~K>42nS*=*%Bg
zusNf`B#TM?F*Q}2nx5{Ohxr2jinOBF#?RK7O$w1U(tNmxqDEmTrU(bd9=XsSIC9j1
zcq;(UXb at Udr=;+zMkQX%Bt8%pUvuzhvE!}S6Pd?^Fg;lbZx1+XnnptDHxbsIAYmkD
zYK%f1s$R(KP<bPRBKe8%k!qc2MB`Ao?fO}}*<NtXcF3+}l~w#{tzI+cOLHp+jJZNx
zFHVdIy_v+NTCG|eA1nH?YkSw>l?gJ-Hfr`%WZQnLH#Qh=yCl^``E4Q*H!;Xoc=rOl
z8)5KQiZR~Jgq+;i=Smg`*E#Qz>QV$Ovjb+(G~1LLyYvEsl0QmyrSs{fjnEd1jO9YT
zZmdeX5id2HWkm{wd8Ax$sbsua`+#?mgrgXQ+WVRrIP{tYFLj6&zV<z6M7*o2>zi>A
zD-<<fyc-LR$Tv{!S4;Wqt!buGTX=uZZU{);K8_3;^(X0atY^gpl!T9%3`9{2l?27x
zBB_AYl8SDny`_wDp0<=MV~QrP7S7X}B!LG+2?VRawUOIyStQeK^JZW=)|Pu%$&1o0
zh=uyV8mclRUgUT&- at 0kl6zTQ1=kttqrpagllh2a(RbpkME+hAW#I?iISWYM!lBS4!
I=L)m at 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
More information about the mesa-dev
mailing list