I'm dropping this patch. I've also sent a new version of patch 2 as well as new patches that dynamically allocate some of the arrays.
The complete patch series with all feedback comments resolved is also here: http://cgit.freedesktop.org/~mareko/mesa/log/?h=tgsi-arrays (starting from "glsl_to_tgsi: don't use a static array size for "array_sizes") Marek On Mon, May 25, 2015 at 8:42 PM, Roland Scheidegger <srol...@vmware.com> wrote: > Do we really need this? > I think ideally we wouldn't really need any limit on this, as it is > already limited by the max number of the temps (though obviously that > number is higher). d3d10 doesn't seem to have any such limit neither. > If some driver can't do it, I think it's not unreasonable to expect the > driver to do the necessary array merging. > > Roland > > > Am 24.05.2015 um 13:19 schrieb Marek Olšák: >> From: Marek Olšák <marek.ol...@amd.com> >> >> --- >> src/gallium/drivers/radeon/radeon_llvm.h | 3 +-- >> src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c | 4 ++-- >> src/gallium/include/pipe/p_state.h | 1 + >> src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 11 +++-------- >> 4 files changed, 7 insertions(+), 12 deletions(-) >> >> diff --git a/src/gallium/drivers/radeon/radeon_llvm.h >> b/src/gallium/drivers/radeon/radeon_llvm.h >> index 8612ef8..f249ca6 100644 >> --- a/src/gallium/drivers/radeon/radeon_llvm.h >> +++ b/src/gallium/drivers/radeon/radeon_llvm.h >> @@ -33,7 +33,6 @@ >> >> #define RADEON_LLVM_MAX_INPUTS 32 * 4 >> #define RADEON_LLVM_MAX_OUTPUTS 32 * 4 >> -#define RADEON_LLVM_MAX_ARRAYS 16 >> >> #define RADEON_LLVM_INITIAL_CF_DEPTH 4 >> >> @@ -130,7 +129,7 @@ struct radeon_llvm_context { >> unsigned loop_depth; >> unsigned loop_depth_max; >> >> - struct tgsi_declaration_range arrays[RADEON_LLVM_MAX_ARRAYS]; >> + struct tgsi_declaration_range arrays[PIPE_MAX_SHADER_ARRAYS]; >> unsigned num_arrays; >> >> LLVMValueRef main_fn; >> diff --git a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c >> b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c >> index 8638537..2bef4b2 100644 >> --- a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c >> +++ b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c >> @@ -86,7 +86,7 @@ get_array_range(struct lp_build_tgsi_context *bld_base, >> { >> struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base); >> if (File != TGSI_FILE_TEMPORARY || reg->ArrayID == 0 || >> - reg->ArrayID > RADEON_LLVM_MAX_ARRAYS) { >> + reg->ArrayID > PIPE_MAX_SHADER_ARRAYS) { >> struct tgsi_declaration_range range; >> range.First = 0; >> range.Last = bld_base->info->file_max[File]; >> @@ -252,7 +252,7 @@ static void emit_declaration( >> } >> >> case TGSI_FILE_TEMPORARY: >> - if (decl->Declaration.Array && decl->Array.ArrayID <= >> RADEON_LLVM_MAX_ARRAYS) >> + if (decl->Declaration.Array && decl->Array.ArrayID <= >> PIPE_MAX_SHADER_ARRAYS) >> ctx->arrays[decl->Array.ArrayID - 1] = decl->Range; >> if (uses_temp_indirect_addressing(bld_base)) { >> lp_emit_declaration_soa(bld_base, decl); >> diff --git a/src/gallium/include/pipe/p_state.h >> b/src/gallium/include/pipe/p_state.h >> index e01c62c..ad1404c 100644 >> --- a/src/gallium/include/pipe/p_state.h >> +++ b/src/gallium/include/pipe/p_state.h >> @@ -53,6 +53,7 @@ extern "C" { >> /** >> * Implementation limits >> */ >> +#define PIPE_MAX_SHADER_ARRAYS 256 /* maximum number of array >> declarations */ >> #define PIPE_MAX_ATTRIBS 32 >> #define PIPE_MAX_CLIP_PLANES 8 >> #define PIPE_MAX_COLOR_BUFS 8 >> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp >> b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp >> index f0f2a77..e308c55 100644 >> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp >> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp >> @@ -57,11 +57,6 @@ >> (1 << PROGRAM_CONSTANT) | \ >> (1 << PROGRAM_UNIFORM)) >> >> -/** >> - * Maximum number of arrays >> - */ >> -#define MAX_ARRAYS 256 >> - >> #define MAX_GLSL_TEXTURE_OFFSET 4 >> >> class st_src_reg; >> @@ -317,7 +312,7 @@ public: >> >> int next_temp; >> >> - unsigned array_sizes[MAX_ARRAYS]; >> + unsigned array_sizes[PIPE_MAX_SHADER_ARRAYS]; >> unsigned next_array; >> >> int num_address_regs; >> @@ -4362,7 +4357,7 @@ struct st_translate { >> unsigned temps_size; >> struct ureg_dst *temps; >> >> - struct ureg_dst arrays[MAX_ARRAYS]; >> + struct ureg_dst arrays[PIPE_MAX_SHADER_ARRAYS]; >> struct ureg_src *constants; >> int num_constants; >> struct ureg_src *immediates; >> @@ -4373,7 +4368,7 @@ struct st_translate { >> struct ureg_src samplers[PIPE_MAX_SAMPLERS]; >> struct ureg_src systemValues[SYSTEM_VALUE_MAX]; >> struct tgsi_texture_offset tex_offsets[MAX_GLSL_TEXTURE_OFFSET]; >> - unsigned array_sizes[MAX_ARRAYS]; >> + unsigned array_sizes[PIPE_MAX_SHADER_ARRAYS]; >> >> const GLuint *inputMapping; >> const GLuint *outputMapping; >> > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev