rsovAllocation.h revision f15ce3de10aa8edf30d9c2dca60237a3d24eddcc
175f0d3110b04346b901771f96ce15cdbe907278fYang Ni/*
275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Copyright (C) 2016 The Android Open Source Project
375f0d3110b04346b901771f96ce15cdbe907278fYang Ni *
475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Licensed under the Apache License, Version 2.0 (the "License");
575f0d3110b04346b901771f96ce15cdbe907278fYang Ni * you may not use this file except in compliance with the License.
675f0d3110b04346b901771f96ce15cdbe907278fYang Ni * You may obtain a copy of the License at
775f0d3110b04346b901771f96ce15cdbe907278fYang Ni *
875f0d3110b04346b901771f96ce15cdbe907278fYang Ni *      http://www.apache.org/licenses/LICENSE-2.0
975f0d3110b04346b901771f96ce15cdbe907278fYang Ni *
1075f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Unless required by applicable law or agreed to in writing, software
1175f0d3110b04346b901771f96ce15cdbe907278fYang Ni * distributed under the License is distributed on an "AS IS" BASIS,
1275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1375f0d3110b04346b901771f96ce15cdbe907278fYang Ni * See the License for the specific language governing permissions and
1475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * limitations under the License.
1575f0d3110b04346b901771f96ce15cdbe907278fYang Ni */
1675f0d3110b04346b901771f96ce15cdbe907278fYang Ni
1775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef RSOV_ALLOCATION_H
1875f0d3110b04346b901771f96ce15cdbe907278fYang Ni#define RSOV_ALLOCATION_H
1975f0d3110b04346b901771f96ce15cdbe907278fYang Ni
2075f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include <vulkan/vulkan.h>
2175f0d3110b04346b901771f96ce15cdbe907278fYang Ni
2275f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsDefines.h"
2375f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rs_hal.h"
2475f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "system/window.h"
2575f0d3110b04346b901771f96ce15cdbe907278fYang Ni
2675f0d3110b04346b901771f96ce15cdbe907278fYang Ninamespace android {
2775f0d3110b04346b901771f96ce15cdbe907278fYang Ninamespace renderscript {
2875f0d3110b04346b901771f96ce15cdbe907278fYang Ni
2975f0d3110b04346b901771f96ce15cdbe907278fYang Niclass Allocation;
3075f0d3110b04346b901771f96ce15cdbe907278fYang Niclass Context;
3175f0d3110b04346b901771f96ce15cdbe907278fYang Niclass Type;
3275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
3375f0d3110b04346b901771f96ce15cdbe907278fYang Ninamespace rsov {
3475f0d3110b04346b901771f96ce15cdbe907278fYang Ni
3575f0d3110b04346b901771f96ce15cdbe907278fYang Niclass RSoVContext;
3675f0d3110b04346b901771f96ce15cdbe907278fYang Ni
3775f0d3110b04346b901771f96ce15cdbe907278fYang Niclass RSoVAllocation {
3875f0d3110b04346b901771f96ce15cdbe907278fYang Ni public:
3975f0d3110b04346b901771f96ce15cdbe907278fYang Ni  RSoVAllocation(RSoVContext *context, const Type *type);
4075f0d3110b04346b901771f96ce15cdbe907278fYang Ni  ~RSoVAllocation();
4175f0d3110b04346b901771f96ce15cdbe907278fYang Ni
4275f0d3110b04346b901771f96ce15cdbe907278fYang Ni  uint32_t getWidth() const { return mWidth; }
4375f0d3110b04346b901771f96ce15cdbe907278fYang Ni  uint32_t getHeight() const { return mHeight; }
4475f0d3110b04346b901771f96ce15cdbe907278fYang Ni  uint32_t getDepth() const { return mDepth; }
45f15ce3de10aa8edf30d9c2dca60237a3d24eddccYang Ni  const VkDescriptorBufferInfo *getBufferInfo() const { return &mBufferInfo; }
4675f0d3110b04346b901771f96ce15cdbe907278fYang Ni  const VkDescriptorImageInfo *getImageInfo() const { return &mImageInfo; }
4775f0d3110b04346b901771f96ce15cdbe907278fYang Ni  char *getHostPtr() const { return mPtr; }
4875f0d3110b04346b901771f96ce15cdbe907278fYang Ni
4975f0d3110b04346b901771f96ce15cdbe907278fYang Ni private:
50f15ce3de10aa8edf30d9c2dca60237a3d24eddccYang Ni  void InitBuffer();
5175f0d3110b04346b901771f96ce15cdbe907278fYang Ni  void InitImage();
5275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
5375f0d3110b04346b901771f96ce15cdbe907278fYang Ni  char *mPtr;  // Host pointer to mmapped device memory for the Allocation
5475f0d3110b04346b901771f96ce15cdbe907278fYang Ni  RSoVContext *mRSoV;
5575f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkDevice mDevice;
5675f0d3110b04346b901771f96ce15cdbe907278fYang Ni  const Type *mType;
5775f0d3110b04346b901771f96ce15cdbe907278fYang Ni  const uint32_t mWidth;
5875f0d3110b04346b901771f96ce15cdbe907278fYang Ni  const uint32_t mHeight;
5975f0d3110b04346b901771f96ce15cdbe907278fYang Ni  const uint32_t mDepth;
6075f0d3110b04346b901771f96ce15cdbe907278fYang Ni
6175f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkFormat mFormat;
6275f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkDeviceMemory mMem;
6375f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkImage mImage;
64f15ce3de10aa8edf30d9c2dca60237a3d24eddccYang Ni  VkDescriptorImageInfo mImageInfo;
6575f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkImageView mImageView;
6675f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkImageLayout mImageLayout;
67f15ce3de10aa8edf30d9c2dca60237a3d24eddccYang Ni  VkBuffer mBuf;
68f15ce3de10aa8edf30d9c2dca60237a3d24eddccYang Ni  VkDescriptorBufferInfo mBufferInfo;
6975f0d3110b04346b901771f96ce15cdbe907278fYang Ni};
7075f0d3110b04346b901771f96ce15cdbe907278fYang Ni
7175f0d3110b04346b901771f96ce15cdbe907278fYang Ni}  // namespace rsov
7275f0d3110b04346b901771f96ce15cdbe907278fYang Ni}  // namespace renderscript
7375f0d3110b04346b901771f96ce15cdbe907278fYang Ni}  // namespace android
7475f0d3110b04346b901771f96ce15cdbe907278fYang Ni
7575f0d3110b04346b901771f96ce15cdbe907278fYang Niextern bool rsovAllocationInit(const android::renderscript::Context *rsc,
7675f0d3110b04346b901771f96ce15cdbe907278fYang Ni                               android::renderscript::Allocation *alloc,
7775f0d3110b04346b901771f96ce15cdbe907278fYang Ni                               bool forceZero);
7875f0d3110b04346b901771f96ce15cdbe907278fYang Ni
7975f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationDestroy(const android::renderscript::Context *rsc,
8075f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                  android::renderscript::Allocation *alloc);
8175f0d3110b04346b901771f96ce15cdbe907278fYang Ni
8275f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationData1D(const android::renderscript::Context *rsc,
8375f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const android::renderscript::Allocation *alloc,
8475f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t xoff, uint32_t lod, size_t count,
8575f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const void *data, size_t sizeBytes);
8675f0d3110b04346b901771f96ce15cdbe907278fYang Ni
8775f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationData2D(const android::renderscript::Context *rsc,
8875f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const android::renderscript::Allocation *alloc,
8975f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t xoff, uint32_t yoff, uint32_t lod,
9075f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 RsAllocationCubemapFace face, uint32_t w,
9175f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t h, const void *data, size_t sizeBytes,
9275f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 size_t stride);
9375f0d3110b04346b901771f96ce15cdbe907278fYang Ni
9475f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationData3D(const android::renderscript::Context *rsc,
9575f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const android::renderscript::Allocation *alloc,
9675f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t xoff, uint32_t yoff, uint32_t zoff,
9775f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t lod, uint32_t w, uint32_t h,
9875f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t d, const void *data, size_t sizeBytes,
9975f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 size_t stride);
10075f0d3110b04346b901771f96ce15cdbe907278fYang Ni
10175f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationRead1D(const android::renderscript::Context *rsc,
10275f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const android::renderscript::Allocation *alloc,
10375f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t xoff, uint32_t lod, size_t count,
10475f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 void *data, size_t sizeBytes);
10575f0d3110b04346b901771f96ce15cdbe907278fYang Ni
10675f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationRead2D(const android::renderscript::Context *rsc,
10775f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const android::renderscript::Allocation *alloc,
10875f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t xoff, uint32_t yoff, uint32_t lod,
10975f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 RsAllocationCubemapFace face, uint32_t w,
11075f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t h, void *data, size_t sizeBytes,
11175f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 size_t stride);
11275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
11375f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationRead3D(const android::renderscript::Context *rsc,
11475f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const android::renderscript::Allocation *alloc,
11575f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t xoff, uint32_t yoff, uint32_t zoff,
11675f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t lod, uint32_t w, uint32_t h,
11775f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 uint32_t d, void *data, size_t sizeBytes,
11875f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 size_t stride);
11975f0d3110b04346b901771f96ce15cdbe907278fYang Ni
12075f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void *rsovAllocationLock1D(
12175f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
12275f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc);
12375f0d3110b04346b901771f96ce15cdbe907278fYang Ni
12475f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationUnlock1D(
12575f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
12675f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc);
12775f0d3110b04346b901771f96ce15cdbe907278fYang Ni
12875f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationData1D_alloc(
12975f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
13075f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
13175f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t dstLod, size_t count,
13275f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *srcAlloc, uint32_t srcXoff,
13375f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t srcLod);
13475f0d3110b04346b901771f96ce15cdbe907278fYang Ni
13575f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationData2D_alloc_script(
13675f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
13775f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
13875f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t dstYoff, uint32_t dstLod, RsAllocationCubemapFace dstFace,
13975f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t w, uint32_t h, const android::renderscript::Allocation *srcAlloc,
14075f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
14175f0d3110b04346b901771f96ce15cdbe907278fYang Ni    RsAllocationCubemapFace srcFace);
14275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
14375f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationData2D_alloc(
14475f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
14575f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
14675f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t dstYoff, uint32_t dstLod, RsAllocationCubemapFace dstFace,
14775f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t w, uint32_t h, const android::renderscript::Allocation *srcAlloc,
14875f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
14975f0d3110b04346b901771f96ce15cdbe907278fYang Ni    RsAllocationCubemapFace srcFace);
15075f0d3110b04346b901771f96ce15cdbe907278fYang Ni
15175f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationData3D_alloc_script(
15275f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
15375f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
15475f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t dstYoff, uint32_t dstZoff, uint32_t dstLod, uint32_t w, uint32_t h,
15575f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t d, const android::renderscript::Allocation *srcAlloc,
15675f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, uint32_t srcLod);
15775f0d3110b04346b901771f96ce15cdbe907278fYang Ni
15875f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationData3D_alloc(
15975f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
16075f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
16175f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t dstYoff, uint32_t dstZoff, uint32_t dstLod, uint32_t w, uint32_t h,
16275f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t d, const android::renderscript::Allocation *srcAlloc,
16375f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, uint32_t srcLod);
16475f0d3110b04346b901771f96ce15cdbe907278fYang Ni
16575f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationAdapterOffset(
16675f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
16775f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc);
16875f0d3110b04346b901771f96ce15cdbe907278fYang Ni
16975f0d3110b04346b901771f96ce15cdbe907278fYang Niextern bool rsovAllocationAdapterInit(const android::renderscript::Context *rsc,
17075f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                      android::renderscript::Allocation *alloc);
17175f0d3110b04346b901771f96ce15cdbe907278fYang Ni
17275f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationSyncAll(
17375f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
17475f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc, RsAllocationUsageType src);
17575f0d3110b04346b901771f96ce15cdbe907278fYang Ni
17675f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationMarkDirty(
17775f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
17875f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc);
17975f0d3110b04346b901771f96ce15cdbe907278fYang Ni
18075f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationResize(const android::renderscript::Context *rsc,
18175f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const android::renderscript::Allocation *alloc,
18275f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 const android::renderscript::Type *newType,
18375f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 bool zeroNew);
18475f0d3110b04346b901771f96ce15cdbe907278fYang Ni
18575f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationGenerateMipmaps(
18675f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
18775f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc);
18875f0d3110b04346b901771f96ce15cdbe907278fYang Ni
18975f0d3110b04346b901771f96ce15cdbe907278fYang Niextern uint32_t rsovAllocationGrallocBits(
19075f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
19175f0d3110b04346b901771f96ce15cdbe907278fYang Ni    android::renderscript::Allocation *alloc);
19275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
19375f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationUpdateCachedObject(
19475f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
19575f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc,
19675f0d3110b04346b901771f96ce15cdbe907278fYang Ni    android::renderscript::rs_allocation *obj);
19775f0d3110b04346b901771f96ce15cdbe907278fYang Ni
19875f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationSetSurface(const android::renderscript::Context *rsc,
19975f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                     android::renderscript::Allocation *alloc,
20075f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                     ANativeWindow *nw);
20175f0d3110b04346b901771f96ce15cdbe907278fYang Ni
20275f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationIoSend(const android::renderscript::Context *rsc,
20375f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                 android::renderscript::Allocation *alloc);
20475f0d3110b04346b901771f96ce15cdbe907278fYang Ni
20575f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationIoReceive(const android::renderscript::Context *rsc,
20675f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                    android::renderscript::Allocation *alloc);
20775f0d3110b04346b901771f96ce15cdbe907278fYang Ni
20875f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationElementData(
20975f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
21075f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc, uint32_t x, uint32_t y,
21175f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t z, const void *data, uint32_t cIdx, size_t sizeBytes);
21275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
21375f0d3110b04346b901771f96ce15cdbe907278fYang Niextern void rsovAllocationElementRead(
21475f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Context *rsc,
21575f0d3110b04346b901771f96ce15cdbe907278fYang Ni    const android::renderscript::Allocation *alloc, uint32_t x, uint32_t y,
21675f0d3110b04346b901771f96ce15cdbe907278fYang Ni    uint32_t z, void *data, uint32_t cIdx, size_t sizeBytes);
21775f0d3110b04346b901771f96ce15cdbe907278fYang Ni
21875f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif  // RSOV_ALLOCATION_H
219