vk: Move anv_CreateBufferView to anv_gen8.c
Signed-off-by: Kristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
This commit is contained in:
@@ -518,7 +518,7 @@ 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;
|
||||||
anv_fill_buffer_surface_state(state.map, view->format, offset,
|
gen8_fill_buffer_surface_state(state.map, view->format, offset,
|
||||||
view->range - dynamic_offset);
|
view->range - dynamic_offset);
|
||||||
} else {
|
} else {
|
||||||
offset = view->offset;
|
offset = view->offset;
|
||||||
|
@@ -1324,88 +1324,42 @@ VkResult anv_DestroyBuffer(
|
|||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Buffer view functions
|
VkResult
|
||||||
|
anv_buffer_view_create(
|
||||||
void
|
struct anv_device * device,
|
||||||
anv_fill_buffer_surface_state(void *state, const struct anv_format *format,
|
const VkBufferViewCreateInfo* pCreateInfo,
|
||||||
uint32_t offset, uint32_t range)
|
struct anv_buffer_view ** view_out)
|
||||||
{
|
{
|
||||||
/* This assumes RGBA float format. */
|
ANV_FROM_HANDLE(anv_buffer, buffer, pCreateInfo->buffer);
|
||||||
uint32_t stride = 4;
|
struct anv_buffer_view *view;
|
||||||
uint32_t num_elements = range / stride;
|
|
||||||
|
|
||||||
struct GEN8_RENDER_SURFACE_STATE surface_state = {
|
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO);
|
||||||
.SurfaceType = SURFTYPE_BUFFER,
|
|
||||||
.SurfaceArray = false,
|
view = anv_device_alloc(device, sizeof(*view), 8,
|
||||||
.SurfaceFormat = format->surface_format,
|
VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
|
||||||
.SurfaceVerticalAlignment = VALIGN4,
|
if (view == NULL)
|
||||||
.SurfaceHorizontalAlignment = HALIGN4,
|
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||||
.TileMode = LINEAR,
|
|
||||||
.VerticalLineStride = 0,
|
view->view = (struct anv_surface_view) {
|
||||||
.VerticalLineStrideOffset = 0,
|
.bo = buffer->bo,
|
||||||
.SamplerL2BypassModeDisable = true,
|
.offset = buffer->offset + pCreateInfo->offset,
|
||||||
.RenderCacheReadWriteMode = WriteOnlyCache,
|
.surface_state = anv_state_pool_alloc(&device->surface_state_pool, 64, 64),
|
||||||
.MemoryObjectControlState = GEN8_MOCS,
|
.format = anv_format_for_vk_format(pCreateInfo->format),
|
||||||
.BaseMipLevel = 0.0,
|
.range = pCreateInfo->range,
|
||||||
.SurfaceQPitch = 0,
|
|
||||||
.Height = (num_elements >> 7) & 0x3fff,
|
|
||||||
.Width = num_elements & 0x7f,
|
|
||||||
.Depth = (num_elements >> 21) & 0x3f,
|
|
||||||
.SurfacePitch = stride - 1,
|
|
||||||
.MinimumArrayElement = 0,
|
|
||||||
.NumberofMultisamples = MULTISAMPLECOUNT_1,
|
|
||||||
.XOffset = 0,
|
|
||||||
.YOffset = 0,
|
|
||||||
.SurfaceMinLOD = 0,
|
|
||||||
.MIPCountLOD = 0,
|
|
||||||
.AuxiliarySurfaceMode = AUX_NONE,
|
|
||||||
.RedClearColor = 0,
|
|
||||||
.GreenClearColor = 0,
|
|
||||||
.BlueClearColor = 0,
|
|
||||||
.AlphaClearColor = 0,
|
|
||||||
.ShaderChannelSelectRed = SCS_RED,
|
|
||||||
.ShaderChannelSelectGreen = SCS_GREEN,
|
|
||||||
.ShaderChannelSelectBlue = SCS_BLUE,
|
|
||||||
.ShaderChannelSelectAlpha = SCS_ALPHA,
|
|
||||||
.ResourceMinLOD = 0.0,
|
|
||||||
/* FIXME: We assume that the image must be bound at this time. */
|
|
||||||
.SurfaceBaseAddress = { NULL, offset },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GEN8_RENDER_SURFACE_STATE_pack(NULL, state, &surface_state);
|
*view_out = view;
|
||||||
|
|
||||||
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VkResult anv_CreateBufferView(
|
VkResult anv_CreateBufferView(
|
||||||
VkDevice _device,
|
VkDevice _device,
|
||||||
const VkBufferViewCreateInfo* pCreateInfo,
|
const VkBufferViewCreateInfo* pCreateInfo,
|
||||||
VkBufferView* pView)
|
VkBufferView* pView)
|
||||||
{
|
{
|
||||||
ANV_FROM_HANDLE(anv_device, device, _device);
|
return driver_layer->CreateBufferView(_device, pCreateInfo, pView);
|
||||||
ANV_FROM_HANDLE(anv_buffer, buffer, pCreateInfo->buffer);
|
|
||||||
struct anv_buffer_view *bview;
|
|
||||||
struct anv_surface_view *view;
|
|
||||||
|
|
||||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO);
|
|
||||||
|
|
||||||
bview = anv_device_alloc(device, sizeof(*view), 8,
|
|
||||||
VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
|
|
||||||
if (bview == NULL)
|
|
||||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
|
||||||
|
|
||||||
view = &bview->view;
|
|
||||||
view->bo = buffer->bo;
|
|
||||||
view->offset = buffer->offset + pCreateInfo->offset;
|
|
||||||
view->surface_state =
|
|
||||||
anv_state_pool_alloc(&device->surface_state_pool, 64, 64);
|
|
||||||
view->format = anv_format_for_vk_format(pCreateInfo->format);
|
|
||||||
view->range = pCreateInfo->range;
|
|
||||||
|
|
||||||
anv_fill_buffer_surface_state(view->surface_state.map, view->format,
|
|
||||||
view->offset, pCreateInfo->range);
|
|
||||||
|
|
||||||
*pView = anv_buffer_view_to_handle(bview);
|
|
||||||
|
|
||||||
return VK_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VkResult anv_DestroyBufferView(
|
VkResult anv_DestroyBufferView(
|
||||||
|
@@ -68,3 +68,77 @@ VkResult gen8_CreateDynamicRasterState(
|
|||||||
|
|
||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gen8_fill_buffer_surface_state(void *state, const struct anv_format *format,
|
||||||
|
uint32_t offset, uint32_t range)
|
||||||
|
{
|
||||||
|
/* This assumes RGBA float format. */
|
||||||
|
uint32_t stride = 4;
|
||||||
|
uint32_t num_elements = range / stride;
|
||||||
|
|
||||||
|
struct GEN8_RENDER_SURFACE_STATE surface_state = {
|
||||||
|
.SurfaceType = SURFTYPE_BUFFER,
|
||||||
|
.SurfaceArray = false,
|
||||||
|
.SurfaceFormat = format->surface_format,
|
||||||
|
.SurfaceVerticalAlignment = VALIGN4,
|
||||||
|
.SurfaceHorizontalAlignment = HALIGN4,
|
||||||
|
.TileMode = LINEAR,
|
||||||
|
.VerticalLineStride = 0,
|
||||||
|
.VerticalLineStrideOffset = 0,
|
||||||
|
.SamplerL2BypassModeDisable = true,
|
||||||
|
.RenderCacheReadWriteMode = WriteOnlyCache,
|
||||||
|
.MemoryObjectControlState = GEN8_MOCS,
|
||||||
|
.BaseMipLevel = 0.0,
|
||||||
|
.SurfaceQPitch = 0,
|
||||||
|
.Height = (num_elements >> 7) & 0x3fff,
|
||||||
|
.Width = num_elements & 0x7f,
|
||||||
|
.Depth = (num_elements >> 21) & 0x3f,
|
||||||
|
.SurfacePitch = stride - 1,
|
||||||
|
.MinimumArrayElement = 0,
|
||||||
|
.NumberofMultisamples = MULTISAMPLECOUNT_1,
|
||||||
|
.XOffset = 0,
|
||||||
|
.YOffset = 0,
|
||||||
|
.SurfaceMinLOD = 0,
|
||||||
|
.MIPCountLOD = 0,
|
||||||
|
.AuxiliarySurfaceMode = AUX_NONE,
|
||||||
|
.RedClearColor = 0,
|
||||||
|
.GreenClearColor = 0,
|
||||||
|
.BlueClearColor = 0,
|
||||||
|
.AlphaClearColor = 0,
|
||||||
|
.ShaderChannelSelectRed = SCS_RED,
|
||||||
|
.ShaderChannelSelectGreen = SCS_GREEN,
|
||||||
|
.ShaderChannelSelectBlue = SCS_BLUE,
|
||||||
|
.ShaderChannelSelectAlpha = SCS_ALPHA,
|
||||||
|
.ResourceMinLOD = 0.0,
|
||||||
|
/* FIXME: We assume that the image must be bound at this time. */
|
||||||
|
.SurfaceBaseAddress = { NULL, offset },
|
||||||
|
};
|
||||||
|
|
||||||
|
GEN8_RENDER_SURFACE_STATE_pack(NULL, state, &surface_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
VkResult gen8_CreateBufferView(
|
||||||
|
VkDevice _device,
|
||||||
|
const VkBufferViewCreateInfo* pCreateInfo,
|
||||||
|
VkBufferView* pView)
|
||||||
|
{
|
||||||
|
ANV_FROM_HANDLE(anv_device, device, _device);
|
||||||
|
struct anv_buffer_view *view;
|
||||||
|
VkResult result;
|
||||||
|
|
||||||
|
result = anv_buffer_view_create(device, pCreateInfo, &view);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
const struct anv_format *format =
|
||||||
|
anv_format_for_vk_format(pCreateInfo->format);
|
||||||
|
|
||||||
|
gen8_fill_buffer_surface_state(view->view.surface_state.map, format,
|
||||||
|
view->view.offset, pCreateInfo->range);
|
||||||
|
|
||||||
|
*pView = anv_buffer_view_to_handle(view);
|
||||||
|
|
||||||
|
return VK_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1021,7 +1021,12 @@ void anv_color_attachment_view_init(struct anv_color_attachment_view *view,
|
|||||||
struct anv_device *device,
|
struct anv_device *device,
|
||||||
const VkAttachmentViewCreateInfo* pCreateInfo,
|
const VkAttachmentViewCreateInfo* pCreateInfo,
|
||||||
struct anv_cmd_buffer *cmd_buffer);
|
struct anv_cmd_buffer *cmd_buffer);
|
||||||
void anv_fill_buffer_surface_state(void *state, const struct anv_format *format,
|
|
||||||
|
VkResult anv_buffer_view_create(struct anv_device *device,
|
||||||
|
const VkBufferViewCreateInfo *pCreateInfo,
|
||||||
|
struct anv_buffer_view **view_out);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
void anv_surface_view_fini(struct anv_device *device,
|
void anv_surface_view_fini(struct anv_device *device,
|
||||||
|
Reference in New Issue
Block a user