From: Jesse Hall Date: Sat, 29 Aug 2015 16:06:12 +0000 (+0100) Subject: vknulldrv: implement VkBuffer objects X-Git-Tag: android-x86-7.1-r1~596^2~3 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=f6578743278da9b55d96a4984f4fcaa9d73eda8d;p=android-x86%2Fframeworks-native.git vknulldrv: implement VkBuffer objects Change-Id: Idda564392cf8daae6ea8c3a9809e6df990433a33 (cherry picked from commit aee62ea7ff379dde787344e1377b51fefb2385d6) --- diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp index 9a0f07afbc..ec9cae69e0 100644 --- a/vulkan/nulldrv/null_driver.cpp +++ b/vulkan/nulldrv/null_driver.cpp @@ -119,6 +119,21 @@ VkInstance_T* GetInstanceFromPhysicalDevice( namespace null_driver { +template +struct HandleTraits {}; + +template +typename HandleTraits::PointerType GetObjectFromHandle( + const HandleT& h) { + return reinterpret_cast::PointerType>( + uintptr_t(h.handle)); +} + +template +typename T::HandleType GetHandleToObject(const T* obj) { + return typename T::HandleType(reinterpret_cast(obj)); +} + // ----------------------------------------------------------------------------- // Global @@ -222,6 +237,49 @@ VkResult GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) { } // ----------------------------------------------------------------------------- +// Buffer + +struct Buffer { + typedef VkBuffer HandleType; + VkDeviceSize size; +}; +template <> +struct HandleTraits { + typedef Buffer* PointerType; +}; + +VkResult CreateBuffer(VkDevice device, + const VkBufferCreateInfo* create_info, + VkBuffer* buffer_handle) { + const VkAllocCallbacks* alloc = device->instance->alloc; + Buffer* buffer = static_cast( + alloc->pfnAlloc(alloc->pUserData, sizeof(Buffer), alignof(Buffer), + VK_SYSTEM_ALLOC_TYPE_API_OBJECT)); + if (!buffer) + return VK_ERROR_OUT_OF_HOST_MEMORY; + buffer->size = create_info->size; + *buffer_handle = GetHandleToObject(buffer); + return VK_SUCCESS; +} + +VkResult GetBufferMemoryRequirements(VkDevice, + VkBuffer buffer_handle, + VkMemoryRequirements* requirements) { + Buffer* buffer = GetObjectFromHandle(buffer_handle); + requirements->size = buffer->size; + requirements->alignment = 16; // allow fast Neon/SSE memcpy + requirements->memoryTypeBits = 0x1; + return VK_SUCCESS; +} + +VkResult DestroyBuffer(VkDevice device, VkBuffer buffer_handle) { + const VkAllocCallbacks* alloc = device->instance->alloc; + Buffer* buffer = GetObjectFromHandle(buffer_handle); + alloc->pfnFree(alloc->pUserData, buffer); + return VK_SUCCESS; +} + +// ----------------------------------------------------------------------------- // No-op entrypoints // clang-format off @@ -323,11 +381,6 @@ VkResult GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDev return VK_SUCCESS; } -VkResult GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) { - ALOGV("TODO: vk%s", __FUNCTION__); - return VK_SUCCESS; -} - VkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset) { ALOGV("TODO: vk%s", __FUNCTION__); return VK_SUCCESS; @@ -453,16 +506,6 @@ VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t st return VK_SUCCESS; } -VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer) { - ALOGV("TODO: vk%s", __FUNCTION__); - return VK_SUCCESS; -} - -VkResult DestroyBuffer(VkDevice device, VkBuffer buffer) { - ALOGV("TODO: vk%s", __FUNCTION__); - return VK_SUCCESS; -} - VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView) { ALOGV("TODO: vk%s", __FUNCTION__); return VK_SUCCESS;