anv/image: clflush surface state map in anv_fill_buffer_surface_state().

Some of its users had the required clflush on non-LLC platforms, some
didn't.  Put the clflush in anv_fill_buffer_surface_state() so we
don't forget.
This commit is contained in:
Francisco Jerez 2016-01-26 14:50:52 -08:00 committed by Jason Ekstrand
parent fc7a7b31c5
commit 6840cc1513
5 changed files with 17 additions and 17 deletions

View file

@ -762,12 +762,9 @@ anv_cmd_buffer_emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
const struct anv_format *format =
anv_format_for_descriptor_type(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
anv_fill_buffer_surface_state(cmd_buffer->device, surface_state.map,
anv_fill_buffer_surface_state(cmd_buffer->device, surface_state,
format->surface_format, bo_offset, 12, 1);
if (!cmd_buffer->device->info.has_llc)
anv_state_clflush(surface_state);
bt_map[0] = surface_state.offset + state_offset;
add_surface_state_reloc(cmd_buffer, surface_state, bo, bo_offset);
}

View file

@ -565,13 +565,10 @@ void anv_UpdateDescriptorSets(
else
view->range = write->pBufferInfo[j].range;
anv_fill_buffer_surface_state(device, view->surface_state.map,
anv_fill_buffer_surface_state(device, view->surface_state,
view->format,
view->offset, view->range, 1);
if (!device->info.has_llc)
anv_state_clflush(view->surface_state);
desc[j] = (struct anv_descriptor) {
.type = write->descriptorType,
.buffer_view = view,

View file

@ -1618,26 +1618,31 @@ void anv_DestroyBuffer(
}
void
anv_fill_buffer_surface_state(struct anv_device *device, void *state,
anv_fill_buffer_surface_state(struct anv_device *device, struct anv_state state,
enum isl_format format,
uint32_t offset, uint32_t range, uint32_t stride)
{
switch (device->info.gen) {
case 7:
if (device->info.is_haswell)
gen75_fill_buffer_surface_state(state, format, offset, range, stride);
gen75_fill_buffer_surface_state(state.map, format, offset, range,
stride);
else
gen7_fill_buffer_surface_state(state, format, offset, range, stride);
gen7_fill_buffer_surface_state(state.map, format, offset, range,
stride);
break;
case 8:
gen8_fill_buffer_surface_state(state, format, offset, range, stride);
gen8_fill_buffer_surface_state(state.map, format, offset, range, stride);
break;
case 9:
gen9_fill_buffer_surface_state(state, format, offset, range, stride);
gen9_fill_buffer_surface_state(state.map, format, offset, range, stride);
break;
default:
unreachable("unsupported gen\n");
}
if (!device->info.has_llc)
anv_state_clflush(state);
}
void anv_DestroySampler(

View file

@ -530,7 +530,7 @@ anv_image_view_init(struct anv_image_view *iview,
iview, pCreateInfo,
VK_IMAGE_USAGE_STORAGE_BIT);
else
anv_fill_buffer_surface_state(device, iview->storage_surface_state.map,
anv_fill_buffer_surface_state(device, iview->storage_surface_state,
ISL_FORMAT_RAW,
iview->offset,
iview->bo->size - iview->offset, 1);
@ -614,7 +614,7 @@ anv_CreateBufferView(VkDevice _device,
view->surface_state =
anv_state_pool_alloc(&device->surface_state_pool, 64, 64);
anv_fill_buffer_surface_state(device, view->surface_state.map,
anv_fill_buffer_surface_state(device, view->surface_state,
view->format,
view->offset, view->range,
format->isl_layout->bs);
@ -631,7 +631,7 @@ anv_CreateBufferView(VkDevice _device,
isl_lower_storage_image_format(&device->isl_dev, view->format) :
ISL_FORMAT_RAW;
anv_fill_buffer_surface_state(device, view->storage_surface_state.map,
anv_fill_buffer_surface_state(device, view->storage_surface_state,
storage_format,
view->offset, view->range,
(storage_format == ISL_FORMAT_RAW ? 1 :

View file

@ -1640,7 +1640,8 @@ struct anv_buffer_view {
const struct anv_format *
anv_format_for_descriptor_type(VkDescriptorType type);
void anv_fill_buffer_surface_state(struct anv_device *device, void *state,
void anv_fill_buffer_surface_state(struct anv_device *device,
struct anv_state state,
enum isl_format format,
uint32_t offset, uint32_t range,
uint32_t stride);