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