mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 08:58:02 +02:00
intel/blorp: Satisfy clear color rules for HIZ_CCS
Store the converted depth value into two dwords. Avoids regressing the piglit test "fbo-depth-array depth-clear", when HIZ_CCS sampling is enabled in a later commit. Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
0aa308f420
commit
8e7644e48f
1 changed files with 35 additions and 1 deletions
|
|
@ -1775,17 +1775,51 @@ blorp_update_clear_color(struct blorp_batch *batch,
|
|||
pipe.TextureCacheInvalidationEnable = true;
|
||||
}
|
||||
#elif GEN_GEN >= 9
|
||||
|
||||
/* According to GEN:BUG:2201730850, in the Clear Color Programming Note
|
||||
* under the Red channel, "Software shall write the converted Depth
|
||||
* Clear to this dword." The only depth formats listed under the red
|
||||
* channel are IEEE_FP and UNORM24_X8. These two requirements are
|
||||
* incompatible with the UNORM16 depth format, so just ignore that case
|
||||
* and simply perform the conversion for all depth formats.
|
||||
*/
|
||||
union isl_color_value fixed_color = info->clear_color;
|
||||
if (GEN_GEN == 12 && isl_surf_usage_is_depth(info->surf.usage)) {
|
||||
isl_color_value_pack(&info->clear_color, info->surf.format,
|
||||
fixed_color.u32);
|
||||
}
|
||||
|
||||
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];
|
||||
sdi.ImmediateData = fixed_color.u32[i];
|
||||
#if GEN_GEN >= 12
|
||||
if (i == 3)
|
||||
sdi.ForceWriteCompletionCheck = true;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/* The RENDER_SURFACE_STATE::ClearColor field states that software should
|
||||
* write the converted depth value 16B after the clear address:
|
||||
*
|
||||
* 3D Sampler will always fetch clear depth from the location 16-bytes
|
||||
* above this address, where the clear depth, converted to native
|
||||
* surface format by software, will be stored.
|
||||
*
|
||||
*/
|
||||
#if GEN_GEN >= 12
|
||||
if (isl_surf_usage_is_depth(info->surf.usage)) {
|
||||
blorp_emit(batch, GENX(MI_STORE_DATA_IMM), sdi) {
|
||||
sdi.Address = info->clear_color_addr;
|
||||
sdi.Address.offset += 4 * 4;
|
||||
sdi.ImmediateData = fixed_color.u32[0];
|
||||
sdi.ForceWriteCompletionCheck = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#elif GEN_GEN >= 7
|
||||
blorp_emit(batch, GENX(MI_STORE_DATA_IMM), sdi) {
|
||||
sdi.Address = info->clear_color_addr;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue