1e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenHow to add a new post-processing filter 2e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen======================================= 3e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 4e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenThe Gallium post-processing queue works by passing the current screen to a fragment shader. 5e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenThese shaders may be written in any supported language, but are added here in TGSI text 6e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanenassembly. 7e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 8e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenYou can translate GLSL/ARB fairly easily via llvmpipe (LP_DEBUG=tgsi). I don't know the 9e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanenstatus of the D3D state tracker, but if/when that works, I'd assume HLSL would be possible 10e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanentoo. 11e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 12e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 13e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 14e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenSteps 15e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen===== 16e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 17e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen1. Add it to PP 18e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen2. Make it known to PP 19e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen3. Make it known to driconf 20e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen4. ???? 21e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen5. Profit 22e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 23e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 24e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 25e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 26e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen1. Add it to PP 27e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen--------------- 28e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 29e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenOnce you have the shader(s) in TGSI asm, put them to static const char arrays in a header 30e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanenfile (see pp_colors.h). 31e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 32e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenAdd the filter's prototypes (main and init functions) to postprocess.h. This is mostly a 33e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanencopy-paste job with only changing the name. 34e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 35e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenThen create a file containing empty main and init functions, named as you specified above. 36e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenSee pp_colors.c for an example. 37e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 38e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 39e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 40e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen2. Make it known to PP 41e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen---------------------- 42e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 43e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenAdd your filter to filters.h, in a correct place. Placement is important, AA should usually 44e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanenbe the last effect in the queue for example. 45e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 46e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenName is the config option your filter will be enabled by, both in driconf and as an env var. 47e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 48e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenInner temp means an intermediate framebuffer you may use in your filter to store 49e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanenresults between passes. If you have a single-pass filter, request 0 of those. 50e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 51e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenShaders is the number of shaders your filter needs. The minimum is 2. 52e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 53e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 54e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenYou could also write the init and main functions now. If your filter is single-pass without 55e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanena vertex shader and any other input than the main screen, you can use pp_nocolor as your 56e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanenmain function as is. 57e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 58e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 59e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 60e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen3. Make it known to driconf 61e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen--------------------------- 62e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 63e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenFirst time outside of auxiliary/postprocess. First, add a suitable description to 64e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanendrivers/dri/common/xmlpool/t_options.h, and regenerate options.h by running make in that 65e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanendirectory. Use the name you put into filters.h as the config option name. 66e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 67e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenWith driconf aware of the option, make Gallium aware of it too. Add it to 68e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanenstate_trackers/dri/common/dri_screen.c in a proper section, specifying its default value and 69e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanenthe accepted range (if applicable). 70e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 71e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenDo check that __driNConfigOptions is still correct after the addition. 72e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 73e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 74e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 75e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen4. ???? 76e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen------- 77e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 78e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenTesting, praying, hookers, blow, sacrificial lambs... 79e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 80e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 81e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 82e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen5. Profit 83e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen--------- 84e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 85e86e4cf128105db8b3e18d34b28040a26be6516cLauri KasanenAssuming you got here, sharing is caring. Send your filter to mesa-dev. 86e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 87e86e4cf128105db8b3e18d34b28040a26be6516cLauri Kasanen 88