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

Commit 58a1ef23 authored by Craig Donner's avatar Craig Donner
Browse files

Adds support for more gralloc1 functions to GrallocMapper.

Bug: 34939453
Test: added native CTS tests checked with
cts-tradefed run cts-dev -m CtsNativeHardwareTestCases
Change-Id: I2393f6ec6c7eff5d229a5aa61ff2a52a9366fd1e
parent e96a325a
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