vk: Add generic wrapper for filling out buffer surface state

We need this for generating surface state on the fly for dynamic buffer
views.

Signed-off-by: Kristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
This commit is contained in:
Kristian Høgsberg Kristensen
2015-08-19 16:01:33 -07:00
parent a2b822185e
commit 8fe74ec45c
3 changed files with 21 additions and 2 deletions

View File

@@ -425,8 +425,9 @@ anv_cmd_buffer_emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
d->dynamic_offsets[surface_slots[b].dynamic_slot]; d->dynamic_offsets[surface_slots[b].dynamic_slot];
offset = view->offset + dynamic_offset; offset = view->offset + dynamic_offset;
gen8_fill_buffer_surface_state(state.map, view->format, offset, anv_fill_buffer_surface_state(cmd_buffer->device,
view->range - dynamic_offset); state.map, view->format, offset,
view->range - dynamic_offset);
} else { } else {
offset = view->offset; offset = view->offset;
memcpy(state.map, view->surface_state.map, 64); memcpy(state.map, view->surface_state.map, 64);

View File

@@ -1324,6 +1324,20 @@ VkResult anv_DestroyBuffer(
return VK_SUCCESS; return VK_SUCCESS;
} }
void
anv_fill_buffer_surface_state(struct anv_device *device, void *state,
const struct anv_format *format,
uint32_t offset, uint32_t range)
{
switch (device->info.gen) {
case 8:
gen8_fill_buffer_surface_state(state, format, offset, range);
break;
default:
unreachable("unsupported gen\n");
}
}
VkResult VkResult
anv_buffer_view_create( anv_buffer_view_create(
struct anv_device * device, struct anv_device * device,

View File

@@ -1056,6 +1056,10 @@ VkResult anv_buffer_view_create(struct anv_device *device,
const VkBufferViewCreateInfo *pCreateInfo, const VkBufferViewCreateInfo *pCreateInfo,
struct anv_buffer_view **view_out); struct anv_buffer_view **view_out);
void anv_fill_buffer_surface_state(struct anv_device *device, void *state,
const struct anv_format *format,
uint32_t offset, uint32_t range);
void gen8_fill_buffer_surface_state(void *state, const struct anv_format *format, void gen8_fill_buffer_surface_state(void *state, const struct anv_format *format,
uint32_t offset, uint32_t range); uint32_t offset, uint32_t range);