Module: Mesa
Branch: master
Commit: 742d3c918f89dc263e15e67fb26dcee8c5c0eff8
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=742d3c918f89dc263e15e67fb26dcee8c5c0eff8

Author: Gert Wollny <gert.wol...@collabora.com>
Date:   Tue Aug 13 18:08:34 2019 +0200

softpipe: Add support for ARB_derivative_control

Enables and passes piglits:

spec/ARB_drivative_control/
        dfdx-coarse
        dfdx-dfdy
        dfdx-fine
        dfdy-coarse
        dfdy-fine

Signed-off-by: Gert Wollny <gert.wol...@collabora.com>
Reviewed-by: Roland Scheidegger <srol...@vmware.com>

---

 docs/features.txt                        |  2 +-
 src/gallium/auxiliary/tgsi/tgsi_exec.c   | 29 +++++++++++++++++++++++++++++
 src/gallium/drivers/softpipe/sp_screen.c |  2 +-
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/docs/features.txt b/docs/features.txt
index 831a9a6884b..3e5cfe04e29 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -215,7 +215,7 @@ GL 4.5, GLSL 4.50 -- all DONE: nvc0, radeonsi, r600
   GL_ARB_clip_control                                   DONE (freedreno, i965, 
nv50, llvmpipe, softpipe, swr)
   GL_ARB_conditional_render_inverted                    DONE (freedreno, i965, 
nv50, llvmpipe, softpipe, swr, virgl)
   GL_ARB_cull_distance                                  DONE (i965, nv50, 
llvmpipe, softpipe, swr, virgl)
-  GL_ARB_derivative_control                             DONE (i965, nv50, 
virgl)
+  GL_ARB_derivative_control                             DONE (i965, nv50, 
softpipe, virgl)
   GL_ARB_direct_state_access                            DONE (all drivers)
   GL_ARB_get_texture_sub_image                          DONE (all drivers)
   GL_ARB_shader_texture_image_samples                   DONE (i965, nv50, 
virgl)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c 
b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index 18ee27502b4..0633a4e708c 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -218,6 +218,17 @@ micro_ddx(union tgsi_exec_channel *dst,
 }
 
 static void
+micro_ddx_fine(union tgsi_exec_channel *dst,
+          const union tgsi_exec_channel *src)
+{
+   dst->f[0] =
+   dst->f[1] = src->f[TILE_TOP_RIGHT] - src->f[TILE_TOP_LEFT];
+   dst->f[2] =
+   dst->f[3] = src->f[TILE_BOTTOM_RIGHT] - src->f[TILE_BOTTOM_LEFT];
+}
+
+
+static void
 micro_ddy(union tgsi_exec_channel *dst,
           const union tgsi_exec_channel *src)
 {
@@ -228,6 +239,16 @@ micro_ddy(union tgsi_exec_channel *dst,
 }
 
 static void
+micro_ddy_fine(union tgsi_exec_channel *dst,
+          const union tgsi_exec_channel *src)
+{
+   dst->f[0] =
+   dst->f[2] = src->f[TILE_BOTTOM_LEFT] - src->f[TILE_TOP_LEFT];
+   dst->f[1] =
+   dst->f[3] = src->f[TILE_BOTTOM_RIGHT] - src->f[TILE_TOP_RIGHT];
+}
+
+static void
 micro_dmul(union tgsi_double_channel *dst,
            const union tgsi_double_channel *src)
 {
@@ -5398,10 +5419,18 @@ exec_instruction(
       exec_scalar_unary(mach, inst, micro_cos, TGSI_EXEC_DATA_FLOAT, 
TGSI_EXEC_DATA_FLOAT);
       break;
 
+   case TGSI_OPCODE_DDX_FINE:
+      exec_vector_unary(mach, inst, micro_ddx_fine, TGSI_EXEC_DATA_FLOAT, 
TGSI_EXEC_DATA_FLOAT);
+      break;
+
    case TGSI_OPCODE_DDX:
       exec_vector_unary(mach, inst, micro_ddx, TGSI_EXEC_DATA_FLOAT, 
TGSI_EXEC_DATA_FLOAT);
       break;
 
+   case TGSI_OPCODE_DDY_FINE:
+      exec_vector_unary(mach, inst, micro_ddy_fine, TGSI_EXEC_DATA_FLOAT, 
TGSI_EXEC_DATA_FLOAT);
+      break;
+
    case TGSI_OPCODE_DDY:
       exec_vector_unary(mach, inst, micro_ddy, TGSI_EXEC_DATA_FLOAT, 
TGSI_EXEC_DATA_FLOAT);
       break;
diff --git a/src/gallium/drivers/softpipe/sp_screen.c 
b/src/gallium/drivers/softpipe/sp_screen.c
index 9c1a98ec4ea..b51e14470c1 100644
--- a/src/gallium/drivers/softpipe/sp_screen.c
+++ b/src/gallium/drivers/softpipe/sp_screen.c
@@ -218,7 +218,7 @@ softpipe_get_param(struct pipe_screen *screen, enum 
pipe_cap param)
    case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
       return 1;
    case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
-      return 0;
+      return 1;
    case PIPE_CAP_SAMPLER_VIEW_TARGET:
       return 1;
    case PIPE_CAP_FAKE_SW_MSAA:

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to