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

Commit 0e555aeb authored by Craig Donner's avatar Craig Donner Committed by Android (Google) Code Review
Browse files

Merge "Adds support for more gralloc1 functions to GrallocMapper."

parents 224fa294 58a1ef23
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -88,8 +88,6 @@ public:

    std::shared_ptr<Descriptor> createDescriptor();

    gralloc1_error_t getStride(buffer_handle_t buffer, uint32_t* outStride);

    gralloc1_error_t allocate(
            const std::vector<std::shared_ptr<const Descriptor>>& descriptors,
            std::vector<buffer_handle_t>* outBuffers);
@@ -102,6 +100,19 @@ public:

    gralloc1_error_t release(buffer_handle_t buffer);

    gralloc1_error_t getDimensions(buffer_handle_t buffer,
            uint32_t* outWidth, uint32_t* outHeight);
    gralloc1_error_t getFormat(buffer_handle_t buffer,
            int32_t* outFormat);
    gralloc1_error_t getLayerCount(buffer_handle_t buffer,
            uint32_t* outLayerCount);
    gralloc1_error_t getProducerUsage(buffer_handle_t buffer,
            uint64_t* outProducerUsage);
    gralloc1_error_t getConsumerUsage(buffer_handle_t buffer,
            uint64_t* outConsumerUsage);
    gralloc1_error_t getBackingStore(buffer_handle_t buffer,
            uint64_t* outBackingStore);
    gralloc1_error_t getStride(buffer_handle_t buffer, uint32_t* outStride);
    gralloc1_error_t getNumFlexPlanes(buffer_handle_t buffer,
            uint32_t* outNumPlanes);

+2 −2
Original line number Diff line number Diff line
@@ -325,7 +325,7 @@ private:
        auto usage = GRALLOC1_CONSUMER_USAGE_NONE;
        auto error = callBufferFunction(device, bufferHandle,
                &Buffer::getConsumerUsage, &usage);
        if (error != GRALLOC1_ERROR_NONE) {
        if (error == GRALLOC1_ERROR_NONE) {
            *outUsage = static_cast<uint64_t>(usage);
        }
        return error;
@@ -336,7 +336,7 @@ private:
        auto usage = GRALLOC1_PRODUCER_USAGE_NONE;
        auto error = callBufferFunction(device, bufferHandle,
                &Buffer::getProducerUsage, &usage);
        if (error != GRALLOC1_ERROR_NONE) {
        if (error == GRALLOC1_ERROR_NONE) {
            *outUsage = static_cast<uint64_t>(usage);
        }
        return error;
+14 −8
Original line number Diff line number Diff line
@@ -45,17 +45,23 @@ public:
    Error retain(buffer_handle_t handle) const;
    void release(buffer_handle_t handle) const;

    Error getDimensions(buffer_handle_t handle,
            uint32_t* outWidth, uint32_t* outHeight) const;
    Error getFormat(buffer_handle_t handle, int32_t* outFormat) const;
    Error getLayerCount(buffer_handle_t handle, uint32_t* outLayerCount) const;
    Error getProducerUsage(buffer_handle_t handle,
            uint64_t* outProducerUsage) const;
    Error getConsumerUsage(buffer_handle_t handle,
            uint64_t* outConsumerUsage) const;
    Error getBackingStore(buffer_handle_t handle,
            uint64_t* outBackingStore) const;
    Error getStride(buffer_handle_t handle, uint32_t* outStride) const;

    Error lock(buffer_handle_t handle,
            uint64_t producerUsageMask,
            uint64_t consumerUsageMask,
            const IMapper::Rect& accessRegion,
    Error lock(buffer_handle_t handle, uint64_t producerUsage,
            uint64_t consumerUsage, const IMapper::Rect& accessRegion,
            int acquireFence, void** outData) const;
    Error lock(buffer_handle_t handle,
            uint64_t producerUsageMask,
            uint64_t consumerUsageMask,
            const IMapper::Rect& accessRegion,
    Error lock(buffer_handle_t handle, uint64_t producerUsage,
            uint64_t consumerUsage, const IMapper::Rect& accessRegion,
            int acquireFence, FlexLayout* outLayout) const;
    int unlock(buffer_handle_t handle) const;

+19 −0
Original line number Diff line number Diff line
@@ -44,6 +44,25 @@ public:

    status_t unregisterBuffer(buffer_handle_t handle);

    status_t getDimensions(buffer_handle_t handle,
            uint32_t* outWidth, uint32_t* outHeight) const;

    status_t getFormat(buffer_handle_t handle, int32_t* outFormat) const;

    status_t getLayerCount(buffer_handle_t handle,
            uint32_t* outLayerCount) const;

    status_t getProducerUsage(buffer_handle_t handle,
            uint64_t* outProducerUsage) const;

    status_t getConsumerUsage(buffer_handle_t handle,
            uint64_t* outConsumerUsage) const;

    status_t getBackingStore(buffer_handle_t handle,
            uint64_t* outBackingStore) const;

    status_t getStride(buffer_handle_t handle, uint32_t* outStride) const;

    status_t lock(buffer_handle_t handle,
            uint32_t usage, const Rect& bounds, void** vaddr);

+96 −9
Original line number Diff line number Diff line
@@ -140,12 +140,6 @@ std::shared_ptr<Descriptor> Device::createDescriptor()
    return descriptor;
}

gralloc1_error_t Device::getStride(buffer_handle_t buffer, uint32_t* outStride)
{
    int32_t intError = mFunctions.getStride(mDevice, buffer, outStride);
    return static_cast<gralloc1_error_t>(intError);
}

static inline bool allocationSucceded(gralloc1_error_t error)
{
    return error == GRALLOC1_ERROR_NONE || error == GRALLOC1_ERROR_NOT_SHARED;
@@ -225,6 +219,99 @@ gralloc1_error_t Device::release(buffer_handle_t buffer)
    return static_cast<gralloc1_error_t>(intError);
}

gralloc1_error_t Device::getDimensions(buffer_handle_t buffer,
        uint32_t* outWidth, uint32_t* outHeight)
{
    uint32_t width = 0;
    uint32_t height = 0;
    int32_t intError = mFunctions.getDimensions(mDevice, buffer, &width,
            &height);
    auto error = static_cast<gralloc1_error_t>(intError);
    if (error == GRALLOC1_ERROR_NONE) {
        *outWidth = width;
        *outHeight = height;
    }
    return error;
}

gralloc1_error_t Device::getFormat(buffer_handle_t buffer,
        int32_t* outFormat)
{
    int32_t format = 0;
    int32_t intError = mFunctions.getFormat(mDevice, buffer, &format);
    auto error = static_cast<gralloc1_error_t>(intError);
    if (error == GRALLOC1_ERROR_NONE) {
        *outFormat = format;
    }
    return error;
}

gralloc1_error_t Device::getLayerCount(buffer_handle_t buffer,
        uint32_t* outLayerCount)
{
    if (hasCapability(GRALLOC1_CAPABILITY_LAYERED_BUFFERS)) {
        uint32_t layerCount = 0;
        int32_t intError = mFunctions.getLayerCount(mDevice, buffer,
                &layerCount);
        auto error = static_cast<gralloc1_error_t>(intError);
        if (error == GRALLOC1_ERROR_NONE) {
            *outLayerCount = layerCount;
        }
        return error;
    } else {
        // Layered buffers are not supported on this device.
        return GRALLOC1_ERROR_UNSUPPORTED;
    }
}

gralloc1_error_t Device::getProducerUsage(buffer_handle_t buffer,
        uint64_t* outProducerUsage)
{
    uint64_t usage = 0;
    int32_t intError = mFunctions.getProducerUsage(mDevice, buffer, &usage);
    auto error = static_cast<gralloc1_error_t>(intError);
    if (error == GRALLOC1_ERROR_NONE) {
        *outProducerUsage = usage;
    }
    return error;
}

gralloc1_error_t Device::getConsumerUsage(buffer_handle_t buffer,
        uint64_t* outConsumerUsage)
{
    uint64_t usage = 0;
    int32_t intError = mFunctions.getConsumerUsage(mDevice, buffer, &usage);
    auto error = static_cast<gralloc1_error_t>(intError);
    if (error == GRALLOC1_ERROR_NONE) {
        *outConsumerUsage = usage;
    }
    return error;
}

gralloc1_error_t Device::getBackingStore(buffer_handle_t buffer,
        uint64_t* outBackingStore)
{
    uint64_t store = 0;
    int32_t intError = mFunctions.getBackingStore(mDevice, buffer, &store);
    auto error = static_cast<gralloc1_error_t>(intError);
    if (error == GRALLOC1_ERROR_NONE) {
        *outBackingStore = store;
    }
    return error;
}

gralloc1_error_t Device::getStride(buffer_handle_t buffer,
        uint32_t* outStride)
{
    uint32_t stride = 0;
    int32_t intError = mFunctions.getStride(mDevice, buffer, &stride);
    auto error = static_cast<gralloc1_error_t>(intError);
    if (error == GRALLOC1_ERROR_NONE) {
        *outStride = stride;
    }
    return error;
}

gralloc1_error_t Device::getNumFlexPlanes(buffer_handle_t buffer,
        uint32_t* outNumPlanes)
{
@@ -244,7 +331,7 @@ gralloc1_error_t Device::lock(buffer_handle_t buffer,
        const sp<Fence>& acquireFence)
{
    ALOGV("Calling lock(%p)", buffer);
    return lockHelper(mFunctions.lock.pfn, buffer, producerUsage,
    return lockHelper(mFunctions.lock, buffer, producerUsage,
            consumerUsage, accessRegion, outData, acquireFence);
}

@@ -256,7 +343,7 @@ gralloc1_error_t Device::lockFlex(buffer_handle_t buffer,
        const sp<Fence>& acquireFence)
{
    ALOGV("Calling lockFlex(%p)", buffer);
    return lockHelper(mFunctions.lockFlex.pfn, buffer, producerUsage,
    return lockHelper(mFunctions.lockFlex, buffer, producerUsage,
            consumerUsage, accessRegion, outData, acquireFence);
}

@@ -268,7 +355,7 @@ gralloc1_error_t Device::lockYCbCr(buffer_handle_t buffer,
        const sp<Fence>& acquireFence)
{
    ALOGV("Calling lockYCbCr(%p)", buffer);
    return lockHelper(mFunctions.lockYCbCr.pfn, buffer, producerUsage,
    return lockHelper(mFunctions.lockYCbCr, buffer, producerUsage,
            consumerUsage, accessRegion, outData, acquireFence);
}

Loading