From 70953b5fea1445fe121ac4b4a816c984742f2e19 Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Wed, 11 Sep 2013 16:20:18 -0700 Subject: [PATCH] i965: Initialize all member variables of vec4_instruction on construction. 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 Reviewed-by: Chad Versace Reviewed-by: Kenneth Graunke --- 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 689040b9336..847c75ebcf5 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 3ff6a610359..6b9c4c62f66 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; } -- 2.30.2