Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed
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 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 --- 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
Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed
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
[Mesa-dev] [PATCH] 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 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
Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed
On Wed, 2010-11-10 at 12:29 -0800, Marek Olšák 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 --- 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 = !screveryeen-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); } Marek, I don't object the caps per se -- they seem unavoidable -- but this will change the current behavior for all existing drivers. So either this change is immediately followed with one to implement handle these new caps on all pipe drivers (it's OK if you don't even build them), or the caps semantics should be negated, e.g, PIPE_SHADER_CAP_NO_INDIRECT_INPUT_ADDR. I don't feel strongly either way, but it has happened too often for drivers nobody is currently looking at become broken due to new caps. Jose ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed
On Wed, Nov 10, 2010 at 9:48 PM, José Fonseca jfons...@vmware.com wrote: On Wed, 2010-11-10 at 12:29 -0800, Marek Olšák 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 --- 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 = !screveryeen-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); } Marek, I don't object the caps per se -- they seem unavoidable -- but this will change the current behavior for all existing drivers. So either this change is immediately followed with one to implement handle these new caps on all pipe drivers (it's OK if you don't even build them), or the caps semantics should be negated, e.g, PIPE_SHADER_CAP_NO_INDIRECT_INPUT_ADDR. I don't feel strongly either way, but it has happened too often for drivers nobody is currently looking at become broken due to new caps. I was going to fix get_shader_param in all the drivers afterwards to match the current behavior. I am well aware of the consequences the patch would have. Marek ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] gallium: add CAPs for indirect addressing and lower it in st/mesa when needed
On Wed, 2010-11-10 at 13:24 -0800, Marek Olšák wrote: On Wed, Nov 10, 2010 at 9:48 PM, José Fonseca jfons...@vmware.commailto:jfons...@vmware.com wrote: On Wed, 2010-11-10 at 12:29 -0800, Marek Olšák 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.commailto: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 = !screveryeen-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); } Marek, I don't object the caps per se -- they seem unavoidable -- but this will change the current behavior for all existing drivers. So either this change is immediately followed with one to implement handle these new caps on all pipe drivers (it's OK if you don't even build them), or the caps semantics should be negated, e.g, PIPE_SHADER_CAP_NO_INDIRECT_INPUT_ADDR. I don't feel strongly either way, but it has happened too often for drivers nobody is currently looking at become broken due to new caps. I was going to fix get_shader_param in all the drivers afterwards to match the current behavior. I am well aware of the consequences the patch would have. Great. Sorry for stating the obvious. Looks good to me FWIW. Jose ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev