On Fri, Jan 30, 2015 at 3:34 PM, Axel Davy <axel.d...@ens.fr> wrote: > Previously 276 constants were declared everytime. > > This patch makes shaders declare constants up to the maximum > constant needed and moves the moment we print the TGSI > shader after the moment we declare the constants. > > This is needed for r500, since when indirect addressing is used, > it cannot reduce the amount of constants needed, and that it is > restricted to 256 constant slots. > > Signed-off-by: Axel Davy <axel.d...@ens.fr> > --- > src/gallium/state_trackers/nine/nine_shader.c | 38 > ++++++++------------------- > 1 file changed, 11 insertions(+), 27 deletions(-) > > diff --git a/src/gallium/state_trackers/nine/nine_shader.c > b/src/gallium/state_trackers/nine/nine_shader.c > index 1984087..8a8695a 100644 > --- a/src/gallium/state_trackers/nine/nine_shader.c > +++ b/src/gallium/state_trackers/nine/nine_shader.c > @@ -620,24 +620,6 @@ tx_src_scalar(struct ureg_dst dst) > return src; > } > > -/* Need to declare all constants if indirect addressing is used, > - * otherwise we could scan the shader to determine the maximum. > - * TODO: It doesn't really matter for nv50 so I won't do the scan, > - * but radeon drivers might care, if they don't infer it from TGSI. > - */ > -static void > -tx_decl_constants(struct shader_translator *tx) > -{ > - unsigned i, n = 0; > - > - for (i = 0; i < NINE_MAX_CONST_F; ++i) > - ureg_DECL_constant(tx->ureg, n++); > - for (i = 0; i < NINE_MAX_CONST_I; ++i) > - ureg_DECL_constant(tx->ureg, n++); > - for (i = 0; i < (NINE_MAX_CONST_B / 4); ++i) > - ureg_DECL_constant(tx->ureg, n++); > -} > - > static INLINE void > tx_temp_alloc(struct shader_translator *tx, INT idx) > { > @@ -3067,7 +3049,7 @@ nine_translate_shader(struct NineDevice9 *device, > struct nine_shader_info *info) > struct shader_translator *tx; > HRESULT hr = D3D_OK; > const unsigned processor = tgsi_processor_from_type(info->type); > - unsigned slot_max; > + unsigned s, slot_max; > > user_assert(processor != ~0, D3DERR_INVALIDCALL); > > @@ -3095,7 +3077,6 @@ nine_translate_shader(struct NineDevice9 *device, > struct nine_shader_info *info) > hr = E_OUTOFMEMORY; > goto out; > } > - tx_decl_constants(tx); > > tx->native_integers = GET_SHADER_CAP(INTEGERS); > tx->inline_subroutines = !GET_SHADER_CAP(SUBROUTINES); > @@ -3134,13 +3115,6 @@ nine_translate_shader(struct NineDevice9 *device, > struct nine_shader_info *info) > if (IS_VS && !ureg_dst_is_undef(tx->regs.oPts)) > info->point_size = TRUE; > > - if (debug_get_bool_option("NINE_TGSI_DUMP", FALSE)) { > - unsigned count; > - const struct tgsi_token *toks = ureg_get_tokens(tx->ureg, &count); > - tgsi_dump(toks, 0); > - ureg_free_tokens(toks); > - } > - > /* record local constants */ > if (tx->num_lconstf && tx->indirect_const_access) { > struct nine_range *ranges; > @@ -3210,6 +3184,16 @@ nine_translate_shader(struct NineDevice9 *device, > struct nine_shader_info *info) > info->num_float_consts_slots; > info->const_used_size = sizeof(float[4]) * slot_max; /* slots start from > 1 */ > > + for(s = 0; s < slot_max; s++)
for ( With that fixed, Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> > + ureg_DECL_constant(tx->ureg, s); > + > + if (debug_get_bool_option("NINE_TGSI_DUMP", FALSE)) { > + unsigned count; > + const struct tgsi_token *toks = ureg_get_tokens(tx->ureg, &count); > + tgsi_dump(toks, 0); > + ureg_free_tokens(toks); > + } > + > info->cso = ureg_create_shader_and_destroy(tx->ureg, device->pipe); > if (!info->cso) { > hr = D3DERR_DRIVERINTERNALERROR; > -- > 2.1.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev