5
local posix = require "posix"
7
io.write("Analyzing Data...\n")
18
for k,v in pairs(tbl) do
25
function start_cmdstream(name)
26
testname = posix.basename(name)
27
gpuname = posix.basename(posix.dirname(name))
28
--io.write("START: gpuname=" .. gpuname .. ", testname=" .. testname .. "\n");
29
local gpu = results[gpuname]
31
gpu = {["tests"] = {}, ["regvals"] = {}}
32
results[gpuname] = gpu
34
test = {["draws"] = {}}
35
gpu["tests"][testname] = test
38
function draw(primtype, nindx)
39
-- RECTLIST is only used internally.. we want to ignore it for
40
-- now, although it could potentially be interesting to track
41
-- these separately (separating clear/restore/resolve) just to
42
-- figure out which registers are used for which..
43
if primtype == "DI_PT_RECTLIST" then
47
local draw = {["primtype"] = primtype, ["regs"] = regtbl}
48
local didx = tblsz(test["draws"])
50
test["draws"][didx] = draw
52
-- populate current regs. For now just consider ones that have
53
-- been written.. maybe we need to make that configurable in
54
-- case it filters out too many registers.
55
for regbase=0,0xffff do
56
if regs.written(regbase) ~= 0 then
57
local regval = regs.val(regbase)
59
-- track reg vals per draw:
60
regtbl[regbase] = regval
62
-- also track which reg vals appear in which tests:
63
local uniq_regvals = results[gpuname]["regvals"][regbase]
64
if uniq_regvals == nil then
66
results[gpuname]["regvals"][regbase] = uniq_regvals;
68
local drawlist = uniq_regvals[regval]
69
if drawlist == nil then
71
uniq_regvals[regval] = drawlist
73
table.insert(drawlist, testname .. "." .. didx)
77
-- TODO maybe we want to whitelist a few well known regs, for the
78
-- convenience of the code that runs at the end to analyze the data?
79
-- TODO also would be useful to somehow capture CP_SET_BIN..
83
function end_cmdstream()
89
function print_draws(gpuname, gpu)
90
io.write(" " .. gpuname .. "\n")
91
for testname,test in pairs(gpu["tests"]) do
92
io.write(" " .. testname .. ", draws=" .. #test["draws"] .. "\n")
93
for didx,draw in pairs(test["draws"]) do
94
io.write(" " .. didx .. ": " .. draw["primtype"] .. "\n")
99
function drawlistname(drawlist)
101
for idx,draw in pairs(drawlist) do
105
name = name .. ":" .. draw
113
function dumpmatches(name)
114
for gpuname,gpu in pairs(results) do
115
local r = rnntbl[gpuname]
117
io.write("loading rnn database: \n" .. gpuname)
118
r = rnn.init(gpuname)
121
for regbase,regvals in pairs(gpu["regvals"]) do
122
for regval,drawlist in pairs(regvals) do
123
local name2 = drawlistname(drawlist)
124
if name == name2 then
125
io.write(string.format(" %s:%s:\t%08x %s\n",
126
gpuname, rnn.regname(r, regbase),
127
regval, rnn.regval(r, regbase, regval)))
135
-- drawlistnames that we've already dumped:
138
for gpuname,gpu in pairs(results) do
139
-- print_draws(gpuname, gpu)
140
for regbase,regvals in pairs(gpu["regvals"]) do
141
for regval,drawlist in pairs(regvals) do
142
local name = drawlistname(drawlist)
143
if dumped[name] == nil then
144
io.write("\n" .. name .. ":\n")