From: Francisco Jerez Date: Mon, 13 Jul 2015 12:39:03 +0000 (+0300) Subject: i965/fs: Handle zero-size allocations in fs_builder::vgrf(). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=03846696ce2deaaaff42b2acd7745b51a7f115f2;p=mesa.git i965/fs: Handle zero-size allocations in fs_builder::vgrf(). This will be handy to avoid some ugly ternary operators in the next patch, like: fs_reg reg = (size == 0 ? null_reg_ud() : vgrf(..., size)); Because a zero-size register allocation is guaranteed not to ever be read or written we can just return the null register. Another possibility would be to actually allocate a zero-size VGRF what would involve defining a zero-size register class in the register allocator and a considerable amount of churn. Reviewed-by: Jason Ekstrand --- diff --git a/src/mesa/drivers/dri/i965/brw_fs_builder.h b/src/mesa/drivers/dri/i965/brw_fs_builder.h index eea1eae0129..e7d5f8a381d 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_builder.h +++ b/src/mesa/drivers/dri/i965/brw_fs_builder.h @@ -160,10 +160,13 @@ namespace brw { dst_reg vgrf(enum brw_reg_type type, unsigned n = 1) const { - return dst_reg(GRF, shader->alloc.allocate( - DIV_ROUND_UP(n * type_sz(type) * dispatch_width(), - REG_SIZE)), - type); + if (n > 0) + return dst_reg(GRF, shader->alloc.allocate( + DIV_ROUND_UP(n * type_sz(type) * dispatch_width(), + REG_SIZE)), + type); + else + return retype(null_reg_ud(), type); } /**