• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# R600 shader from NIR
2
3This code is an attempt to implement a NIR backend for r600.
4
5## State
6
7piglits gpu passes mostly like with TGSI, there are some fixes but also a few regressions.
8
9CTS gles
10 - 2 passes like with TGSI
11 - 3 no regressions, a few fixes compared to TGSI
12 - 31
13    * a few fixes with interpolation specifiers
14    * a few regressiones with seperate_shader.random
15    * syncronization has some unstable tests, this might be because global syncronization is missing (in both)
16
17## Currently missing features w.r.t. TGSI:
18
19 - struct support
20
21## Needed optimizations:
22
23  - Register allocator and scheduler (Could the sb allocator and scheduler
24    be ported?)
25
26  - peepholes:
27    - compare + set predicate
28
29  - copy propagation:
30    - Moves from inputs are usually not required, they could be forwarded
31    - texture operations often move additional parameters in extra registers
32      but they are actually needed in the same registes they come from and
33      could just be swizzled into the right place
34      (lower in NIR like it is done in e.g. in ETNAVIV)
35
36
37## Problems
38
39  - struct IO is not lowered. lower_io would need a rewrite of most IO in
40    VS, GS, and FS
41  - fp64 needs additional lowering to replace load, split and merge with vec2 ops
42    nir_to_tgsi has some stuff there
43
44## Work plan
45
46The implementation uses C++ to separate the code for the different
47shader types and the byte code generation backends. The initial attempt
48will use the already available r600_asm code
49