I left all the variants as separate operations in the glsl ir. However for gallium I only added the fine version, as it seems like DDX can do pretty much whatever it wants. I was on the fence about adding coarse versions as well and then using the FragmentShaderDerivative hint to select one or the other in the glsl -> tgsi conversion.
In the case of nv50/nvc0, doing the fine version is pretty much the only (easy) way of doing derivatives. I haven't traced the blob to see how it handles things yet. In any case, on nv50/nvc0 all this is completely moot, at least for now. Curious about what the situation with other hardware is. Also, the extension spec claims to require GLSL 4.00, which seems a little extreme. Instead I restrict it to core contexts. Let me know if I should change this. I will try to send some piglits out for this soon, but it's all fairly straightforward... Ilia Mirkin (5): mesa: add ARB_derivative_control extension bit glsl: add ARB_derivative control support gallium: add opcodes/cap for fine derivative support mesa/st: add support for emitting fine derivative opcodes nv50,nvc0: add support for fine derivatives docs/GL3.txt | 2 +- src/gallium/auxiliary/tgsi/tgsi_info.c | 3 ++ src/gallium/auxiliary/tgsi/tgsi_util.c | 2 + src/gallium/docs/source/screen.rst | 2 + src/gallium/docs/source/tgsi.rst | 12 +++++- src/gallium/drivers/freedreno/freedreno_screen.c | 1 + src/gallium/drivers/i915/i915_screen.c | 1 + src/gallium/drivers/ilo/ilo_screen.c | 1 + src/gallium/drivers/llvmpipe/lp_screen.c | 1 + .../drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp | 4 ++ src/gallium/drivers/nouveau/nv30/nv30_screen.c | 1 + src/gallium/drivers/nouveau/nv50/nv50_screen.c | 1 + src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 1 + src/gallium/drivers/r300/r300_screen.c | 1 + src/gallium/drivers/r600/r600_pipe.c | 1 + src/gallium/drivers/radeonsi/si_pipe.c | 1 + src/gallium/drivers/softpipe/sp_screen.c | 1 + src/gallium/drivers/svga/svga_screen.c | 1 + src/gallium/drivers/vc4/vc4_screen.c | 1 + src/gallium/include/pipe/p_defines.h | 1 + src/gallium/include/pipe/p_shader_tokens.h | 5 ++- src/glsl/builtin_functions.cpp | 48 ++++++++++++++++++++++ src/glsl/glcpp/glcpp-parse.y | 3 ++ src/glsl/glsl_parser_extras.cpp | 1 + src/glsl/glsl_parser_extras.h | 2 + src/glsl/ir.h | 4 ++ src/glsl/ir_validate.cpp | 4 ++ src/mesa/main/extensions.c | 1 + src/mesa/main/mtypes.h | 1 + src/mesa/state_tracker/st_extensions.c | 3 +- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 9 +++- 31 files changed, 114 insertions(+), 6 deletions(-) -- 1.8.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev