Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85c05b60 authored by Jesse Hall's avatar Jesse Hall
Browse files

vknulldrv: Implement VkImage

Change-Id: Ief50f433fc9b1ad4f4b0ee28912993d59d9df411
(cherry picked from commit cd1a7c4312ac5828682e580fdbbad7b10dbf5a45)
parent bde8ee30
Loading
Loading
Loading
Loading
+60 −15
Original line number Original line Diff line number Diff line
@@ -420,6 +420,66 @@ VkResult DestroyBuffer(VkDevice device, VkBuffer buffer_handle) {
    return VK_SUCCESS;
    return VK_SUCCESS;
}
}


// -----------------------------------------------------------------------------
// Image

struct Image {
    typedef VkImage HandleType;
    VkDeviceSize size;
};
template <>
struct HandleTraits<VkImage> {
    typedef Image* PointerType;
};

VkResult CreateImage(VkDevice device,
                     const VkImageCreateInfo* create_info,
                     VkImage* image_handle) {
    if (create_info->imageType != VK_IMAGE_TYPE_2D ||
        create_info->format != VK_FORMAT_R8G8B8A8_UNORM ||
        create_info->mipLevels != 1) {
        ALOGE("CreateImage: not yet implemented: type=%d format=%d mips=%u",
              create_info->imageType, create_info->format,
              create_info->mipLevels);
        return VK_ERROR_UNAVAILABLE;
    }

    VkDeviceSize size =
        VkDeviceSize(create_info->extent.width * create_info->extent.height) *
        create_info->arraySize * create_info->samples * 4u;
    ALOGW_IF(size > kMaxDeviceMemory,
             "CreateImage: image size 0x%" PRIx64
             " exceeds max device memory size 0x%" PRIx64,
             size, kMaxDeviceMemory);

    const VkAllocCallbacks* alloc = device->instance->alloc;
    Image* image = static_cast<Image*>(
        alloc->pfnAlloc(alloc->pUserData, sizeof(Image), alignof(Image),
                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
    if (!image)
        return VK_ERROR_OUT_OF_HOST_MEMORY;
    image->size = size;
    *image_handle = GetHandleToObject(image);
    return VK_SUCCESS;
}

VkResult GetImageMemoryRequirements(VkDevice,
                                    VkImage image_handle,
                                    VkMemoryRequirements* requirements) {
    Image* image = GetObjectFromHandle(image_handle);
    requirements->size = image->size;
    requirements->alignment = 16;  // allow fast Neon/SSE memcpy
    requirements->memoryTypeBits = 0x1;
    return VK_SUCCESS;
}

VkResult DestroyImage(VkDevice device, VkImage image_handle) {
    const VkAllocCallbacks* alloc = device->instance->alloc;
    Image* image = GetObjectFromHandle(image_handle);
    alloc->pfnFree(alloc->pUserData, image);
    return VK_SUCCESS;
}

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// No-op types
// No-op types


@@ -695,11 +755,6 @@ VkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem,
    return VK_SUCCESS;
    return VK_SUCCESS;
}
}


VkResult GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) {
    ALOGV("TODO: vk%s", __FUNCTION__);
    return VK_SUCCESS;
}

VkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset) {
VkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset) {
    ALOGV("TODO: vk%s", __FUNCTION__);
    ALOGV("TODO: vk%s", __FUNCTION__);
    return VK_SUCCESS;
    return VK_SUCCESS;
@@ -793,16 +848,6 @@ VkResult DestroyBufferView(VkDevice device, VkBufferView bufferView) {
    return VK_SUCCESS;
    return VK_SUCCESS;
}
}


VkResult CreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage) {
    ALOGV("TODO: vk%s", __FUNCTION__);
    return VK_SUCCESS;
}

VkResult DestroyImage(VkDevice device, VkImage image) {
    ALOGV("TODO: vk%s", __FUNCTION__);
    return VK_SUCCESS;
}

VkResult GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
VkResult GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
    ALOGV("TODO: vk%s", __FUNCTION__);
    ALOGV("TODO: vk%s", __FUNCTION__);
    return VK_SUCCESS;
    return VK_SUCCESS;