summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2015-01-22 13:46:44 -0800
committerJason Ekstrand <[email protected]>2015-01-22 15:19:13 -0800
commit7de8a3e13efe1c3eede531737f6780d388152355 (patch)
tree10bf1dacc17708cadbe6dc3999ee585775a0f860 /src/mesa/drivers
parent8751734613d3476f46ef1efe119a6892b3ecfa02 (diff)
i965/emit: Do the sampler index adjustment directly in header.0.3
Prior to this commit, the adjust_sampler_state_pointer function took an extra register that it could use as scratch space. The usual candidate was the destination of the sampler instruction. However, if that register ever aliased anything important such as the sampler index, this would scratch all over important data. Fortunately, the calculation is such that we can just do it in place and we don't need the scratch space at all. Reviewed-by: Chris Forbes <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_eu.h3
-rw-r--r--src/mesa/drivers/dri/i965/brw_eu_emit.c5
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_generator.cpp2
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_generator.cpp2
4 files changed, 5 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_eu.h b/src/mesa/drivers/dri/i965/brw_eu.h
index 22d5a0acab3..a94ea4221ad 100644
--- a/src/mesa/drivers/dri/i965/brw_eu.h
+++ b/src/mesa/drivers/dri/i965/brw_eu.h
@@ -283,8 +283,7 @@ void brw_SAMPLE(struct brw_compile *p,
void brw_adjust_sampler_state_pointer(struct brw_compile *p,
struct brw_reg header,
- struct brw_reg sampler_index,
- struct brw_reg scratch);
+ struct brw_reg sampler_index);
void gen4_math(struct brw_compile *p,
struct brw_reg dest,
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index c26bed2dee3..39b2022bccc 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -2383,8 +2383,7 @@ void brw_SAMPLE(struct brw_compile *p,
*/
void brw_adjust_sampler_state_pointer(struct brw_compile *p,
struct brw_reg header,
- struct brw_reg sampler_index,
- struct brw_reg scratch)
+ struct brw_reg sampler_index)
{
/* The "Sampler Index" field can only store values between 0 and 15.
* However, we can add an offset to the "Sampler State Pointer"
@@ -2414,7 +2413,7 @@ void brw_adjust_sampler_state_pointer(struct brw_compile *p,
return;
}
- struct brw_reg temp = vec1(retype(scratch, BRW_REGISTER_TYPE_UD));
+ struct brw_reg temp = get_element_ud(header, 3);
brw_AND(p, temp, get_element_ud(sampler_index, 0), brw_imm_ud(0x0f0));
brw_SHL(p, temp, temp, brw_imm_ud(4));
diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
index d473739452d..447490218d7 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
@@ -697,7 +697,7 @@ fs_generator::generate_tex(fs_inst *inst, struct brw_reg dst, struct brw_reg src
brw_imm_ud(inst->offset));
}
- brw_adjust_sampler_state_pointer(p, header_reg, sampler_index, dst);
+ brw_adjust_sampler_state_pointer(p, header_reg, sampler_index);
brw_pop_insn_state(p);
}
}
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
index d718f2eac80..898a6db4abf 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
@@ -354,7 +354,7 @@ vec4_generator::generate_tex(vec4_instruction *inst,
if (dw2)
brw_MOV(p, get_element_ud(header, 2), brw_imm_ud(dw2));
- brw_adjust_sampler_state_pointer(p, header, sampler_index, dst);
+ brw_adjust_sampler_state_pointer(p, header, sampler_index);
brw_pop_insn_state(p);
}
}