Skip to content

etnaviv TS buffer sharing

Lucas Stach requested to merge lynxeye/mesa:etnaviv-ts-sharing into main

This MR enables etnaviv to share the TS buffer between compositor and client and also to the display engine on hardware where this is possible. This gets rid of a lot of tile fills and/or decompressions, significantly improving performance. More details about the different levels of performance impact on different hardware generations can be found in the commit message.

glmark2 running on Weston is kind of a best case to show of the performance improvements, as many scenes include a lot of unfilled tiles. Real-world performance impact will be lower, but it nicely shows the effect of the changes. Some of the scenes go from being GPU or memory bound to being CPU bound.

benchmark FPS GC3000 before FPS GC3000 after FPS GC7000 before FPS GC7000 after
[build] use-vbo=false 482 545 1111 1691
[build] use-vbo=true 914 1176 1296 3085
[texture] texture-filter=nearest 837 1038 924 1761
[texture] texture-filter=linear 811 1022 900 1691
[texture] texture-filter=mipmap 826 1074 908 1697
[shading] shading=gouraud 689 950 913 1479
[shading] shading=blinn-phong-inf 548 711 788 1256
[shading] shading=phong 369 442 559 766
[shading] shading=cel 272 308 421 533
[bump] bump-render=high-poly 375 454 515 697
[bump] bump-render=normals 720 1011 1008 1855
[bump] bump-render=height 546 714 758 1167
[effect2d] kernel=0,1,0;1,-4,1;0,1,0; 209 211 300 369
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1; 62 62 121 132
[pulsar] light=false:quads=5:texture=false 617 704 1121 2103
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4 96 97 161 178
[desktop] effect=shadow:windows=4 360 366 482 675
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map 71 73 158 165
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata 67 70 147 154
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map 95 97 229 240
[ideas] speed=duration 143 140 323 325
[jellyfish] 171 174 236 263
[terrain] 11 11 20 20
[shadow] 427 499 600 827
[refract] 39 39 47 48
[conditionals] fragment-steps=0:vertex-steps=0 709 843 848 1549
[conditionals] fragment-steps=5:vertex-steps=0 185 196 281 332
[conditionals] fragment-steps=0:vertex-steps=5 631 738 816 1452
[function] fragment-complexity=low:fragment-steps=5 384 428 527 748
[function] fragment-complexity=medium:fragment-steps=5 181 192 279 329
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5 354 392 513 721
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5 354 392 513 721
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5 179 189 280 331
Edited by Lucas Stach

Merge request reports