summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristian Høgsberg Kristensen <[email protected]>2015-08-14 10:02:19 -0700
committerKristian Høgsberg Kristensen <[email protected]>2015-08-17 11:41:19 -0700
commit6d09d0644b4c3a9e4512c193686cfa556cdaf00f (patch)
tree7fc2dff0365c680bf7d2bd3df7ce1ce31b09930c
parent0deae66eb138ada869105a359ce0c87e412ed713 (diff)
vk: Use anv_image_create() for creating dmabuf VkImage
We need to make sure we use the VkImage infrastructure for creating dmabuf images. Signed-off-by: Kristian Høgsberg Kristensen <[email protected]>
-rw-r--r--src/vulkan/anv_image.c6
-rw-r--r--src/vulkan/anv_intel.c36
-rw-r--r--src/vulkan/anv_private.h1
-rw-r--r--src/vulkan/anv_x11.c1
4 files changed, 30 insertions, 14 deletions
diff --git a/src/vulkan/anv_image.c b/src/vulkan/anv_image.c
index 21099cb7730..2937c2e76e5 100644
--- a/src/vulkan/anv_image.c
+++ b/src/vulkan/anv_image.c
@@ -181,8 +181,10 @@ anv_image_make_surface(const struct anv_image_create_info *create_info,
*/
assert(anv_is_aligned(qpitch, j));
- const uint32_t stride = align_u32(mt_width * format_info->cpp,
- tile_info->width);
+ uint32_t stride = align_u32(mt_width * format_info->cpp, tile_info->width);
+ if (create_info->stride > 0)
+ stride = create_info->stride;
+
const uint32_t size = stride * align_u32(mt_height, tile_info->height);
const uint32_t offset = align_u32(*inout_image_size,
tile_info->surface_alignment);
diff --git a/src/vulkan/anv_intel.c b/src/vulkan/anv_intel.c
index 9fc06aef6f8..f64e2dcb1e4 100644
--- a/src/vulkan/anv_intel.c
+++ b/src/vulkan/anv_intel.c
@@ -39,6 +39,7 @@ VkResult anv_CreateDmaBufImageINTEL(
struct anv_device_memory *mem;
struct anv_image *image;
VkResult result;
+ VkImage image_h;
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_CREATE_INFO_INTEL);
@@ -65,19 +66,30 @@ VkResult anv_CreateDmaBufImageINTEL(
goto fail_mem;
}
- *image = (struct anv_image) {
- .bo = &mem->bo,
- .offset = 0,
- .type = VK_IMAGE_TYPE_2D,
- .extent = pCreateInfo->extent,
- .size = mem->bo.size,
-
- .primary_surface = {
- .offset = 0,
- .stride = pCreateInfo->strideInBytes,
+ anv_image_create(_device,
+ &(struct anv_image_create_info) {
+ .force_tile_mode = true,
.tile_mode = XMAJOR,
- },
- };
+ .stride = pCreateInfo->strideInBytes,
+ .vk_info =
+ &(VkImageCreateInfo) {
+ .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+ .imageType = VK_IMAGE_TYPE_2D,
+ .format = pCreateInfo->format,
+ .extent = pCreateInfo->extent,
+ .mipLevels = 1,
+ .arraySize = 1,
+ .samples = 1,
+ /* FIXME: Need a way to use X tiling to allow scanout */
+ .tiling = VK_IMAGE_TILING_OPTIMAL,
+ .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+ .flags = 0,
+ }},
+ &image_h);
+
+ image = anv_image_from_handle(image_h);
+ image->bo = &mem->bo;
+ image->offset = 0;
assert(image->extent.width > 0);
assert(image->extent.height > 0);
diff --git a/src/vulkan/anv_private.h b/src/vulkan/anv_private.h
index d53f63d5d27..d517814847c 100644
--- a/src/vulkan/anv_private.h
+++ b/src/vulkan/anv_private.h
@@ -996,6 +996,7 @@ struct anv_image_create_info {
const VkImageCreateInfo *vk_info;
bool force_tile_mode;
uint8_t tile_mode;
+ uint32_t stride;
};
VkResult anv_image_create(VkDevice _device,
diff --git a/src/vulkan/anv_x11.c b/src/vulkan/anv_x11.c
index 9ffce8d8cbf..cc11a5fc762 100644
--- a/src/vulkan/anv_x11.c
+++ b/src/vulkan/anv_x11.c
@@ -121,6 +121,7 @@ VkResult anv_CreateSwapChainWSI(
&(struct anv_image_create_info) {
.force_tile_mode = true,
.tile_mode = XMAJOR,
+ .stride = 0,
.vk_info =
&(VkImageCreateInfo) {
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,