OSDN Git Service

radv: Don't segfault when exporting an image which hasn't been bound yet.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sun, 23 Jul 2017 22:39:51 +0000 (00:39 +0200)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sun, 23 Jul 2017 23:50:52 +0000 (01:50 +0200)
The image is set on Memory allocation already, but the image doesn't
have to have the BindImageMemory called yet. Luckily, we know offset
within a BO has to be 0 for dedicated allocations, so we can just
use the dummy 0 in the address calaculations.

Fixes CTS test dEQP-VK.api.external.memory.opaque_fd.dedicated.image.export_bind_import_bind

Signed-off-by: Bas Nieuwenhuizen <basni@google.com>
Fixes: b70829708ac "radv: Implement VK_KHR_external_memory"
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_image.c

index d8b7e8f..66cff52 100644 (file)
@@ -198,7 +198,7 @@ si_set_mutable_tex_desc_fields(struct radv_device *device,
                               unsigned block_width, bool is_stencil,
                               uint32_t *state)
 {
-       uint64_t gpu_address = device->ws->buffer_get_va(image->bo) + image->offset;
+       uint64_t gpu_address = image->bo ? device->ws->buffer_get_va(image->bo) + image->offset : 0;
        uint64_t va = gpu_address;
        unsigned pitch = base_level_info->nblk_x * block_width;
        enum chip_class chip_class = device->physical_device->rad_info.chip_class;