From: Axel Davy Date: Sat, 6 Dec 2014 21:26:50 +0000 (+0100) Subject: st/nine: Correct rules for relative adressing and constants. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9690bf33d7af835eb36d9e4c5928ac8483ffeeaa;p=mesa.git st/nine: Correct rules for relative adressing and constants. relative adressing for constants is possible only for vs float constants. Reviewed-by: Ilia Mirkin Signed-off-by: Axel Davy Cc: "10.4" --- diff --git a/src/gallium/state_trackers/nine/nine_shader.c b/src/gallium/state_trackers/nine/nine_shader.c index f20140d33a5..944b646b30d 100644 --- a/src/gallium/state_trackers/nine/nine_shader.c +++ b/src/gallium/state_trackers/nine/nine_shader.c @@ -835,6 +835,7 @@ tx_src_param(struct shader_translator *tx, const struct sm1_src_param *param) src = ureg_src_register(TGSI_FILE_SAMPLER, param->idx); break; case D3DSPR_CONST: + assert(!param->rel || IS_VS); if (param->rel) tx->indirect_const_access = TRUE; if (param->rel || !tx_lconstf(tx, &src, param->idx)) { @@ -858,19 +859,20 @@ tx_src_param(struct shader_translator *tx, const struct sm1_src_param *param) src = ureg_imm1f(ureg, 0.0f); break; case D3DSPR_CONSTINT: - if (param->rel || !tx_lconsti(tx, &src, param->idx)) { - if (!param->rel) - nine_info_mark_const_i_used(tx->info, param->idx); + /* relative adressing only possible for float constants in vs */ + assert(!param->rel); + if (!tx_lconsti(tx, &src, param->idx)) { + nine_info_mark_const_i_used(tx->info, param->idx); src = ureg_src_register(TGSI_FILE_CONSTANT, tx->info->const_i_base + param->idx); } break; case D3DSPR_CONSTBOOL: - if (param->rel || !tx_lconstb(tx, &src, param->idx)) { + assert(!param->rel); + if (!tx_lconstb(tx, &src, param->idx)) { char r = param->idx / 4; char s = param->idx & 3; - if (!param->rel) - nine_info_mark_const_b_used(tx->info, param->idx); + nine_info_mark_const_b_used(tx->info, param->idx); src = ureg_src_register(TGSI_FILE_CONSTANT, tx->info->const_b_base + r); src = ureg_swizzle(src, s, s, s, s);