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

Commit 28b58bfd authored by John Bates's avatar John Bates
Browse files

[vr] Add DVR API to get native handle for buffers

This is required to support GPU late latching features in
VRCore. This can be removed once vendors support using
AHardwareBuffer instead of int fd for shared memory
buffer objects.

Bug: b/37472908
Test: builds and runs
Change-Id: I2a957723c4025773181071491a45a53b83e5ba64
parent a2d92c56
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -53,14 +53,18 @@ DVR_EXPORT int dvrGetApi(void* api, size_t struct_size, int version) {
    dvr_api->write_buffer_post = dvrWriteBufferPost;
    dvr_api->write_buffer_gain = dvrWriteBufferGain;
    dvr_api->write_buffer_gain_async = dvrWriteBufferGainAsync;
    dvr_api->write_buffer_get_native_handle = dvrWriteBufferGetNativeHandle;

    dvr_api->read_buffer_destroy = dvrReadBufferDestroy;
    dvr_api->read_buffer_get_ahardwarebuffer = dvrReadBufferGetAHardwareBuffer;
    dvr_api->read_buffer_acquire = dvrReadBufferAcquire;
    dvr_api->read_buffer_release = dvrReadBufferRelease;
    dvr_api->read_buffer_release_async = dvrReadBufferReleaseAsync;
    dvr_api->read_buffer_get_native_handle = dvrReadBufferGetNativeHandle;

    dvr_api->buffer_destroy = dvrBufferDestroy;
    dvr_api->buffer_get_ahardwarebuffer = dvrBufferGetAHardwareBuffer;
    dvr_api->buffer_get_native_handle = dvrBufferGetNativeHandle;

    // dvr_buffer_queue.h
    dvr_api->write_buffer_queue_destroy = dvrWriteBufferQueueDestroy;
+14 −0
Original line number Diff line number Diff line
@@ -136,4 +136,18 @@ int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer,
  return 0;
}

const struct native_handle* dvrWriteBufferGetNativeHandle(
    DvrWriteBuffer* write_buffer) {
  return write_buffer->write_buffer->native_handle();
}

const struct native_handle* dvrReadBufferGetNativeHandle(
    DvrReadBuffer* read_buffer) {
  return read_buffer->read_buffer->native_handle();
}

const struct native_handle* dvrBufferGetNativeHandle(DvrBuffer* buffer) {
  return buffer->buffer->handle();
}

}  // extern "C"
+14 −0
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ typedef struct DvrReadBufferQueue DvrReadBufferQueue;

typedef struct DvrSurface DvrSurface;

struct native_handle;

// display_manager_client.h
typedef int (*DvrDisplayManagerClientGetSurfaceListPtr)(
    DvrDisplayManagerClient* client,
@@ -70,6 +72,8 @@ typedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* client, int ready_fence_fd,
typedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* client,
                                     int* release_fence_fd);
typedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* client);
typedef const struct native_handle* (*DvrWriteBufferGetNativeHandle)(
    DvrWriteBuffer* write_buffer);

typedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* client);
typedef int (*DvrReadBufferGetAHardwareBufferPtr)(
@@ -80,9 +84,14 @@ typedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* client,
typedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* client,
                                       int release_fence_fd);
typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* client);
typedef const struct native_handle* (*DvrReadBufferGetNativeHandle)(
    DvrReadBuffer* read_buffer);

typedef void (*DvrBufferDestroy)(DvrBuffer* buffer);
typedef int (*DvrBufferGetAHardwareBuffer)(DvrBuffer* buffer,
                                           AHardwareBuffer** hardware_buffer);
typedef const struct native_handle* (*DvrBufferGetNativeHandle)(
    DvrBuffer* buffer);

// dvr_buffer_queue.h
typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue);
@@ -238,6 +247,7 @@ struct DvrApi_v1 {
  DvrWriteBufferPostPtr write_buffer_post;
  DvrWriteBufferGainPtr write_buffer_gain;
  DvrWriteBufferGainAsyncPtr write_buffer_gain_async;
  DvrWriteBufferGetNativeHandle write_buffer_get_native_handle;

  // Read buffer
  DvrReadBufferDestroyPtr read_buffer_destroy;
@@ -245,8 +255,12 @@ struct DvrApi_v1 {
  DvrReadBufferAcquirePtr read_buffer_acquire;
  DvrReadBufferReleasePtr read_buffer_release;
  DvrReadBufferReleaseAsyncPtr read_buffer_release_async;
  DvrReadBufferGetNativeHandle read_buffer_get_native_handle;

  // Buffer
  DvrBufferDestroy buffer_destroy;
  DvrBufferGetAHardwareBuffer buffer_get_ahardwarebuffer;
  DvrBufferGetNativeHandle buffer_get_native_handle;

  // Write buffer queue
  DvrWriteBufferQueueDestroyPtr write_buffer_queue_destroy;
+6 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ typedef struct DvrWriteBuffer DvrWriteBuffer;
typedef struct DvrReadBuffer DvrReadBuffer;
typedef struct DvrBuffer DvrBuffer;
typedef struct AHardwareBuffer AHardwareBuffer;
struct native_handle;

// Write buffer
void dvrWriteBufferDestroy(DvrWriteBuffer* write_buffer);
@@ -23,6 +24,8 @@ int dvrWriteBufferPost(DvrWriteBuffer* write_buffer, int ready_fence_fd,
                       const void* meta, size_t meta_size_bytes);
int dvrWriteBufferGain(DvrWriteBuffer* write_buffer, int* release_fence_fd);
int dvrWriteBufferGainAsync(DvrWriteBuffer* write_buffer);
const struct native_handle* dvrWriteBufferGetNativeHandle(
    DvrWriteBuffer* write_buffer);

// Read buffer
void dvrReadBufferDestroy(DvrReadBuffer* read_buffer);
@@ -33,11 +36,14 @@ int dvrReadBufferAcquire(DvrReadBuffer* read_buffer, int* ready_fence_fd,
                         void* meta, size_t meta_size_bytes);
int dvrReadBufferRelease(DvrReadBuffer* read_buffer, int release_fence_fd);
int dvrReadBufferReleaseAsync(DvrReadBuffer* read_buffer);
const struct native_handle* dvrReadBufferGetNativeHandle(
    DvrReadBuffer* read_buffer);

// Buffer
void dvrBufferDestroy(DvrBuffer* buffer);
int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer,
                                AHardwareBuffer** hardware_buffer);
const struct native_handle* dvrBufferGetNativeHandle(DvrBuffer* buffer);

#ifdef __cplusplus
}  // extern "C"