summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Antognolli <rafael.antognolli@intel.com>2018-03-06 15:38:30 -0800
committerRafael Antognolli <rafael.antognolli@intel.com>2018-03-06 16:57:07 -0800
commit709c1ae902642f4f6cd0ae85f508caddf20e449f (patch)
tree553af7cc9e193cc74e8d4129ba52d45c07f83f4a
parent12058f21199999bae7d7d1a827f12cc7189d27e2 (diff)
fix blorp
-rw-r--r--src/intel/blorp/blorp_genX_exec.h38
1 files changed, 34 insertions, 4 deletions
diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h
index e5fe4d4ae9..ddf16fda0e 100644
--- a/src/intel/blorp/blorp_genX_exec.h
+++ b/src/intel/blorp/blorp_genX_exec.h
@@ -1646,18 +1646,48 @@ blorp_update_clear_color(struct blorp_batch *batch,
const struct brw_blorp_surface_info *info,
enum isl_aux_op op)
{
-#if GEN_GEN >= 7
- int size = GEN_GEN >= 9 ? 4 : 1;
if (info->clear_color_addr.buffer && op == ISL_AUX_OP_FAST_CLEAR) {
- for (int i = 0; i < size; i++) {
+#if GEN_GEN >= 9
+ for (int i = 0; i < 4; i++) {
blorp_emit(batch, GENX(MI_STORE_DATA_IMM), sdi) {
sdi.Address = info->clear_color_addr;
sdi.Address.offset += i * 4;
sdi.ImmediateData = info->clear_color.u32[i];
}
}
- }
+#elif GEN_GEN >= 7
+ blorp_emit(batch, GENX(MI_STORE_DATA_IMM), sdi) {
+ sdi.Address = info->clear_color_addr;
+ sdi.ImmediateData = ISL_CHANNEL_SELECT_RED << 25 |
+ ISL_CHANNEL_SELECT_GREEN << 22 |
+ ISL_CHANNEL_SELECT_BLUE << 19 |
+ ISL_CHANNEL_SELECT_ALPHA << 16;
+ if (isl_format_has_int_channel(info->view.format)) {
+ for (unsigned i = 0; i < 4; i++) {
+ assert(info->clear_color.u32[i] == 0 ||
+ info->clear_color.u32[i] == 1);
+ }
+ sdi.ImmediateData |= (info->clear_color.u32[0] != 0) << 31;
+ sdi.ImmediateData |= (info->clear_color.u32[1] != 0) << 30;
+ sdi.ImmediateData |= (info->clear_color.u32[2] != 0) << 29;
+ sdi.ImmediateData |= (info->clear_color.u32[3] != 0) << 28;
+ } else {
+ for (unsigned i = 0; i < 4; i++) {
+ assert(info->clear_color.f32[i] == 0.0f ||
+ info->clear_color.f32[i] == 1.0f);
+ }
+ sdi.ImmediateData |= (info->clear_color.f32[0] != 0.0f) << 31;
+ sdi.ImmediateData |= (info->clear_color.f32[1] != 0.0f) << 30;
+ sdi.ImmediateData |= (info->clear_color.f32[2] != 0.0f) << 29;
+ sdi.ImmediateData |= (info->clear_color.f32[3] != 0.0f) << 28;
+ }
+
+ /* for (int i = 0; i < 4; i++) { */
+ /* sdi.ImmediateData |= info->clear_color.u32[i]; */
+ /* } */
+ }
#endif
+ }
}
/**