summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2013-02-15 20:33:31 -0800
committerPaul Berry <[email protected]>2013-04-11 09:25:24 -0700
commitd7af636473e2b8055b94a4e28fcf3272b35094be (patch)
tree63a972e7b706bcff45f901c9363985f7364591d9
parent09cd6e06d2c7a54ca6eb8d3102822efa78e01a9c (diff)
i965/vs: split brw_vs_compile into generic and VS-specific parts.
This will allow the generic parts to be re-used for geometry shaders. Reviewed-by: Jordan Justen <[email protected]> Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp2
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp8
-rw-r--r--src/mesa/drivers/dri/i965/brw_vs.c4
-rw-r--r--src/mesa/drivers/dri/i965/brw_vs.h8
4 files changed, 13 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp b/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
index ac3d401ac3f..0853c0a0209 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
@@ -321,7 +321,7 @@ void
vec4_visitor::spill_reg(int spill_reg_nr)
{
assert(virtual_grf_sizes[spill_reg_nr] == 1);
- unsigned int spill_offset = c->last_scratch++;
+ unsigned int spill_offset = c->base.last_scratch++;
/* Generate spill/unspill instructions for the objects being spilled. */
foreach_list(node, &this->instructions) {
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index 3a417ad3437..bfa33b60e4d 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -2819,8 +2819,8 @@ vec4_visitor::move_grf_array_access_to_scratch()
if (inst->dst.file == GRF && inst->dst.reladdr &&
scratch_loc[inst->dst.reg] == -1) {
- scratch_loc[inst->dst.reg] = c->last_scratch;
- c->last_scratch += this->virtual_grf_sizes[inst->dst.reg];
+ scratch_loc[inst->dst.reg] = c->base.last_scratch;
+ c->base.last_scratch += this->virtual_grf_sizes[inst->dst.reg];
}
for (int i = 0 ; i < 3; i++) {
@@ -2828,8 +2828,8 @@ vec4_visitor::move_grf_array_access_to_scratch()
if (src->file == GRF && src->reladdr &&
scratch_loc[src->reg] == -1) {
- scratch_loc[src->reg] = c->last_scratch;
- c->last_scratch += this->virtual_grf_sizes[src->reg];
+ scratch_loc[src->reg] = c->base.last_scratch;
+ c->base.last_scratch += this->virtual_grf_sizes[src->reg];
}
}
}
diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
index 25cd3971023..c0a3baedaf2 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -312,12 +312,12 @@ do_vs_prog(struct brw_context *brw,
}
/* Scratch space is used for register spilling */
- if (c.last_scratch) {
+ if (c.base.last_scratch) {
perf_debug("Vertex shader triggered register spilling. "
"Try reducing the number of live vec4 values to "
"improve performance.\n");
- prog_data.total_scratch = brw_get_scratch_size(c.last_scratch*REG_SIZE);
+ prog_data.total_scratch = brw_get_scratch_size(c.base.last_scratch*REG_SIZE);
brw_get_scratch_bo(intel, &brw->vs.scratch_bo,
prog_data.total_scratch * brw->max_vs_threads);
diff --git a/src/mesa/drivers/dri/i965/brw_vs.h b/src/mesa/drivers/dri/i965/brw_vs.h
index d0f98053e62..c2b4bc69f25 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.h
+++ b/src/mesa/drivers/dri/i965/brw_vs.h
@@ -103,12 +103,16 @@ struct brw_vs_prog_key {
};
+struct brw_vec4_compile {
+ GLuint last_scratch; /**< measured in 32-byte (register size) units */
+};
+
+
struct brw_vs_compile {
+ struct brw_vec4_compile base;
struct brw_vs_prog_key key;
struct brw_vertex_program *vp;
-
- GLuint last_scratch; /**< measured in 32-byte (register size) units */
};
const unsigned *brw_vs_emit(struct brw_context *brw,