diff options
author | Rafael Antognolli <rafael.antognolli@intel.com> | 2018-03-06 15:38:30 -0800 |
---|---|---|
committer | Rafael Antognolli <rafael.antognolli@intel.com> | 2018-03-06 16:57:07 -0800 |
commit | 709c1ae902642f4f6cd0ae85f508caddf20e449f (patch) | |
tree | 553af7cc9e193cc74e8d4129ba52d45c07f83f4a | |
parent | 12058f21199999bae7d7d1a827f12cc7189d27e2 (diff) |
fix blorp
-rw-r--r-- | src/intel/blorp/blorp_genX_exec.h | 38 |
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 + } } /** |