mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-26 14:38:13 +02:00
Models C0 and D0 support these opcodes too. total instructions in shared programs: 10869461 -> 10856992 (-0.11%) instructions in affected programs: 1467666 -> 1455197 (-0.85%) helped: 6012 HURT: 1413 Instructions are helped. total threads in shared programs: 431014 -> 431010 (<.01%) threads in affected programs: 8 -> 4 (-50.00%) helped: 0 HURT: 2 total uniforms in shared programs: 5432771 -> 5430909 (-0.03%) uniforms in affected programs: 183047 -> 181185 (-1.02%) helped: 976 HURT: 128 Uniforms are helped. total max-temps in shared programs: 2235272 -> 2234069 (-0.05%) max-temps in affected programs: 38163 -> 36960 (-3.15%) helped: 1262 HURT: 168 Max-temps are helped. total spills in shared programs: 4331 -> 4363 (0.74%) spills in affected programs: 964 -> 996 (3.32%) helped: 6 HURT: 47 total fills in shared programs: 6527 -> 6622 (1.46%) fills in affected programs: 2047 -> 2142 (4.64%) helped: 6 HURT: 47 total sfu-stalls in shared programs: 15807 -> 15935 (0.81%) sfu-stalls in affected programs: 787 -> 915 (16.26%) helped: 71 HURT: 172 Sfu-stalls are HURT. total inst-and-stalls in shared programs: 10885268 -> 10872927 (-0.11%) inst-and-stalls in affected programs: 1469423 -> 1457082 (-0.84%) helped: 5998 HURT: 1417 Inst-and-stalls are helped. total nops in shared programs: 184280 -> 185612 (0.72%) nops in affected programs: 10000 -> 11332 (13.32%) helped: 311 HURT: 1193 Nops are HURT. The results show a reduction in register pressure, but an increase in spills, which looks contradictory. This is because for some reason, this optimization makes the NIR scheduler produce code for some shaders in Godot that cause additional spilling, but the problem seems to be exclusive to Godot shaders and not really related to the optimization itself but to how the NIR scheduler works. Excluding Godot shaders we actually see a decrease in spills and a slightly larger improvement in instruction counts: total instructions in shared programs: 10720106 -> 10707621 (-0.12%) instructions in affected programs: 1375316 -> 1362831 (-0.91%) helped: 5948 HURT: 1364 Instructions are helped. total threads in shared programs: 428248 -> 428244 (<.01%) threads in affected programs: 8 -> 4 (-50.00%) helped: 0 HURT: 2 total spills in shared programs: 3729 -> 3712 (-0.46%) spills in affected programs: 451 -> 434 (-3.77%) helped: 6 HURT: 0 total fills in shared programs: 4738 -> 4714 (-0.51%) fills in affected programs: 564 -> 540 (-4.26%) helped: 6 HURT: 0 Comparing only shaders from Godot: total instructions in shared programs: 149355 -> 149371 (0.01%) instructions in affected programs: 92350 -> 92366 (0.02%) helped: 64 HURT: 49 Inconclusive result (value mean confidence interval includes 0). total max-temps in shared programs: 16477 -> 16472 (-0.03%) max-temps in affected programs: 180 -> 175 (-2.78%) helped: 5 HURT: 0 Max-temps are helped. total spills in shared programs: 602 -> 651 (8.14%) spills in affected programs: 513 -> 562 (9.55%) helped: 0 HURT: 47 total fills in shared programs: 1789 -> 1908 (6.65%) fills in affected programs: 1483 -> 1602 (8.02%) helped: 0 HURT: 47 Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31480>
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
# SPDX-License-Identifier: MIT
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
a = 'a'
|
|
|
|
has_unpack_sat = 'c && v3d_device_has_unpack_sat(c->devinfo)'
|
|
has_unpack_max0 = 'c && v3d_device_has_unpack_max0(c->devinfo)'
|
|
|
|
lower_alu = [
|
|
(('f2i8', a), ('i2i8', ('f2i32', a))),
|
|
(('f2i16', a), ('i2i16', ('f2i32', a))),
|
|
|
|
(('f2u8', a), ('u2u8', ('f2u32', a))),
|
|
(('f2u16', a), ('u2u16', ('f2u32', a))),
|
|
|
|
(('i2f32', 'a@8'), ('i2f32', ('i2i32', a))),
|
|
(('i2f32', 'a@16'), ('i2f32', ('i2i32', a))),
|
|
|
|
(('u2f32', 'a@8'), ('u2f32', ('u2u32', a))),
|
|
(('u2f32', 'a@16'), ('u2f32', ('u2u32', a))),
|
|
|
|
(('fmin', ('fmax', a, -1.0), 1.0), ('fsat_signed', a), has_unpack_sat),
|
|
(('fmax', ('fmin', a, 1.0), -1.0), ('fsat_signed', a), has_unpack_sat),
|
|
(('fmax', a, 0.0), ('fclamp_pos', a), has_unpack_max0),
|
|
]
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-p', '--import-path', required=True)
|
|
args = parser.parse_args()
|
|
sys.path.insert(0, args.import_path)
|
|
run()
|
|
|
|
def run():
|
|
import nir_algebraic # pylint: disable=import-error
|
|
|
|
print('#include "v3d_compiler.h"')
|
|
|
|
print(nir_algebraic.AlgebraicPass("v3d_nir_lower_algebraic",
|
|
lower_alu,
|
|
[
|
|
("const struct v3d_compile *", "c")
|
|
]).render())
|
|
|
|
if __name__ == '__main__':
|
|
main()
|