[Mesa-dev] [PATCH 0/5] Add ARB_derivative_control support

Ilia Mirkin imirkin at alum.mit.edu
Wed Aug 13 21:52:09 PDT 2014


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



More information about the mesa-dev mailing list