summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vulkan/anv_cmd_buffer.c34
-rw-r--r--src/vulkan/anv_device.c12
-rw-r--r--src/vulkan/anv_image.c18
-rw-r--r--src/vulkan/anv_meta.c8
-rw-r--r--src/vulkan/anv_private.h28
-rw-r--r--src/vulkan/gen7_state.c38
-rw-r--r--src/vulkan/gen8_state.c36
7 files changed, 91 insertions, 83 deletions
diff --git a/src/vulkan/anv_cmd_buffer.c b/src/vulkan/anv_cmd_buffer.c
index 50f8304f9b3..008eeed40d6 100644
--- a/src/vulkan/anv_cmd_buffer.c
+++ b/src/vulkan/anv_cmd_buffer.c
@@ -440,11 +440,11 @@ anv_cmd_buffer_emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
const struct anv_color_attachment_view *cview =
(const struct anv_color_attachment_view *) aview;
- const struct anv_surface_view *sview = &cview->surface_view;
+ const struct anv_image_view *iview = &cview->image_view;
- bt_map[a] = sview->surface_state.offset + state_offset;
- add_surface_state_reloc(cmd_buffer, sview->surface_state,
- sview->bo, sview->offset);
+ bt_map[a] = iview->surface_state.offset + state_offset;
+ add_surface_state_reloc(cmd_buffer, iview->surface_state,
+ iview->bo, iview->offset);
}
if (layout == NULL)
@@ -462,14 +462,28 @@ anv_cmd_buffer_emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
struct anv_descriptor *desc =
&d->set->descriptors[surface_slots[b].index];
- if (desc->type != ANV_DESCRIPTOR_TYPE_SURFACE_VIEW)
- continue;
+ const struct anv_state *surface_state;
+ struct anv_bo *bo;
+ uint32_t bo_offset;
- const struct anv_surface_view *sview = desc->surface_view;
+ switch (desc->type) {
+ case ANV_DESCRIPTOR_TYPE_EMPTY:
+ case ANV_DESCRIPTOR_TYPE_SAMPLER:
+ continue;
+ case ANV_DESCRIPTOR_TYPE_BUFFER_VIEW:
+ surface_state = &desc->buffer_view->surface_state;
+ bo = desc->buffer_view->bo;
+ bo_offset = desc->buffer_view->offset;
+ break;
+ case ANV_DESCRIPTOR_TYPE_IMAGE_VIEW:
+ surface_state = &desc->image_view->surface_state;
+ bo = desc->image_view->bo;
+ bo_offset = desc->image_view->offset;
+ break;
+ }
- bt_map[start + b] = sview->surface_state.offset + state_offset;
- add_surface_state_reloc(cmd_buffer, sview->surface_state,
- sview->bo, sview->offset);
+ bt_map[start + b] = surface_state->offset + state_offset;
+ add_surface_state_reloc(cmd_buffer, *surface_state, bo, bo_offset);
}
}
diff --git a/src/vulkan/anv_device.c b/src/vulkan/anv_device.c
index b2c8027fcf9..5302ee5cd73 100644
--- a/src/vulkan/anv_device.c
+++ b/src/vulkan/anv_device.c
@@ -1408,7 +1408,7 @@ anv_buffer_view_create(
if (bview == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
- bview->surface_view = (struct anv_surface_view) {
+ *bview = (struct anv_buffer_view) {
.bo = buffer->bo,
.offset = buffer->offset + pCreateInfo->offset,
.surface_state = anv_state_pool_alloc(&device->surface_state_pool, 64, 64),
@@ -1428,7 +1428,7 @@ VkResult anv_DestroyBufferView(
ANV_FROM_HANDLE(anv_device, device, _device);
ANV_FROM_HANDLE(anv_buffer_view, bview, _bview);
- anv_surface_view_fini(device, &bview->surface_view);
+ anv_state_pool_free(&device->surface_state_pool, bview->surface_state);
anv_device_free(device, bview);
return VK_SUCCESS;
@@ -1754,8 +1754,8 @@ VkResult anv_UpdateDescriptorSets(
write->pDescriptors[j].imageView);
set->descriptors[write->destBinding + j] = (struct anv_descriptor) {
- .type = ANV_DESCRIPTOR_TYPE_SURFACE_VIEW,
- .surface_view = &iview->surface_view,
+ .type = ANV_DESCRIPTOR_TYPE_IMAGE_VIEW,
+ .image_view = iview,
};
}
break;
@@ -1778,8 +1778,8 @@ VkResult anv_UpdateDescriptorSets(
write->pDescriptors[j].bufferView);
set->descriptors[write->destBinding + j] = (struct anv_descriptor) {
- .type = ANV_DESCRIPTOR_TYPE_SURFACE_VIEW,
- .surface_view = &bview->surface_view,
+ .type = ANV_DESCRIPTOR_TYPE_BUFFER_VIEW,
+ .buffer_view = bview,
};
}
diff --git a/src/vulkan/anv_image.c b/src/vulkan/anv_image.c
index 19004320298..75233d1fe61 100644
--- a/src/vulkan/anv_image.c
+++ b/src/vulkan/anv_image.c
@@ -372,13 +372,6 @@ VkResult anv_GetImageSubresourceLayout(
stub_return(VK_UNSUPPORTED);
}
-void
-anv_surface_view_fini(struct anv_device *device,
- struct anv_surface_view *sview)
-{
- anv_state_pool_free(&device->surface_state_pool, sview->surface_state);
-}
-
VkResult
anv_validate_CreateImageView(VkDevice _device,
const VkImageViewCreateInfo *pCreateInfo,
@@ -499,13 +492,20 @@ anv_CreateImageView(VkDevice _device,
return VK_SUCCESS;
}
+static void
+anv_image_view_fini(struct anv_device *device,
+ struct anv_image_view *iview)
+{
+ anv_state_pool_free(&device->surface_state_pool, iview->surface_state);
+}
+
VkResult
anv_DestroyImageView(VkDevice _device, VkImageView _iview)
{
ANV_FROM_HANDLE(anv_device, device, _device);
ANV_FROM_HANDLE(anv_image_view, iview, _iview);
- anv_surface_view_fini(device, &iview->surface_view);
+ anv_image_view_fini(device, iview);
anv_device_free(device, iview);
return VK_SUCCESS;
@@ -643,7 +643,7 @@ anv_DestroyAttachmentView(VkDevice _device, VkAttachmentView _aview)
struct anv_color_attachment_view *cview =
(struct anv_color_attachment_view *) aview;
- anv_surface_view_fini(device, &cview->surface_view);
+ anv_image_view_fini(device, &cview->image_view);
}
anv_device_free(device, aview);
diff --git a/src/vulkan/anv_meta.c b/src/vulkan/anv_meta.c
index fe235e23fb0..1574830e0b8 100644
--- a/src/vulkan/anv_meta.c
+++ b/src/vulkan/anv_meta.c
@@ -739,7 +739,7 @@ meta_emit_blit(struct anv_cmd_buffer *cmd_buffer,
{
struct anv_device *device = cmd_buffer->device;
struct anv_attachment_view *dest_aview = &dest_cview->attachment_view;
- struct anv_surface_view *dest_sview = &dest_cview->surface_view;
+ struct anv_image_view *dest_iview = &dest_cview->image_view;
VkDescriptorPool dummy_desc_pool = { .handle = 1 };
struct blit_vb_data {
@@ -854,7 +854,7 @@ meta_emit_blit(struct anv_cmd_buffer *cmd_buffer,
.attachmentCount = 1,
.pAttachments = &(VkAttachmentDescription) {
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION,
- .format = dest_sview->format->vk_format,
+ .format = dest_iview->format->vk_format,
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
.initialLayout = VK_IMAGE_LAYOUT_GENERAL,
@@ -1561,7 +1561,7 @@ void anv_CmdClearColorImage(
cmd_buffer);
struct anv_attachment_view *aview = &cview.attachment_view;
- struct anv_surface_view *sview = &cview.surface_view;
+ struct anv_image_view *iview = &cview.image_view;
VkFramebuffer fb;
anv_CreateFramebuffer(anv_device_to_handle(cmd_buffer->device),
@@ -1586,7 +1586,7 @@ void anv_CmdClearColorImage(
.attachmentCount = 1,
.pAttachments = &(VkAttachmentDescription) {
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION,
- .format = sview->format->vk_format,
+ .format = iview->format->vk_format,
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
.initialLayout = VK_IMAGE_LAYOUT_GENERAL,
diff --git a/src/vulkan/anv_private.h b/src/vulkan/anv_private.h
index 09890730fd6..8c4c9efdc6f 100644
--- a/src/vulkan/anv_private.h
+++ b/src/vulkan/anv_private.h
@@ -730,14 +730,16 @@ struct anv_descriptor_set_layout {
enum anv_descriptor_type {
ANV_DESCRIPTOR_TYPE_EMPTY = 0,
+ ANV_DESCRIPTOR_TYPE_BUFFER_VIEW,
+ ANV_DESCRIPTOR_TYPE_IMAGE_VIEW,
ANV_DESCRIPTOR_TYPE_SAMPLER,
- ANV_DESCRIPTOR_TYPE_SURFACE_VIEW,
};
struct anv_descriptor {
union {
+ struct anv_buffer_view *buffer_view;
+ struct anv_image_view *image_view;
struct anv_sampler *sampler;
- struct anv_surface_view *surface_view;
};
enum anv_descriptor_type type;
@@ -1233,20 +1235,19 @@ struct anv_image {
};
};
-struct anv_surface_view {
+struct anv_buffer_view {
struct anv_state surface_state; /**< RENDER_SURFACE_STATE */
struct anv_bo *bo;
- uint32_t offset; /**< VkBufferCreateInfo::offset */
- uint32_t range; /**< VkBufferCreateInfo::range */
- const struct anv_format *format; /**< VkBufferCreateInfo::format */
-};
-
-struct anv_buffer_view {
- struct anv_surface_view surface_view;
+ uint32_t offset; /**< Offset into bo. */
+ uint32_t range; /**< VkBufferViewCreateInfo::range */
+ const struct anv_format *format; /**< VkBufferViewCreateInfo::format */
};
struct anv_image_view {
- struct anv_surface_view surface_view;
+ struct anv_state surface_state; /**< RENDER_SURFACE_STATE */
+ struct anv_bo *bo;
+ uint32_t offset; /**< Offset into bo. */
+ const struct anv_format *format; /**< VkImageViewCreateInfo::format */
VkExtent3D extent;
};
@@ -1262,7 +1263,7 @@ struct anv_attachment_view {
struct anv_color_attachment_view {
struct anv_attachment_view attachment_view;
- struct anv_surface_view surface_view;
+ struct anv_image_view image_view;
};
struct anv_depth_stencil_view {
@@ -1334,9 +1335,6 @@ void gen7_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);
-void anv_surface_view_fini(struct anv_device *device,
- struct anv_surface_view *sview);
-
struct anv_sampler {
uint32_t state[4];
};
diff --git a/src/vulkan/gen7_state.c b/src/vulkan/gen7_state.c
index a782690718b..5031db5edea 100644
--- a/src/vulkan/gen7_state.c
+++ b/src/vulkan/gen7_state.c
@@ -75,9 +75,8 @@ VkResult gen7_CreateBufferView(
const struct anv_format *format =
anv_format_for_vk_format(pCreateInfo->format);
- gen7_fill_buffer_surface_state(bview->surface_view.surface_state.map,
- format, bview->surface_view.offset,
- pCreateInfo->range);
+ gen7_fill_buffer_surface_state(bview->surface_state.map, format,
+ bview->offset, pCreateInfo->range);
*pView = anv_buffer_view_to_handle(bview);
@@ -273,7 +272,6 @@ gen7_image_view_init(struct anv_image_view *iview,
ANV_FROM_HANDLE(anv_image, image, pCreateInfo->image);
const VkImageSubresourceRange *range = &pCreateInfo->subresourceRange;
- struct anv_surface_view *sview = &iview->surface_view;
struct anv_surface *surface =
anv_image_get_surface_for_aspect_mask(image, range->aspectMask);
@@ -286,9 +284,9 @@ gen7_image_view_init(struct anv_image_view *iview,
if (pCreateInfo->viewType != VK_IMAGE_VIEW_TYPE_2D)
anv_finishme("non-2D image views");
- sview->bo = image->bo;
- sview->offset = image->offset + surface->offset;
- sview->format = anv_format_for_vk_format(pCreateInfo->format);
+ iview->bo = image->bo;
+ iview->offset = image->offset + surface->offset;
+ iview->format = anv_format_for_vk_format(pCreateInfo->format);
iview->extent = (VkExtent3D) {
.width = anv_minify(image->extent.width, range->baseMipLevel),
@@ -346,18 +344,18 @@ gen7_image_view_init(struct anv_image_view *iview,
.BlueClearColor = 0,
.AlphaClearColor = 0,
.ResourceMinLOD = 0.0,
- .SurfaceBaseAddress = { NULL, sview->offset },
+ .SurfaceBaseAddress = { NULL, iview->offset },
};
if (cmd_buffer) {
- sview->surface_state =
+ iview->surface_state =
anv_state_stream_alloc(&cmd_buffer->surface_state_stream, 64, 64);
} else {
- sview->surface_state =
+ iview->surface_state =
anv_state_pool_alloc(&device->surface_state_pool, 64, 64);
}
- GEN7_RENDER_SURFACE_STATE_pack(NULL, sview->surface_state.map,
+ GEN7_RENDER_SURFACE_STATE_pack(NULL, iview->surface_state.map,
&surface_state);
}
@@ -369,7 +367,7 @@ gen7_color_attachment_view_init(struct anv_color_attachment_view *cview,
{
ANV_FROM_HANDLE(anv_image, image, pCreateInfo->image);
struct anv_attachment_view *aview = &cview->attachment_view;
- struct anv_surface_view *sview = &cview->surface_view;
+ struct anv_image_view *iview = &cview->image_view;
struct anv_surface *surface =
anv_image_get_surface_for_color_attachment(image);
@@ -379,9 +377,9 @@ gen7_color_attachment_view_init(struct anv_color_attachment_view *cview,
anv_assert(pCreateInfo->mipLevel < image->levels);
anv_assert(pCreateInfo->baseArraySlice + pCreateInfo->arraySize <= image->array_size);
- sview->bo = image->bo;
- sview->offset = image->offset + surface->offset;
- sview->format = anv_format_for_vk_format(pCreateInfo->format);
+ iview->bo = image->bo;
+ iview->offset = image->offset + surface->offset;
+ iview->format = anv_format_for_vk_format(pCreateInfo->format);
aview->extent = (VkExtent3D) {
.width = anv_minify(image->extent.width, pCreateInfo->mipLevel),
@@ -397,17 +395,17 @@ gen7_color_attachment_view_init(struct anv_color_attachment_view *cview,
}
if (cmd_buffer) {
- sview->surface_state =
+ iview->surface_state =
anv_state_stream_alloc(&cmd_buffer->surface_state_stream, 64, 64);
} else {
- sview->surface_state =
+ iview->surface_state =
anv_state_pool_alloc(&device->surface_state_pool, 64, 64);
}
struct GEN7_RENDER_SURFACE_STATE surface_state = {
.SurfaceType = SURFTYPE_2D,
.SurfaceArray = image->array_size > 1,
- .SurfaceFormat = sview->format->surface_format,
+ .SurfaceFormat = iview->format->surface_format,
.SurfaceVerticalAlignment = anv_valign[surface->v_align],
.SurfaceHorizontalAlignment = anv_halign[surface->h_align],
@@ -447,10 +445,10 @@ gen7_color_attachment_view_init(struct anv_color_attachment_view *cview,
.BlueClearColor = 0,
.AlphaClearColor = 0,
.ResourceMinLOD = 0.0,
- .SurfaceBaseAddress = { NULL, sview->offset },
+ .SurfaceBaseAddress = { NULL, iview->offset },
};
- GEN7_RENDER_SURFACE_STATE_pack(NULL, sview->surface_state.map,
+ GEN7_RENDER_SURFACE_STATE_pack(NULL, iview->surface_state.map,
&surface_state);
}
diff --git a/src/vulkan/gen8_state.c b/src/vulkan/gen8_state.c
index c47d317d2a3..2b820a3177d 100644
--- a/src/vulkan/gen8_state.c
+++ b/src/vulkan/gen8_state.c
@@ -119,9 +119,8 @@ VkResult gen8_CreateBufferView(
const struct anv_format *format =
anv_format_for_vk_format(pCreateInfo->format);
- gen8_fill_buffer_surface_state(bview->surface_view.surface_state.map,
- format, bview->surface_view.offset,
- pCreateInfo->range);
+ gen8_fill_buffer_surface_state(bview->surface_state.map, format,
+ bview->offset, pCreateInfo->range);
*pView = anv_buffer_view_to_handle(bview);
@@ -149,7 +148,6 @@ gen8_image_view_init(struct anv_image_view *iview,
ANV_FROM_HANDLE(anv_image, image, pCreateInfo->image);
const VkImageSubresourceRange *range = &pCreateInfo->subresourceRange;
- struct anv_surface_view *sview = &iview->surface_view;
struct anv_surface *surface =
anv_image_get_surface_for_aspect_mask(image, range->aspectMask);
@@ -162,9 +160,9 @@ gen8_image_view_init(struct anv_image_view *iview,
const struct anv_image_view_info view_type_info =
anv_image_view_info_for_vk_image_view_type(pCreateInfo->viewType);
- sview->bo = image->bo;
- sview->offset = image->offset + surface->offset;
- sview->format = format_info;
+ iview->bo = image->bo;
+ iview->offset = image->offset + surface->offset;
+ iview->format = format_info;
iview->extent = (VkExtent3D) {
.width = anv_minify(image->extent.width, range->baseMipLevel),
@@ -267,18 +265,18 @@ gen8_image_view_init(struct anv_image_view *iview,
.ShaderChannelSelectBlue = vk_to_gen_swizzle[pCreateInfo->channels.b],
.ShaderChannelSelectAlpha = vk_to_gen_swizzle[pCreateInfo->channels.a],
.ResourceMinLOD = 0.0,
- .SurfaceBaseAddress = { NULL, sview->offset },
+ .SurfaceBaseAddress = { NULL, iview->offset },
};
if (cmd_buffer) {
- sview->surface_state =
+ iview->surface_state =
anv_state_stream_alloc(&cmd_buffer->surface_state_stream, 64, 64);
} else {
- sview->surface_state =
+ iview->surface_state =
anv_state_pool_alloc(&device->surface_state_pool, 64, 64);
}
- GEN8_RENDER_SURFACE_STATE_pack(NULL, sview->surface_state.map,
+ GEN8_RENDER_SURFACE_STATE_pack(NULL, iview->surface_state.map,
&surface_state);
}
@@ -290,7 +288,7 @@ gen8_color_attachment_view_init(struct anv_color_attachment_view *cview,
{
ANV_FROM_HANDLE(anv_image, image, pCreateInfo->image);
struct anv_attachment_view *aview = &cview->attachment_view;
- struct anv_surface_view *sview = &cview->surface_view;
+ struct anv_image_view *iview = &cview->image_view;
struct anv_surface *surface =
anv_image_get_surface_for_color_attachment(image);
const struct anv_format *format_info =
@@ -305,9 +303,9 @@ gen8_color_attachment_view_init(struct anv_color_attachment_view *cview,
anv_assert(pCreateInfo->mipLevel < image->levels);
anv_assert(pCreateInfo->baseArraySlice + pCreateInfo->arraySize <= image->array_size);
- sview->bo = image->bo;
- sview->offset = image->offset + surface->offset;
- sview->format = anv_format_for_vk_format(pCreateInfo->format);
+ iview->bo = image->bo;
+ iview->offset = image->offset + surface->offset;
+ iview->format = anv_format_for_vk_format(pCreateInfo->format);
aview->extent = (VkExtent3D) {
.width = anv_minify(image->extent.width, pCreateInfo->mipLevel),
@@ -355,10 +353,10 @@ gen8_color_attachment_view_init(struct anv_color_attachment_view *cview,
}
if (cmd_buffer) {
- sview->surface_state =
+ iview->surface_state =
anv_state_stream_alloc(&cmd_buffer->surface_state_stream, 64, 64);
} else {
- sview->surface_state =
+ iview->surface_state =
anv_state_pool_alloc(&device->surface_state_pool, 64, 64);
}
@@ -411,10 +409,10 @@ gen8_color_attachment_view_init(struct anv_color_attachment_view *cview,
.ShaderChannelSelectBlue = SCS_BLUE,
.ShaderChannelSelectAlpha = SCS_ALPHA,
.ResourceMinLOD = 0.0,
- .SurfaceBaseAddress = { NULL, sview->offset },
+ .SurfaceBaseAddress = { NULL, iview->offset },
};
- GEN8_RENDER_SURFACE_STATE_pack(NULL, sview->surface_state.map,
+ GEN8_RENDER_SURFACE_STATE_pack(NULL, iview->surface_state.map,
&surface_state);
}