Mesa (master): gallium: add CAPs for indirect addressing and lower it in st /mesa when needed

Marek Olšák mareko at kemper.freedesktop.org
Fri Nov 12 02:21:58 UTC 2010


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Wed Nov 10 20:41:55 2010 +0100

gallium: add CAPs for indirect addressing and lower it in st/mesa when needed

Required because ATI and NVIDIA DX9 GPUs do not support indirect addressing
of temps, inputs, outputs, and consts (FS-only) or the hw support is so
limited that we cannot use it.

This should make r300g and possibly nvfx more feature complete.

Signed-off-by: Marek Olšák <maraeo at gmail.com>

---

 src/gallium/include/pipe/p_defines.h   |    5 +++++
 src/mesa/state_tracker/st_extensions.c |    9 +++++++++
 2 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 53f7b60..6cca301 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -483,7 +483,12 @@ enum pipe_shader_cap
    PIPE_SHADER_CAP_MAX_TEMPS,
    PIPE_SHADER_CAP_MAX_ADDRS,
    PIPE_SHADER_CAP_MAX_PREDS,
+   /* boolean caps */
    PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED,
+   PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR,
+   PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR,
+   PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR,
+   PIPE_SHADER_CAP_INDIRECT_CONST_ADDR,
 };
 
 /**
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 2720f44..1327491 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -175,6 +175,15 @@ void st_init_limits(struct st_context *st)
 
       options->EmitNoCont = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED);
 
+      options->EmitNoIndirectInput = !screen->get_shader_param(screen, i,
+                                        PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR);
+      options->EmitNoIndirectOutput = !screen->get_shader_param(screen, i,
+                                        PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR);
+      options->EmitNoIndirectTemp = !screen->get_shader_param(screen, i,
+                                        PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR);
+      options->EmitNoIndirectUniform = !screen->get_shader_param(screen, i,
+                                        PIPE_SHADER_CAP_INDIRECT_CONST_ADDR);
+
       if(options->EmitNoLoops)
          options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536);
    }




More information about the mesa-commit mailing list