[Mesa-dev] [PATCH 02/11] i965: Initialize all member variables of vec4_instruction on construction.

Kenneth Graunke kenneth at whitecape.org
Tue Sep 24 11:07:46 PDT 2013


On 09/20/2013 09:51 PM, Francisco Jerez wrote:
> The vec4_instruction object relies on the memory allocator zeroing out
> its contents before it's initialized, which is quite an unusual
> practice in the C++ world because it ties objects to some specific
> allocation scheme, and gives unpredictable results when an object is
> created with a different allocator -- Stack allocation, array
> allocation, or aggregation inside a different object are some of the
> useful possibilities that come to my mind.  Initialize all fields from
> the constructor and stop using the zeroing allocator.
> 
> Reviewed-by: Paul Berry <stereotype441 at gmail.com>
> Reviewed-by: Chad Versace <chad.versace at linux.intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_vec4.h           |  2 +-
>  src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 15 +++++++++++++++
>  2 files changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
> index 689040b..847c75e 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.h
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.h
> @@ -168,7 +168,7 @@ with_writemask(dst_reg const &r, int mask);
>  
>  class vec4_instruction : public backend_instruction {
>  public:
> -   DECLARE_RZALLOC_CXX_OPERATORS(vec4_instruction)
> +   DECLARE_RALLOC_CXX_OPERATORS(vec4_instruction)
>  
>     vec4_instruction(vec4_visitor *v, enum opcode opcode,
>  		    dst_reg dst = dst_reg(),
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index 3ff6a61..6b9c4c6 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -38,7 +38,22 @@ vec4_instruction::vec4_instruction(vec4_visitor *v,
>     this->src[0] = src0;
>     this->src[1] = src1;
>     this->src[2] = src2;
> +   this->saturate = false;
> +   this->force_writemask_all = false;
> +   this->no_dd_clear = false;
> +   this->no_dd_check = false;
> +   this->conditional_mod = BRW_CONDITIONAL_NONE;
> +   this->sampler = 0;
> +   this->texture_offset = 0;
> +   this->target = 0;
> +   this->shadow_compare = false;
>     this->ir = v->base_ir;
> +   this->urb_write_flags = BRW_URB_WRITE_NO_FLAGS;
> +   this->header_present = false;
> +   this->mlen = 0;
> +   this->base_mrf = 0;
> +   this->offset = 0;
> +   this->ir = NULL;
>     this->annotation = v->current_annotation;
>  }

I definitely like this better.  Thanks!

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>


More information about the mesa-dev mailing list