anv: Use clear address for HiZ fast clears too.
Store the default clear address for HiZ fast clears on a global bo, and point to it when needed. 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>
This commit is contained in:
parent
021e1885d0
commit
e8cadb673d
|
@ -1422,6 +1422,20 @@ vk_priority_to_gen(int priority)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
anv_device_init_hiz_clear_batch(struct anv_device *device)
|
||||
{
|
||||
anv_bo_init_new(&device->hiz_clear_bo, device, 4096);
|
||||
uint32_t *map = anv_gem_mmap(device, device->hiz_clear_bo.gem_handle,
|
||||
0, 4096, 0);
|
||||
|
||||
union isl_color_value hiz_clear = { .u32 = { 0, } };
|
||||
hiz_clear.f32[0] = ANV_HZ_FC_VAL;
|
||||
|
||||
memcpy(map, hiz_clear.u32, sizeof(hiz_clear.u32));
|
||||
anv_gem_munmap(map, device->hiz_clear_bo.size);
|
||||
}
|
||||
|
||||
VkResult anv_CreateDevice(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkDeviceCreateInfo* pCreateInfo,
|
||||
|
@ -1602,6 +1616,9 @@ VkResult anv_CreateDevice(
|
|||
|
||||
anv_device_init_trivial_batch(device);
|
||||
|
||||
if (device->info.gen >= 10)
|
||||
anv_device_init_hiz_clear_batch(device);
|
||||
|
||||
anv_scratch_pool_init(device, &device->scratch_pool);
|
||||
|
||||
anv_queue_init(device, &device->queue);
|
||||
|
@ -1695,6 +1712,8 @@ void anv_DestroyDevice(
|
|||
anv_gem_close(device, device->workaround_bo.gem_handle);
|
||||
|
||||
anv_gem_close(device, device->trivial_batch_bo.gem_handle);
|
||||
if (device->info.gen >= 10)
|
||||
anv_gem_close(device, device->hiz_clear_bo.gem_handle);
|
||||
|
||||
anv_state_pool_finish(&device->surface_state_pool);
|
||||
anv_state_pool_finish(&device->instruction_state_pool);
|
||||
|
|
|
@ -1061,10 +1061,14 @@ anv_image_fill_surface_state(struct anv_device *device,
|
|||
|
||||
struct anv_address clear_address = { .bo = NULL };
|
||||
state_inout->clear_address = 0;
|
||||
if (device->info.gen >= 10 && aux_usage != ISL_AUX_USAGE_NONE &&
|
||||
aux_usage != ISL_AUX_USAGE_HIZ) {
|
||||
|
||||
if (device->info.gen >= 10 && aux_usage != ISL_AUX_USAGE_NONE) {
|
||||
if (aux_usage == ISL_AUX_USAGE_HIZ) {
|
||||
clear_address = (struct anv_address) { .bo = &device->hiz_clear_bo };
|
||||
} else {
|
||||
clear_address = anv_image_get_clear_color_addr(device, image, aspect);
|
||||
}
|
||||
}
|
||||
|
||||
if (view_usage == ISL_SURF_USAGE_STORAGE_BIT &&
|
||||
!(flags & ANV_IMAGE_VIEW_STATE_STORAGE_WRITE_ONLY) &&
|
||||
|
|
|
@ -895,6 +895,7 @@ struct anv_device {
|
|||
|
||||
struct anv_bo workaround_bo;
|
||||
struct anv_bo trivial_batch_bo;
|
||||
struct anv_bo hiz_clear_bo;
|
||||
|
||||
struct anv_pipeline_cache blorp_shader_cache;
|
||||
struct blorp_context blorp;
|
||||
|
|
Loading…
Reference in New Issue