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

Commit 532e529e authored by Jiwen 'Steve' Cai's avatar Jiwen 'Steve' Cai
Browse files

Setting queue metadata size via dvrSurface API

This allows VRCore to use metadata feature on each individual DvrBufferQueue.

Bug: 62301995
Test: build, dvr_api-test
Change-Id: I8e0eb8ca1a2c197426c4853cae99a4ed63caeffe
parent cb496acb
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -106,13 +106,15 @@ Status<void> Surface::SetAttributes(const SurfaceAttributes& attributes) {

Status<std::unique_ptr<ProducerQueue>> Surface::CreateQueue(uint32_t width,
                                                            uint32_t height,
                                                            uint32_t format) {
                                                            uint32_t format,
                                                            size_t metadata_size) {
  ALOGD_IF(TRACE, "Surface::CreateQueue: Creating empty queue.");
  auto status = InvokeRemoteMethod<DisplayProtocol::CreateQueue>(
      ProducerQueueConfigBuilder()
          .SetDefaultWidth(width)
          .SetDefaultHeight(height)
          .SetDefaultFormat(format)
          .SetMetadataSize(metadata_size)
          .Build());
  if (!status) {
    ALOGE("Surface::CreateQueue: Failed to create queue: %s",
@@ -131,12 +133,12 @@ Status<std::unique_ptr<ProducerQueue>> Surface::CreateQueue(uint32_t width,

Status<std::unique_ptr<ProducerQueue>> Surface::CreateQueue(
    uint32_t width, uint32_t height, uint32_t layer_count, uint32_t format,
    uint64_t usage, size_t capacity) {
    uint64_t usage, size_t capacity, size_t metadata_size) {
  ALOGD_IF(TRACE,
           "Surface::CreateQueue: width=%u height=%u layer_count=%u format=%u "
           "usage=%" PRIx64 " capacity=%zu",
           width, height, layer_count, format, usage, capacity);
  auto status = CreateQueue(width, height, format);
  auto status = CreateQueue(width, height, format, metadata_size);
  if (!status)
    return status.error_status();

+4 −2
Original line number Diff line number Diff line
@@ -39,7 +39,8 @@ class Surface : public pdx::ClientBase<Surface> {
  // Creates an empty queue.
  pdx::Status<std::unique_ptr<ProducerQueue>> CreateQueue(uint32_t width,
                                                          uint32_t height,
                                                          uint32_t format);
                                                          uint32_t format,
                                                          size_t metadata_size);

  // Creates a queue and populates it with |capacity| buffers of the specified
  // parameters.
@@ -48,7 +49,8 @@ class Surface : public pdx::ClientBase<Surface> {
                                                          uint32_t layer_count,
                                                          uint32_t format,
                                                          uint64_t usage,
                                                          size_t capacity);
                                                          size_t capacity,
                                                          size_t metadata_size);

 private:
  friend BASE;
+2 −2
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ int dvrSurfaceSetAttributes(DvrSurface* surface,
int dvrSurfaceCreateWriteBufferQueue(DvrSurface* surface, uint32_t width,
                                     uint32_t height, uint32_t format,
                                     uint32_t layer_count, uint64_t usage,
                                     size_t capacity,
                                     size_t capacity, size_t metadata_size,
                                     DvrWriteBufferQueue** out_writer) {
  if (surface == nullptr || out_writer == nullptr) {
    ALOGE(
@@ -145,7 +145,7 @@ int dvrSurfaceCreateWriteBufferQueue(DvrSurface* surface, uint32_t width,
  }

  auto status = surface->surface->CreateQueue(width, height, layer_count,
                                              format, usage, capacity);
                                              format, usage, capacity, metadata_size);
  if (!status) {
    ALOGE("dvrSurfaceCreateWriteBufferQueue: Failed to create queue: %s",
          status.GetErrorMessage().c_str());
+1 −1
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ typedef int (*DvrSurfaceSetAttributesPtr)(DvrSurface* surface,
                                          size_t attribute_count);
typedef int (*DvrSurfaceCreateWriteBufferQueuePtr)(
    DvrSurface* surface, uint32_t width, uint32_t height, uint32_t format,
    uint32_t layer_count, uint64_t usage, size_t capacity,
    uint32_t layer_count, uint64_t usage, size_t capacity, size_t metadata_size,
    DvrWriteBufferQueue** queue_out);

// dvr_vsync.h
+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ int dvrSurfaceSetAttributes(DvrSurface* surface,
int dvrSurfaceCreateWriteBufferQueue(DvrSurface* surface, uint32_t width,
                                     uint32_t height, uint32_t format,
                                     uint32_t layer_count, uint64_t usage,
                                     size_t capacity,
                                     size_t capacity, size_t metadata_size,
                                     DvrWriteBufferQueue** queue_out);

// Get a global buffer from the display service.
Loading