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

Commit 6ebc46a7 authored by Craig Donner's avatar Craig Donner
Browse files

Add layered buffer support to libui and libgui.

Bug: 31686534
Test: manual
Change-Id: Ia40270701467f4b785660324cad883e7da08989a
parent cd7dedbe
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -34,8 +34,9 @@ public:
    GraphicBufferAlloc();
    GraphicBufferAlloc();
    virtual ~GraphicBufferAlloc();
    virtual ~GraphicBufferAlloc();
    virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t width,
    virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t width,
            uint32_t height, PixelFormat format, uint32_t usage,
            uint32_t height, PixelFormat format, uint32_t layerCount,
            std::string requestorName, status_t* error) override;
            uint32_t usage, std::string requestorName,
            status_t* error) override;
};
};




+6 −4
Original line number Original line Diff line number Diff line
@@ -38,12 +38,14 @@ public:
    /* Create a new GraphicBuffer for the client to use.
    /* Create a new GraphicBuffer for the client to use.
     */
     */
    virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
    virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
            PixelFormat format, uint32_t usage, std::string requestorName,
            PixelFormat format, uint32_t layerCount, uint32_t usage,
            status_t* error) = 0;
            std::string requestorName, status_t* error) = 0;


    sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
    sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
            PixelFormat format, uint32_t usage, status_t* error) {
            PixelFormat format, uint32_t layerCount, uint32_t usage,
        return createGraphicBuffer(w, h, format, usage, "<Unknown>", error);
            status_t* error) {
        return createGraphicBuffer(w, h, format, layerCount, usage, "<Unknown>",
                error);
    }
    }
};
};


+7 −0
Original line number Original line Diff line number Diff line
@@ -49,6 +49,7 @@ public:
        mWidth(0),
        mWidth(0),
        mHeight(0),
        mHeight(0),
        mFormat(static_cast<android_pixel_format_t>(0)),
        mFormat(static_cast<android_pixel_format_t>(0)),
        mLayerCount(0),
        mProducerUsage(GRALLOC1_PRODUCER_USAGE_NONE),
        mProducerUsage(GRALLOC1_PRODUCER_USAGE_NONE),
        mConsumerUsage(GRALLOC1_CONSUMER_USAGE_NONE) {}
        mConsumerUsage(GRALLOC1_CONSUMER_USAGE_NONE) {}


@@ -58,6 +59,7 @@ public:


    gralloc1_error_t setDimensions(uint32_t width, uint32_t height);
    gralloc1_error_t setDimensions(uint32_t width, uint32_t height);
    gralloc1_error_t setFormat(android_pixel_format_t format);
    gralloc1_error_t setFormat(android_pixel_format_t format);
    gralloc1_error_t setLayerCount(uint32_t layerCount);
    gralloc1_error_t setProducerUsage(gralloc1_producer_usage_t usage);
    gralloc1_error_t setProducerUsage(gralloc1_producer_usage_t usage);
    gralloc1_error_t setConsumerUsage(gralloc1_consumer_usage_t usage);
    gralloc1_error_t setConsumerUsage(gralloc1_consumer_usage_t usage);


@@ -68,6 +70,7 @@ private:
    uint32_t mWidth;
    uint32_t mWidth;
    uint32_t mHeight;
    uint32_t mHeight;
    android_pixel_format_t mFormat;
    android_pixel_format_t mFormat;
    uint32_t mLayerCount;
    gralloc1_producer_usage_t mProducerUsage;
    gralloc1_producer_usage_t mProducerUsage;
    gralloc1_consumer_usage_t mConsumerUsage;
    gralloc1_consumer_usage_t mConsumerUsage;


@@ -178,6 +181,8 @@ private:
                GRALLOC1_FUNCTION_SET_DIMENSIONS> setDimensions;
                GRALLOC1_FUNCTION_SET_DIMENSIONS> setDimensions;
        FunctionLoader<GRALLOC1_PFN_SET_FORMAT,
        FunctionLoader<GRALLOC1_PFN_SET_FORMAT,
                GRALLOC1_FUNCTION_SET_FORMAT> setFormat;
                GRALLOC1_FUNCTION_SET_FORMAT> setFormat;
        FunctionLoader<GRALLOC1_PFN_SET_LAYER_COUNT,
                GRALLOC1_FUNCTION_SET_LAYER_COUNT> setLayerCount;
        FunctionLoader<GRALLOC1_PFN_SET_PRODUCER_USAGE,
        FunctionLoader<GRALLOC1_PFN_SET_PRODUCER_USAGE,
                GRALLOC1_FUNCTION_SET_PRODUCER_USAGE> setProducerUsage;
                GRALLOC1_FUNCTION_SET_PRODUCER_USAGE> setProducerUsage;
        FunctionLoader<GRALLOC1_PFN_GET_BACKING_STORE,
        FunctionLoader<GRALLOC1_PFN_GET_BACKING_STORE,
@@ -188,6 +193,8 @@ private:
                GRALLOC1_FUNCTION_GET_DIMENSIONS> getDimensions;
                GRALLOC1_FUNCTION_GET_DIMENSIONS> getDimensions;
        FunctionLoader<GRALLOC1_PFN_GET_FORMAT,
        FunctionLoader<GRALLOC1_PFN_GET_FORMAT,
                GRALLOC1_FUNCTION_GET_FORMAT> getFormat;
                GRALLOC1_FUNCTION_GET_FORMAT> getFormat;
        FunctionLoader<GRALLOC1_PFN_GET_LAYER_COUNT,
                GRALLOC1_FUNCTION_GET_LAYER_COUNT> getLayerCount;
        FunctionLoader<GRALLOC1_PFN_GET_PRODUCER_USAGE,
        FunctionLoader<GRALLOC1_PFN_GET_PRODUCER_USAGE,
                GRALLOC1_FUNCTION_GET_PRODUCER_USAGE> getProducerUsage;
                GRALLOC1_FUNCTION_GET_PRODUCER_USAGE> getProducerUsage;
        FunctionLoader<GRALLOC1_PFN_GET_STRIDE,
        FunctionLoader<GRALLOC1_PFN_GET_STRIDE,
+18 −0
Original line number Original line Diff line number Diff line
@@ -131,6 +131,7 @@ private:
            width(0),
            width(0),
            height(0),
            height(0),
            format(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED),
            format(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED),
            layerCount(1),
            producerUsage(GRALLOC1_PRODUCER_USAGE_NONE),
            producerUsage(GRALLOC1_PRODUCER_USAGE_NONE),
            consumerUsage(GRALLOC1_CONSUMER_USAGE_NONE) {}
            consumerUsage(GRALLOC1_CONSUMER_USAGE_NONE) {}


@@ -145,6 +146,11 @@ private:
            return GRALLOC1_ERROR_NONE;
            return GRALLOC1_ERROR_NONE;
        }
        }


        gralloc1_error_t setLayerCount(uint32_t lc) {
            layerCount = lc;
            return GRALLOC1_ERROR_NONE;
        }

        gralloc1_error_t setProducerUsage(gralloc1_producer_usage_t usage) {
        gralloc1_error_t setProducerUsage(gralloc1_producer_usage_t usage) {
            producerUsage = usage;
            producerUsage = usage;
            return GRALLOC1_ERROR_NONE;
            return GRALLOC1_ERROR_NONE;
@@ -161,6 +167,7 @@ private:
        uint32_t width;
        uint32_t width;
        uint32_t height;
        uint32_t height;
        int32_t format;
        int32_t format;
        uint32_t layerCount;
        gralloc1_producer_usage_t producerUsage;
        gralloc1_producer_usage_t producerUsage;
        gralloc1_consumer_usage_t consumerUsage;
        gralloc1_consumer_usage_t consumerUsage;
    };
    };
@@ -197,6 +204,12 @@ private:
                &Descriptor::setFormat, format);
                &Descriptor::setFormat, format);
    }
    }


    static int32_t setLayerCountHook(gralloc1_device_t* device,
            gralloc1_buffer_descriptor_t descriptorId, uint32_t layerCount) {
        return callDescriptorFunction(device, descriptorId,
                &Descriptor::setLayerCount, layerCount);
    }

    static int32_t setProducerUsageHook(gralloc1_device_t* device,
    static int32_t setProducerUsageHook(gralloc1_device_t* device,
            gralloc1_buffer_descriptor_t descriptorId, uint64_t intUsage) {
            gralloc1_buffer_descriptor_t descriptorId, uint64_t intUsage) {
        auto usage = static_cast<gralloc1_producer_usage_t>(intUsage);
        auto usage = static_cast<gralloc1_producer_usage_t>(intUsage);
@@ -246,6 +259,11 @@ private:
            return GRALLOC1_ERROR_NONE;
            return GRALLOC1_ERROR_NONE;
        }
        }


        gralloc1_error_t getLayerCount(uint32_t* outLayerCount) const {
            *outLayerCount = mDescriptor.layerCount;
            return GRALLOC1_ERROR_NONE;
        }

        gralloc1_error_t getNumFlexPlanes(uint32_t* outNumPlanes) const {
        gralloc1_error_t getNumFlexPlanes(uint32_t* outNumPlanes) const {
            // TODO: This is conservative, and we could do better by examining
            // TODO: This is conservative, and we could do better by examining
            // the format, but it won't hurt anything for now
            // the format, but it won't hurt anything for now
+5 −0
Original line number Original line Diff line number Diff line
@@ -63,6 +63,11 @@ public:
        return mMapper->getFormat(mDevice, handle, &format);
        return mMapper->getFormat(mDevice, handle, &format);
    }
    }


    Error getLayerCount(buffer_handle_t handle, uint32_t& layerCount) const
    {
        return mMapper->getLayerCount(mDevice, handle, &layerCount);
    }

    Error getProducerUsageMask(buffer_handle_t handle,
    Error getProducerUsageMask(buffer_handle_t handle,
            uint64_t& usageMask) const
            uint64_t& usageMask) const
    {
    {
Loading