[Mesa-dev] [PATCH 1/2] i965: Allocate vec4_visitor's uniform_size and uniform_vector_size arrays dynamically.
Petri Latvala
petri.latvala at intel.com
Fri Nov 22 00:09:11 PST 2013
Signed-off-by: Petri Latvala <petri.latvala at intel.com>
---
src/mesa/drivers/dri/i965/brw_vec4.cpp | 5 +++--
src/mesa/drivers/dri/i965/brw_vec4.h | 14 +++++++++++---
src/mesa/drivers/dri/i965/brw_vec4_gs.c | 2 +-
src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 12 +++++++-----
src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h | 6 ++++--
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 7 ++++++-
src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp | 6 ++++--
src/mesa/drivers/dri/i965/brw_vs.c | 2 +-
src/mesa/drivers/dri/i965/brw_vs.h | 6 ++++--
9 files changed, 41 insertions(+), 19 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
index 73f91a0..3da1b4d 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
@@ -1558,7 +1558,8 @@ brw_vs_emit(struct brw_context *brw,
struct brw_vs_compile *c,
struct brw_vs_prog_data *prog_data,
void *mem_ctx,
- unsigned *final_assembly_size)
+ unsigned *final_assembly_size,
+ unsigned param_count)
{
bool start_busy = false;
float start_time = 0;
@@ -1585,7 +1586,7 @@ brw_vs_emit(struct brw_context *brw,
}
}
- vec4_vs_visitor v(brw, c, prog_data, prog, shader, mem_ctx);
+ vec4_vs_visitor v(brw, c, prog_data, prog, shader, mem_ctx, param_count);
if (!v.run()) {
if (prog) {
prog->LinkStatus = false;
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
index 5cec9f9..552ca55 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.h
+++ b/src/mesa/drivers/dri/i965/brw_vec4.h
@@ -231,7 +231,8 @@ public:
struct brw_shader *shader,
void *mem_ctx,
bool debug_flag,
- bool no_spills);
+ bool no_spills,
+ unsigned param_count);
~vec4_visitor();
dst_reg dst_null_f()
@@ -325,8 +326,9 @@ public:
*/
dst_reg output_reg[BRW_VARYING_SLOT_COUNT];
const char *output_reg_annotation[BRW_VARYING_SLOT_COUNT];
- int uniform_size[MAX_UNIFORMS];
- int uniform_vector_size[MAX_UNIFORMS];
+ unsigned uniform_param_count;
+ int* uniform_size;
+ int* uniform_vector_size;
int uniforms;
src_reg shader_start_time;
@@ -546,6 +548,12 @@ private:
* If true, then register allocation should fail instead of spilling.
*/
const bool no_spills;
+
+ /*
+ * Make noncopyable.
+ */
+ vec4_visitor(const vec4_visitor&);
+ vec4_visitor& operator=(const vec4_visitor&);
};
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs.c b/src/mesa/drivers/dri/i965/brw_vec4_gs.c
index b52d646..b0b77d1 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs.c
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs.c
@@ -213,7 +213,7 @@ do_gs_prog(struct brw_context *brw,
void *mem_ctx = ralloc_context(NULL);
unsigned program_size;
const unsigned *program =
- brw_gs_emit(brw, prog, &c, mem_ctx, &program_size);
+ brw_gs_emit(brw, prog, &c, mem_ctx, &program_size, param_count);
if (program == NULL) {
ralloc_free(mem_ctx);
return false;
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
index adbb1cf..16c05f5 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
@@ -38,10 +38,11 @@ vec4_gs_visitor::vec4_gs_visitor(struct brw_context *brw,
struct gl_shader_program *prog,
struct brw_shader *shader,
void *mem_ctx,
- bool no_spills)
+ bool no_spills,
+ unsigned param_count)
: vec4_visitor(brw, &c->base, &c->gp->program.Base, &c->key.base,
&c->prog_data.base, prog, shader, mem_ctx,
- INTEL_DEBUG & DEBUG_GS, no_spills),
+ INTEL_DEBUG & DEBUG_GS, no_spills, param_count),
c(c)
{
}
@@ -539,7 +540,8 @@ brw_gs_emit(struct brw_context *brw,
struct gl_shader_program *prog,
struct brw_gs_compile *c,
void *mem_ctx,
- unsigned *final_assembly_size)
+ unsigned *final_assembly_size,
+ unsigned param_count)
{
struct brw_shader *shader =
(brw_shader *) prog->_LinkedShaders[MESA_SHADER_GEOMETRY];
@@ -556,7 +558,7 @@ brw_gs_emit(struct brw_context *brw,
if (likely(!(INTEL_DEBUG & DEBUG_NO_DUAL_OBJECT_GS))) {
c->prog_data.dual_instanced_dispatch = false;
- vec4_gs_visitor v(brw, c, prog, shader, mem_ctx, true /* no_spills */);
+ vec4_gs_visitor v(brw, c, prog, shader, mem_ctx, true /* no_spills */, param_count);
if (v.run()) {
vec4_generator g(brw, prog, &c->gp->program.Base, &c->prog_data.base,
mem_ctx, INTEL_DEBUG & DEBUG_GS);
@@ -579,7 +581,7 @@ brw_gs_emit(struct brw_context *brw,
*/
c->prog_data.dual_instanced_dispatch = true;
- vec4_gs_visitor v(brw, c, prog, shader, mem_ctx, false /* no_spills */);
+ vec4_gs_visitor v(brw, c, prog, shader, mem_ctx, false /* no_spills */, param_count);
if (!v.run()) {
prog->LinkStatus = false;
ralloc_strcat(&prog->InfoLog, v.fail_msg);
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h
index 68756f7..b28e4de 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h
@@ -65,7 +65,8 @@ const unsigned *brw_gs_emit(struct brw_context *brw,
struct gl_shader_program *prog,
struct brw_gs_compile *c,
void *mem_ctx,
- unsigned *final_assembly_size);
+ unsigned *final_assembly_size,
+ unsigned param_count);
#ifdef __cplusplus
} /* extern "C" */
@@ -82,7 +83,8 @@ public:
struct gl_shader_program *prog,
struct brw_shader *shader,
void *mem_ctx,
- bool no_spills);
+ bool no_spills,
+ unsigned param_count);
protected:
virtual dst_reg *make_reg_for_system_value(ir_variable *ir);
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index a13eafb..df38dab 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -3248,11 +3248,13 @@ vec4_visitor::vec4_visitor(struct brw_context *brw,
struct brw_shader *shader,
void *mem_ctx,
bool debug_flag,
- bool no_spills)
+ bool no_spills,
+ unsigned param_count)
: sanity_param_count(0),
fail_msg(NULL),
first_non_payload_grf(0),
need_all_constants_in_pull_buffer(false),
+ uniform_param_count(param_count),
debug_flag(debug_flag),
no_spills(no_spills)
{
@@ -3290,6 +3292,9 @@ vec4_visitor::vec4_visitor(struct brw_context *brw,
this->max_grf = brw->gen >= 7 ? GEN7_MRF_HACK_START : BRW_MAX_GRF;
this->uniforms = 0;
+
+ this->uniform_size = rzalloc_array(mem_ctx, int, this->uniform_param_count);
+ this->uniform_vector_size = rzalloc_array(mem_ctx, int, this->uniform_param_count);
}
vec4_visitor::~vec4_visitor()
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp
index 31c42c4..a653de1 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp
@@ -212,10 +212,12 @@ vec4_vs_visitor::vec4_vs_visitor(struct brw_context *brw,
struct brw_vs_prog_data *vs_prog_data,
struct gl_shader_program *prog,
struct brw_shader *shader,
- void *mem_ctx)
+ void *mem_ctx,
+ unsigned param_count)
: vec4_visitor(brw, &vs_compile->base, &vs_compile->vp->program.Base,
&vs_compile->key.base, &vs_prog_data->base, prog, shader,
- mem_ctx, INTEL_DEBUG & DEBUG_VS, false /* no_spills */),
+ mem_ctx, INTEL_DEBUG & DEBUG_VS, false /* no_spills */,
+ param_count),
vs_compile(vs_compile),
vs_prog_data(vs_prog_data)
{
diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
index b5c8b63..1f90c32 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -288,7 +288,7 @@ do_vs_prog(struct brw_context *brw,
/* Emit GEN4 code.
*/
- program = brw_vs_emit(brw, prog, &c, &prog_data, mem_ctx, &program_size);
+ program = brw_vs_emit(brw, prog, &c, &prog_data, mem_ctx, &program_size, param_count);
if (program == NULL) {
ralloc_free(mem_ctx);
return false;
diff --git a/src/mesa/drivers/dri/i965/brw_vs.h b/src/mesa/drivers/dri/i965/brw_vs.h
index 5d62e47..59b48a1 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.h
+++ b/src/mesa/drivers/dri/i965/brw_vs.h
@@ -88,7 +88,8 @@ const unsigned *brw_vs_emit(struct brw_context *brw,
struct brw_vs_compile *c,
struct brw_vs_prog_data *prog_data,
void *mem_ctx,
- unsigned *program_size);
+ unsigned *program_size,
+ unsigned param_count);
bool brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog);
void brw_vs_debug_recompile(struct brw_context *brw,
struct gl_shader_program *prog,
@@ -110,7 +111,8 @@ public:
struct brw_vs_prog_data *vs_prog_data,
struct gl_shader_program *prog,
struct brw_shader *shader,
- void *mem_ctx);
+ void *mem_ctx,
+ unsigned param_count);
protected:
virtual dst_reg *make_reg_for_system_value(ir_variable *ir);
--
1.8.4.rc3
More information about the mesa-dev
mailing list