summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_eu.h1
-rw-r--r--src/mesa/drivers/dri/i965/brw_eu_emit.c69
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_generator.cpp15
3 files changed, 43 insertions, 42 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_eu.h b/src/mesa/drivers/dri/i965/brw_eu.h
index 737a335ab55..c44896bc0d5 100644
--- a/src/mesa/drivers/dri/i965/brw_eu.h
+++ b/src/mesa/drivers/dri/i965/brw_eu.h
@@ -233,6 +233,7 @@ void brw_set_dp_write_message(struct brw_codegen *p,
unsigned binding_table_index,
unsigned msg_control,
unsigned msg_type,
+ unsigned target_cache,
unsigned msg_length,
bool header_present,
unsigned last_render_target,
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index ca04221686b..72b6df6555e 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -706,6 +706,7 @@ brw_set_dp_write_message(struct brw_codegen *p,
unsigned binding_table_index,
unsigned msg_control,
unsigned msg_type,
+ unsigned target_cache,
unsigned msg_length,
bool header_present,
unsigned last_render_target,
@@ -714,20 +715,8 @@ brw_set_dp_write_message(struct brw_codegen *p,
unsigned send_commit_msg)
{
const struct gen_device_info *devinfo = p->devinfo;
- unsigned sfid;
-
- if (devinfo->gen >= 7) {
- /* Use the Render Cache for RT writes; otherwise use the Data Cache */
- if (msg_type == GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE)
- sfid = GEN6_SFID_DATAPORT_RENDER_CACHE;
- else
- sfid = GEN7_SFID_DATAPORT_DATA_CACHE;
- } else if (devinfo->gen == 6) {
- /* Use the render cache for all write messages. */
- sfid = GEN6_SFID_DATAPORT_RENDER_CACHE;
- } else {
- sfid = BRW_SFID_DATAPORT_WRITE;
- }
+ const unsigned sfid = (devinfo->gen >= 6 ? target_cache :
+ BRW_SFID_DATAPORT_WRITE);
brw_set_message_descriptor(p, insn, sfid, msg_length, response_length,
header_present, end_of_thread);
@@ -753,26 +742,8 @@ brw_set_dp_read_message(struct brw_codegen *p,
unsigned response_length)
{
const struct gen_device_info *devinfo = p->devinfo;
- unsigned sfid;
-
- if (devinfo->gen >= 7) {
- if (target_cache == BRW_DATAPORT_READ_TARGET_RENDER_CACHE)
- sfid = GEN6_SFID_DATAPORT_RENDER_CACHE;
- else if (target_cache == BRW_DATAPORT_READ_TARGET_DATA_CACHE)
- sfid = GEN7_SFID_DATAPORT_DATA_CACHE;
- else if (target_cache == BRW_DATAPORT_READ_TARGET_SAMPLER_CACHE)
- sfid = GEN6_SFID_DATAPORT_SAMPLER_CACHE;
- else
- unreachable("Invalid target cache");
-
- } else if (devinfo->gen == 6) {
- if (target_cache == BRW_DATAPORT_READ_TARGET_RENDER_CACHE)
- sfid = GEN6_SFID_DATAPORT_RENDER_CACHE;
- else
- sfid = GEN6_SFID_DATAPORT_SAMPLER_CACHE;
- } else {
- sfid = BRW_SFID_DATAPORT_READ;
- }
+ const unsigned sfid = (devinfo->gen >= 6 ? target_cache :
+ BRW_SFID_DATAPORT_READ);
brw_set_message_descriptor(p, insn, sfid, msg_length, response_length,
header_present, false);
@@ -2073,6 +2044,10 @@ void brw_oword_block_write_scratch(struct brw_codegen *p,
unsigned offset)
{
const struct gen_device_info *devinfo = p->devinfo;
+ const unsigned target_cache =
+ (devinfo->gen >= 7 ? GEN7_SFID_DATAPORT_DATA_CACHE :
+ devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_RENDER_CACHE :
+ BRW_DATAPORT_READ_TARGET_RENDER_CACHE);
uint32_t msg_type;
if (devinfo->gen >= 6)
@@ -2161,6 +2136,7 @@ void brw_oword_block_write_scratch(struct brw_codegen *p,
brw_scratch_surface_idx(p),
msg_control,
msg_type,
+ target_cache,
mlen,
true, /* header_present */
0, /* not a render target */
@@ -2210,9 +2186,10 @@ brw_oword_block_read_scratch(struct brw_codegen *p,
num_regs == 2 ? BRW_DATAPORT_OWORD_BLOCK_4_OWORDS :
num_regs == 4 ? BRW_DATAPORT_OWORD_BLOCK_8_OWORDS : 0);
assert(msg_control);
- const unsigned target_cache = devinfo->gen >= 7 ?
- BRW_DATAPORT_READ_TARGET_DATA_CACHE :
- BRW_DATAPORT_READ_TARGET_RENDER_CACHE;
+ const unsigned target_cache =
+ (devinfo->gen >= 7 ? GEN7_SFID_DATAPORT_DATA_CACHE :
+ devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_RENDER_CACHE :
+ BRW_DATAPORT_READ_TARGET_RENDER_CACHE);
{
brw_push_insn_state(p);
@@ -2300,6 +2277,10 @@ void brw_oword_block_read(struct brw_codegen *p,
uint32_t bind_table_index)
{
const struct gen_device_info *devinfo = p->devinfo;
+ const unsigned target_cache =
+ (devinfo->gen >= 7 ? GEN7_SFID_DATAPORT_DATA_CACHE :
+ devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_SAMPLER_CACHE :
+ BRW_DATAPORT_READ_TARGET_DATA_CACHE);
/* On newer hardware, offset is in units of owords. */
if (devinfo->gen >= 6)
@@ -2340,7 +2321,7 @@ void brw_oword_block_read(struct brw_codegen *p,
bind_table_index,
BRW_DATAPORT_OWORD_BLOCK_1_OWORDLOW,
BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ,
- BRW_DATAPORT_READ_TARGET_DATA_CACHE,
+ target_cache,
1, /* msg_length */
true, /* header_present */
1); /* response_length (1 reg, 2 owords!) */
@@ -2361,6 +2342,9 @@ void brw_fb_WRITE(struct brw_codegen *p,
bool header_present)
{
const struct gen_device_info *devinfo = p->devinfo;
+ const unsigned target_cache =
+ (devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_RENDER_CACHE :
+ BRW_DATAPORT_READ_TARGET_RENDER_CACHE);
brw_inst *insn;
unsigned msg_type;
struct brw_reg dest, src0;
@@ -2397,6 +2381,7 @@ void brw_fb_WRITE(struct brw_codegen *p,
binding_table_index,
msg_control,
msg_type,
+ target_cache,
msg_length,
header_present,
last_render_target,
@@ -2425,7 +2410,7 @@ gen9_fb_READ(struct brw_codegen *p,
brw_set_dp_read_message(p, insn, binding_table_index,
per_sample << 5 | msg_subtype,
GEN9_DATAPORT_RC_RENDER_TARGET_READ,
- BRW_DATAPORT_READ_TARGET_RENDER_CACHE,
+ GEN6_SFID_DATAPORT_RENDER_CACHE,
msg_length, true /* header_present */,
response_length);
brw_inst_set_rt_slot_group(devinfo, insn,
@@ -2888,6 +2873,11 @@ brw_svb_write(struct brw_codegen *p,
unsigned binding_table_index,
bool send_commit_msg)
{
+ const struct gen_device_info *devinfo = p->devinfo;
+ const unsigned target_cache =
+ (devinfo->gen >= 7 ? GEN7_SFID_DATAPORT_DATA_CACHE :
+ devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_RENDER_CACHE :
+ BRW_DATAPORT_READ_TARGET_RENDER_CACHE);
brw_inst *insn;
gen6_resolve_implied_move(p, &src0, msg_reg_nr);
@@ -2900,6 +2890,7 @@ brw_svb_write(struct brw_codegen *p,
binding_table_index,
0, /* msg_control: ignored */
GEN6_DATAPORT_WRITE_MESSAGE_STREAMED_VB_WRITE,
+ target_cache,
1, /* msg_length */
true, /* header_present */
0, /* last_render_target: ignored */
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
index bb184792cf6..ef7ce78b803 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
@@ -1140,8 +1140,9 @@ generate_scratch_read(struct brw_codegen *p,
else
msg_type = BRW_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ;
- const unsigned target_cache = devinfo->gen >= 7 ?
- BRW_DATAPORT_READ_TARGET_DATA_CACHE :
+ const unsigned target_cache =
+ devinfo->gen >= 7 ? GEN7_SFID_DATAPORT_DATA_CACHE :
+ devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_RENDER_CACHE :
BRW_DATAPORT_READ_TARGET_RENDER_CACHE;
/* Each of the 8 channel enables is considered for whether each
@@ -1169,6 +1170,10 @@ generate_scratch_write(struct brw_codegen *p,
struct brw_reg index)
{
const struct gen_device_info *devinfo = p->devinfo;
+ const unsigned target_cache =
+ (devinfo->gen >= 7 ? GEN7_SFID_DATAPORT_DATA_CACHE :
+ devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_RENDER_CACHE :
+ BRW_DATAPORT_READ_TARGET_RENDER_CACHE);
struct brw_reg header = brw_vec8_grf(0, 0);
bool write_commit;
@@ -1228,6 +1233,7 @@ generate_scratch_write(struct brw_codegen *p,
brw_scratch_surface_idx(p),
BRW_DATAPORT_OWORD_DUAL_BLOCK_1OWORD,
msg_type,
+ target_cache,
3, /* mlen */
true, /* header present */
false, /* not a render target write */
@@ -1245,6 +1251,9 @@ generate_pull_constant_load(struct brw_codegen *p,
struct brw_reg offset)
{
const struct gen_device_info *devinfo = p->devinfo;
+ const unsigned target_cache =
+ (devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_SAMPLER_CACHE :
+ BRW_DATAPORT_READ_TARGET_DATA_CACHE);
assert(index.file == BRW_IMMEDIATE_VALUE &&
index.type == BRW_REGISTER_TYPE_UD);
uint32_t surf_index = index.ud;
@@ -1290,7 +1299,7 @@ generate_pull_constant_load(struct brw_codegen *p,
surf_index,
BRW_DATAPORT_OWORD_DUAL_BLOCK_1OWORD,
msg_type,
- BRW_DATAPORT_READ_TARGET_DATA_CACHE,
+ target_cache,
2, /* mlen */
true, /* header_present */
1 /* rlen */);