blob: 42a5928a6efbba75a261f2eca75c5330dfc2f980 [file] [log] [blame]
# Copyright 2020 Project U-Ray Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re
import sys
import json
line_re = re.compile(r'F(0x[0-9A-Fa-f]+)W(\d+)B(\d+)')
frames_to_tiles = {} # (start, size, tile, tile offset)
with open(sys.argv[1]) as tb_f:
tbj = json.load(tb_f)
for tilename, tiledata in tbj.items():
tile_offset = 0
for chunk in tiledata:
frame, start, size = chunk
if frame not in frames_to_tiles:
frames_to_tiles[frame] = []
frames_to_tiles[frame].append((start, size, tilename, tile_offset))
tile_offset += size
tile_bits = {}
# Always write these tiles to avoid correlation issues
# (distinguishing between all/no bits)
for tilename, tiledata in tbj.items():
if "INT_INTF_L_IO" in tilename:
tile_bits[tilename] = set()
with open(sys.argv[2]) as df:
for line in df:
m = line_re.match(line)
if not m:
continue
frame = int(m[1], 16)
if frame not in frames_to_tiles:
continue
framebit = int(m[2]) * 32 + int(m[3])
for fb in frames_to_tiles[frame]:
start, size, tile, toff = fb
if framebit >= start and framebit < (start + size):
if tile not in tile_bits:
tile_bits[tile] = set()
tile_bits[tile].add(toff + (framebit - start))
for tile, bits in sorted(tile_bits.items()):
print(".tile %s" % tile)
for b in sorted(bits):
print(b)