1*61046927SAndroid Build Coastguard WorkerHow to add a new post-processing filter 2*61046927SAndroid Build Coastguard Worker======================================= 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard WorkerThe Gallium post-processing queue works by passing the current screen to a fragment shader. 5*61046927SAndroid Build Coastguard WorkerThese shaders may be written in any supported language, but are added here in TGSI text 6*61046927SAndroid Build Coastguard Workerassembly. 7*61046927SAndroid Build Coastguard Worker 8*61046927SAndroid Build Coastguard WorkerYou can translate GLSL/ARB fairly easily via llvmpipe (LP_DEBUG=tgsi). I don't know the 9*61046927SAndroid Build Coastguard Workerstatus of the D3D gallium frontend, but if/when that works, I'd assume HLSL would be possible 10*61046927SAndroid Build Coastguard Workertoo. 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Worker 13*61046927SAndroid Build Coastguard Worker 14*61046927SAndroid Build Coastguard WorkerSteps 15*61046927SAndroid Build Coastguard Worker===== 16*61046927SAndroid Build Coastguard Worker 17*61046927SAndroid Build Coastguard Worker1. Add it to PP 18*61046927SAndroid Build Coastguard Worker2. Make it known to PP 19*61046927SAndroid Build Coastguard Worker3. Make it known to driconf 20*61046927SAndroid Build Coastguard Worker4. ???? 21*61046927SAndroid Build Coastguard Worker5. Profit 22*61046927SAndroid Build Coastguard Worker 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Worker 25*61046927SAndroid Build Coastguard Worker 26*61046927SAndroid Build Coastguard Worker1. Add it to PP 27*61046927SAndroid Build Coastguard Worker--------------- 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard WorkerOnce you have the shader(s) in TGSI asm, put them to static const char arrays in a header 30*61046927SAndroid Build Coastguard Workerfile (see pp_colors.h). 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard WorkerAdd the filter's prototypes (main and init functions) to postprocess.h. This is mostly a 33*61046927SAndroid Build Coastguard Workercopy-paste job with only changing the name. 34*61046927SAndroid Build Coastguard Worker 35*61046927SAndroid Build Coastguard WorkerThen create a file containing empty main and init functions, named as you specified above. 36*61046927SAndroid Build Coastguard WorkerSee pp_colors.c for an example. 37*61046927SAndroid Build Coastguard Worker 38*61046927SAndroid Build Coastguard Worker 39*61046927SAndroid Build Coastguard Worker 40*61046927SAndroid Build Coastguard Worker2. Make it known to PP 41*61046927SAndroid Build Coastguard Worker---------------------- 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard WorkerAdd your filter to filters.h, in a correct place. Placement is important, AA should usually 44*61046927SAndroid Build Coastguard Workerbe the last effect in the queue for example. 45*61046927SAndroid Build Coastguard Worker 46*61046927SAndroid Build Coastguard WorkerName is the config option your filter will be enabled by, both in driconf and as an env var. 47*61046927SAndroid Build Coastguard Worker 48*61046927SAndroid Build Coastguard WorkerInner temp means an intermediate framebuffer you may use in your filter to store 49*61046927SAndroid Build Coastguard Workerresults between passes. If you have a single-pass filter, request 0 of those. 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard WorkerShaders is the number of shaders your filter needs. The minimum is 2. 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker 54*61046927SAndroid Build Coastguard WorkerYou could also write the init and main functions now. If your filter is single-pass without 55*61046927SAndroid Build Coastguard Workera vertex shader and any other input than the main screen, you can use pp_nocolor as your 56*61046927SAndroid Build Coastguard Workermain function as is. 57*61046927SAndroid Build Coastguard Worker 58*61046927SAndroid Build Coastguard Worker 59*61046927SAndroid Build Coastguard Worker 60*61046927SAndroid Build Coastguard Worker3. Make it known to driconf 61*61046927SAndroid Build Coastguard Worker--------------------------- 62*61046927SAndroid Build Coastguard Worker 63*61046927SAndroid Build Coastguard WorkerFirst time outside of auxiliary/postprocess. First, add a suitable description to 64*61046927SAndroid Build Coastguard Workersrc/util/driconf.h. 65*61046927SAndroid Build Coastguard WorkerUse the name you put into filters.h as the config option name. 66*61046927SAndroid Build Coastguard Worker 67*61046927SAndroid Build Coastguard WorkerWith driconf aware of the option, make Gallium aware of it too. Add it to 68*61046927SAndroid Build Coastguard Workerfrontends/dri/common/dri_screen.c in a proper section, specifying its default value and 69*61046927SAndroid Build Coastguard Workerthe accepted range (if applicable). 70*61046927SAndroid Build Coastguard Worker 71*61046927SAndroid Build Coastguard WorkerDo check that __driNConfigOptions is still correct after the addition. 72*61046927SAndroid Build Coastguard Worker 73*61046927SAndroid Build Coastguard Worker 74*61046927SAndroid Build Coastguard Worker 75*61046927SAndroid Build Coastguard Worker4. ???? 76*61046927SAndroid Build Coastguard Worker------- 77*61046927SAndroid Build Coastguard Worker 78*61046927SAndroid Build Coastguard WorkerTesting, praying, hookers, blow, sacrificial lambs... 79*61046927SAndroid Build Coastguard Worker 80*61046927SAndroid Build Coastguard Worker 81*61046927SAndroid Build Coastguard Worker 82*61046927SAndroid Build Coastguard Worker5. Profit 83*61046927SAndroid Build Coastguard Worker--------- 84*61046927SAndroid Build Coastguard Worker 85*61046927SAndroid Build Coastguard WorkerAssuming you got here, sharing is caring. Send your filter to mesa-dev. 86*61046927SAndroid Build Coastguard Worker 87*61046927SAndroid Build Coastguard Worker 88