Similarly to vulkan where we store the clear value in the aux surface, we can do the same in GL. v2: Remove unneeded extra function. v3: Use clear_value_state_size instead of clear_value_size. v4: - rename to clear_color_state_size - store clear_color_bo and clear_color_offset in the aux buf struct v5: Unreference clear color bo (Jordan) Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>tags/18.1-branchpoint
@@ -1211,6 +1211,7 @@ intel_miptree_aux_buffer_free(struct intel_miptree_aux_buffer *aux_buf) | |||
return; | |||
brw_bo_unreference(aux_buf->bo); | |||
brw_bo_unreference(aux_buf->clear_color_bo); | |||
free(aux_buf); | |||
} | |||
@@ -1678,6 +1679,17 @@ intel_alloc_aux_buffer(struct brw_context *brw, | |||
return false; | |||
buf->size = aux_surf->size; | |||
const struct gen_device_info *devinfo = &brw->screen->devinfo; | |||
if (devinfo->gen >= 10) { | |||
/* On CNL, instead of setting the clear color in the SURFACE_STATE, we | |||
* will set a pointer to a dword somewhere that contains the color. So, | |||
* allocate the space for the clear color value here on the aux buffer. | |||
*/ | |||
buf->clear_color_offset = buf->size; | |||
buf->size += brw->isl_dev.ss.clear_color_state_size; | |||
} | |||
buf->pitch = aux_surf->row_pitch; | |||
buf->qpitch = isl_surf_get_array_pitch_sa_rows(aux_surf); | |||
@@ -1692,6 +1704,11 @@ intel_alloc_aux_buffer(struct brw_context *brw, | |||
return NULL; | |||
} | |||
if (devinfo->gen >= 10) { | |||
buf->clear_color_bo = buf->bo; | |||
brw_bo_reference(buf->clear_color_bo); | |||
} | |||
buf->surf = *aux_surf; | |||
return buf; |
@@ -180,6 +180,22 @@ struct intel_miptree_aux_buffer | |||
* @see 3DSTATE_HIER_DEPTH_BUFFER.SurfaceQPitch | |||
*/ | |||
uint32_t qpitch; | |||
/** | |||
* Buffer object containing the indirect clear color. | |||
* | |||
* @see create_ccs_buf_for_image | |||
* @see RENDER_SURFACE_STATE.ClearValueAddress | |||
*/ | |||
struct brw_bo *clear_color_bo; | |||
/** | |||
* Offset into bo where the clear color can be found. | |||
* | |||
* @see create_ccs_buf_for_image | |||
* @see RENDER_SURFACE_STATE.ClearValueAddress | |||
*/ | |||
uint32_t clear_color_offset; | |||
}; | |||
struct intel_mipmap_tree |