radv: make sure we set buffers as shareable properly.
authorDave Airlie <airlied@redhat.com>
Wed, 1 Nov 2017 23:54:56 +0000 (23:54 +0000)
committerDave Airlie <airlied@redhat.com>
Thu, 2 Nov 2017 01:01:29 +0000 (01:01 +0000)
This should make sure we don't treat exports buffers as local
bos.

Fixes: a639d40f13 (radv: add support for local bos. (v3))
Tested-by: Andres Rodriguez <andresx7@gmail.com>
Reviewed-by: Andres Rodriguez <andresx7@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_private.h

index 0c2f6fa6312d983c349474809a6b9274a09b86fb..fce0bff8491f6081d04207ff66a6e94281fd9cd8 100644 (file)
@@ -2255,13 +2255,13 @@ void radv_GetBufferMemoryRequirements2KHR(
 {
        radv_GetBufferMemoryRequirements(device, pInfo->buffer,
                                         &pMemoryRequirements->memoryRequirements);
-
+       RADV_FROM_HANDLE(radv_buffer, buffer, pInfo->buffer);
        vk_foreach_struct(ext, pMemoryRequirements->pNext) {
                switch (ext->sType) {
                case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR: {
                        VkMemoryDedicatedRequirementsKHR *req =
                                       (VkMemoryDedicatedRequirementsKHR *) ext;
-                       req->requiresDedicatedAllocation = false;
+                       req->requiresDedicatedAllocation = buffer->shareable;
                        req->prefersDedicatedAllocation = req->requiresDedicatedAllocation;
                        break;
                }
@@ -2775,6 +2775,9 @@ VkResult radv_CreateBuffer(
        buffer->offset = 0;
        buffer->flags = pCreateInfo->flags;
 
+       buffer->shareable = vk_find_struct_const(pCreateInfo->pNext,
+                                                EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR) != NULL;
+
        if (pCreateInfo->flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) {
                buffer->bo = device->ws->buffer_create(device->ws,
                                                       align64(buffer->size, 4096),
index 1b1fa93ee3c8c02eedec61fd4a25400edfe79972..8d96bb43236d969e4e8b7a7beb07bd40b199b9cd 100644 (file)
@@ -673,6 +673,8 @@ struct radv_buffer {
        /* Set when bound */
        struct radeon_winsys_bo *                      bo;
        VkDeviceSize                                 offset;
+
+       bool shareable;
 };