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