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

Author: Rob Clark <robdcl...@gmail.com>
Date:   Sat Nov 18 10:40:49 2017 -0500

freedreno/ir3: add texture gather support

Signed-off-by: Rob Clark <robdcl...@gmail.com>

---

 docs/features.txt                                    |  2 +-
 src/gallium/drivers/freedreno/freedreno_screen.c     |  6 +++++-
 src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c | 13 ++++++++++++-
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/docs/features.txt b/docs/features.txt
index 11c40293eb..633d259373 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -130,7 +130,7 @@ GL 4.0, GLSL 4.00 --- all DONE: i965/gen7+, nvc0, r600, 
radeonsi
   GL_ARB_tessellation_shader                            DONE (i965/gen7+)
   GL_ARB_texture_buffer_object_rgb32                    DONE (freedreno, 
i965/gen6+, llvmpipe, softpipe, swr)
   GL_ARB_texture_cube_map_array                         DONE (i965/gen6+, 
nv50, llvmpipe, softpipe)
-  GL_ARB_texture_gather                                 DONE (i965/gen6+, 
nv50, llvmpipe, softpipe, swr)
+  GL_ARB_texture_gather                                 DONE (freedreno/a5xx, 
i965/gen6+, nv50, llvmpipe, softpipe, swr)
   GL_ARB_texture_query_lod                              DONE (freedreno, i965, 
nv50, llvmpipe, softpipe)
   GL_ARB_transform_feedback2                            DONE (i965/gen6+, 
nv50, llvmpipe, softpipe, swr)
   GL_ARB_transform_feedback3                            DONE (i965/gen7+, 
llvmpipe, softpipe, swr)
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c 
b/src/gallium/drivers/freedreno/freedreno_screen.c
index 62dfd2651c..e61344fd10 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -263,6 +263,11 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
                        return 4;
                return 0;
 
+       case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
+               if (is_a5xx(screen))
+                       return 4;
+               return 0;
+
        /* Unsupported features. */
        case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
        case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
@@ -271,7 +276,6 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
        case PIPE_CAP_QUERY_PIPELINE_STATISTICS:
        case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
        case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT:
-       case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
        case PIPE_CAP_TEXTURE_GATHER_SM5:
        case PIPE_CAP_SAMPLE_SHADING:
        case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c 
b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
index 1e88392638..da4aeaa7ac 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
@@ -2303,9 +2303,20 @@ emit_tex(struct ir3_context *ctx, nir_tex_instr *tex)
        case nir_texop_txd:      opc = OPC_SAMGQ;    break;
        case nir_texop_txf:      opc = OPC_ISAML;    break;
        case nir_texop_lod:      opc = OPC_GETLOD;   break;
+       case nir_texop_tg4:
+               /* NOTE: a4xx might need to emulate gather w/ txf (this is
+                * what blob does, seems gather  is broken?), and a3xx did
+                * not support it (but probably could also emulate).
+                */
+               switch (tex->component) {
+               case 0:              opc = OPC_GATHER4R; break;
+               case 1:              opc = OPC_GATHER4G; break;
+               case 2:              opc = OPC_GATHER4B; break;
+               case 3:              opc = OPC_GATHER4A; break;
+               }
+               break;
        case nir_texop_txf_ms:
        case nir_texop_txs:
-       case nir_texop_tg4:
        case nir_texop_query_levels:
        case nir_texop_texture_samples:
        case nir_texop_samples_identical:

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

Reply via email to