We've had indirect addressing of inputs/outputs for a long time (tgsi
supports it and softpipe/llvmpipe support it).
-Brian
On 11/11/2010 10:16 AM, Marek Olšák wrote:
BTW I remember that somebody said shader outputs (and inputs?) are not
indexable in TGSI, but now I added the CAP for it. Should that CAP go
away or are we gonna allow it?
Marek
On Wed, Nov 10, 2010 at 9:29 PM, Marek Olšák <mar...@gmail.com
<mailto:mar...@gmail.com>> wrote:
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 <mar...@gmail.com <mailto:mar...@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);
}
--
1.7.0.4
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev