From d82322eb188f258a7dca9ea2b59cc0332dbc4d61 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 9 Jun 2016 13:56:16 -0700 Subject: anv,isl: Lower storage image formats in anv ISL was being a bit too clever for its own good and lowering the format for us. This is all well and good *if* we always want to lower it. However, the GL driver selectively lowers the format depending on whether the surface is write-only or not. Reviewed-by: Chad Versace Cc: "12.0" --- src/intel/isl/isl_surface_state.c | 8 +------- src/intel/vulkan/anv_image.c | 3 +++ 2 files changed, 4 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/intel/isl/isl_surface_state.c b/src/intel/isl/isl_surface_state.c index 13e621f7e18..b2317d81bdc 100644 --- a/src/intel/isl/isl_surface_state.c +++ b/src/intel/isl/isl_surface_state.c @@ -191,13 +191,7 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state, struct GENX(RENDER_SURFACE_STATE) s = { 0 }; s.SurfaceType = get_surftype(info->surf->dim, info->view->usage); - - if (info->view->usage & ISL_SURF_USAGE_STORAGE_BIT) { - s.SurfaceFormat = - isl_lower_storage_image_format(dev->info, info->view->format); - } else { - s.SurfaceFormat = info->view->format; - } + s.SurfaceFormat = info->view->format; #if GEN_IS_HASWELL s.IntegerSurfaceFormat = isl_format_has_int_channel(s.SurfaceFormat); diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index 208e3779c78..77d99313135 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -537,12 +537,15 @@ anv_image_view_init(struct anv_image_view *iview, iview->color_rt_surface_state.alloc_size = 0; } + /* NOTE: This one needs to go last since it may stomp isl_view.format */ if (image->usage & usage_mask & VK_IMAGE_USAGE_STORAGE_BIT) { iview->storage_surface_state = alloc_surface_state(device, cmd_buffer); if (isl_has_matching_typed_storage_image_format(&device->info, format.isl_format)) { isl_view.usage = cube_usage | ISL_SURF_USAGE_STORAGE_BIT; + isl_view.format = isl_lower_storage_image_format(&device->info, + isl_view.format); isl_surf_fill_state(&device->isl_dev, iview->storage_surface_state.map, .surf = &surface->isl, -- cgit v1.2.3