diff options
author | Jason Macnak <natsu@google.com> | 2020-06-01 17:34:47 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-06-01 17:34:47 +0000 |
commit | f5c5d50a2e69e7c66715eff7c53c6abb07acc827 (patch) | |
tree | a00c94cd5e7378ab4a6c72aeebe070d3b3d3d735 | |
parent | 31c0fadbc7b49262f0047d1f7b2a109aaae6dbdf (diff) | |
parent | 56412c960f4838173c8a1b0c92b1307ffe6c0efd (diff) | |
download | swiftshader-android11-qpr1-s2-release.tar.gz |
Import gralloc buffers in prepareForExternalUseANDROID am: 7288081543 am: 56412c960fandroid-11.0.0_r48android-11.0.0_r47android-11.0.0_r46android-11.0.0_r45android-11.0.0_r44android-11.0.0_r43android-11.0.0_r42android-11.0.0_r41android-11.0.0_r40android-11.0.0_r39android-11.0.0_r38android-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android-11.0.0_r31android-11.0.0_r30android-11.0.0_r29android-11.0.0_r28android-11.0.0_r27android-11.0.0_r26android-11.0.0_r24android-11.0.0_r23android-11.0.0_r22android-11.0.0_r21android-11.0.0_r20android-11.0.0_r19android-11.0.0_r18android11-qpr3-s1-releaseandroid11-qpr3-releaseandroid11-qpr2-releaseandroid11-qpr1-s2-releaseandroid11-qpr1-s1-releaseandroid11-qpr1-releaseandroid11-qpr1-d-s1-releaseandroid11-qpr1-d-releaseandroid11-qpr1-c-releaseandroid11-d2-release
Change-Id: I6f38e506e607436248b1e132ddf8dae2573c1356
-rw-r--r-- | src/Common/GrallocAndroid.cpp | 2 | ||||
-rw-r--r-- | src/System/GrallocAndroid.cpp | 2 | ||||
-rw-r--r-- | src/Vulkan/VkImage.cpp | 19 |
3 files changed, 19 insertions, 4 deletions
diff --git a/src/Common/GrallocAndroid.cpp b/src/Common/GrallocAndroid.cpp index 08c2ece2e..963085c59 100644 --- a/src/Common/GrallocAndroid.cpp +++ b/src/Common/GrallocAndroid.cpp @@ -90,7 +90,7 @@ int GrallocModule::release(buffer_handle_t handle) if (m_gralloc4_mapper != nullptr) { native_handle_t* native_handle = const_cast<native_handle_t*>(handle); - return m_gralloc4_mapper->freeBuffer(native_handle).isOk(); + return m_gralloc4_mapper->freeBuffer(native_handle).isOk() ? 0 : 1; } #endif diff --git a/src/System/GrallocAndroid.cpp b/src/System/GrallocAndroid.cpp index 08c2ece2e..963085c59 100644 --- a/src/System/GrallocAndroid.cpp +++ b/src/System/GrallocAndroid.cpp @@ -90,7 +90,7 @@ int GrallocModule::release(buffer_handle_t handle) if (m_gralloc4_mapper != nullptr) { native_handle_t* native_handle = const_cast<native_handle_t*>(handle); - return m_gralloc4_mapper->freeBuffer(native_handle).isOk(); + return m_gralloc4_mapper->freeBuffer(native_handle).isOk() ? 0 : 1; } #endif diff --git a/src/Vulkan/VkImage.cpp b/src/Vulkan/VkImage.cpp index 7c2872a63..1b287b6a5 100644 --- a/src/Vulkan/VkImage.cpp +++ b/src/Vulkan/VkImage.cpp @@ -190,7 +190,17 @@ VkResult Image::prepareForExternalUseANDROID() const void *nativeBuffer = nullptr; VkExtent3D extent = getMipLevelExtent(VK_IMAGE_ASPECT_COLOR_BIT, 0); - if(GrallocModule::getInstance()->lock(backingMemory.nativeHandle, GRALLOC_USAGE_SW_WRITE_OFTEN, 0, 0, extent.width, extent.height, &nativeBuffer) != 0) + buffer_handle_t importedBufferHandle = nullptr; + if(GrallocModule::getInstance()->import(backingMemory.nativeHandle, &importedBufferHandle) != 0) + { + return VK_ERROR_OUT_OF_DATE_KHR; + } + if(!importedBufferHandle) + { + return VK_ERROR_OUT_OF_DATE_KHR; + } + + if(GrallocModule::getInstance()->lock(importedBufferHandle, GRALLOC_USAGE_SW_WRITE_OFTEN, 0, 0, extent.width, extent.height, &nativeBuffer) != 0) { return VK_ERROR_OUT_OF_DATE_KHR; } @@ -211,7 +221,12 @@ VkResult Image::prepareForExternalUseANDROID() const memcpy(dstBuffer + (i * bufferRowBytes), srcBuffer + (i * imageRowBytes), imageRowBytes); } - if(GrallocModule::getInstance()->unlock(backingMemory.nativeHandle) != 0) + if(GrallocModule::getInstance()->unlock(importedBufferHandle) != 0) + { + return VK_ERROR_OUT_OF_DATE_KHR; + } + + if (GrallocModule::getInstance()->release(importedBufferHandle) != 0) { return VK_ERROR_OUT_OF_DATE_KHR; } |