nir/lower_tex: add lowering for texture gradient on cube maps
authorIago Toral Quiroga <itoral@igalia.com>
Wed, 30 Nov 2016 08:40:43 +0000 (09:40 +0100)
committerIago Toral Quiroga <itoral@igalia.com>
Tue, 13 Dec 2016 09:32:00 +0000 (10:32 +0100)
commita8e740c3547b0209d04b505d95a79794db31ce0b
tree010a776eb5d4f28abc6ebd422bafa39d76e56a54
parentbac303c286de2a07912333a775bf4af18cd04e7a
nir/lower_tex: add lowering for texture gradient on cube maps

This is ported from the Intel lowering pass that we use with GLSL IR.
The NIR pass only handles cube maps, not shadow samplers, which are
also lowered for gen < 8 on Intel hardware. We will add support for
that in a later patch, at which point we should be able to remove
the GLSL IR lowering pass.

v2:
- added a helper to retrieve ddx/ddy parameters (Ken)
- No need to make size.z=1.0, we are only using component x anyway (Iago)

v3:
- Get rid of the ddx/ddy helper and use nir_tex_instr_src_index
  instead (Ken, Eric)

v4:
- When emitting the textureLod operation, copy all texture parameters
  from the original textureGrad() (except for ddx/ddy) using a loop
- Add a 'continue' statement if the lowering makes progress because it
  replaces the original texture instruction

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v3)
src/compiler/nir/nir.h
src/compiler/nir/nir_lower_tex.c