summaryrefslogtreecommitdiff
path: root/platformdrmgeneric.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platformdrmgeneric.cpp')
-rw-r--r--platformdrmgeneric.cpp27
1 files changed, 7 insertions, 20 deletions
diff --git a/platformdrmgeneric.cpp b/platformdrmgeneric.cpp
index 2a6773c..7c4758d 100644
--- a/platformdrmgeneric.cpp
+++ b/platformdrmgeneric.cpp
@@ -24,10 +24,9 @@
#include <xf86drm.h>
#include <xf86drmMode.h>
-#include <cutils/log.h>
+#include <log/log.h>
#include <gralloc_handle.h>
#include <hardware/gralloc.h>
-#include <EGL/eglext.h>
namespace android {
@@ -84,22 +83,6 @@ uint32_t DrmGenericImporter::ConvertHalFormatToDrm(uint32_t hal_format) {
}
}
-EGLImageKHR DrmGenericImporter::ImportImage(EGLDisplay egl_display, buffer_handle_t handle) {
- gralloc_handle_t *gr_handle = gralloc_handle(handle);
- if (!gr_handle)
- return NULL;
- EGLint attr[] = {
- EGL_WIDTH, (EGLint)gr_handle->width,
- EGL_HEIGHT, (EGLint)gr_handle->height,
- EGL_LINUX_DRM_FOURCC_EXT, (EGLint)ConvertHalFormatToDrm(gr_handle->format),
- EGL_DMA_BUF_PLANE0_FD_EXT, gr_handle->prime_fd,
- EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0,
- EGL_DMA_BUF_PLANE0_PITCH_EXT, (EGLint)gr_handle->stride,
- EGL_NONE,
- };
- return eglCreateImageKHR(egl_display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, NULL, attr);
-}
-
int DrmGenericImporter::ImportBuffer(buffer_handle_t handle, hwc_drm_bo_t *bo) {
gralloc_handle_t *gr_handle = gralloc_handle(handle);
if (!gr_handle)
@@ -145,10 +128,14 @@ int DrmGenericImporter::ReleaseBuffer(hwc_drm_bo_t *bo) {
gem_close.handle = bo->gem_handles[i];
int ret = drmIoctl(drm_->fd(), DRM_IOCTL_GEM_CLOSE, &gem_close);
- if (ret)
+ if (ret) {
ALOGE("Failed to close gem handle %d %d", i, ret);
- else
+ } else {
+ for (int j = i + 1; j < num_gem_handles; j++)
+ if (bo->gem_handles[j] == bo->gem_handles[i])
+ bo->gem_handles[j] = 0;
bo->gem_handles[i] = 0;
+ }
}
return 0;
}