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:
@@ -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);
|
||||||
|
@@ -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,
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user