From 4f6bbfa473823a94ec38bd8f5f11fe49cda87acb Mon Sep 17 00:00:00 2001 From: foreman Date: Tue, 24 Sep 2019 10:57:33 -0400 Subject: [PATCH] P4 to Git Change 2003196 by kjayapra@0_HIPWS_LNX1_ROCM on 2019/09/24 10:48:45 SWDEV-144570 - Implementing some Texture APIs Affected files ... ... //depot/stg/opencl/drivers/opencl/api/hip/hip_hcc.def.in#27 edit ... //depot/stg/opencl/drivers/opencl/api/hip/hip_hcc.map.in#26 edit ... //depot/stg/opencl/drivers/opencl/api/hip/hip_texture.cpp#17 edit --- hipamd/api/hip/hip_hcc.def.in | 4 +++ hipamd/api/hip/hip_hcc.map.in | 4 +++ hipamd/api/hip/hip_texture.cpp | 65 ++++++++++++++++++++++++++++++++-- 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/hipamd/api/hip/hip_hcc.def.in b/hipamd/api/hip/hip_hcc.def.in index 41b71868ae..7d359dbf28 100644 --- a/hipamd/api/hip/hip_hcc.def.in +++ b/hipamd/api/hip/hip_hcc.def.in @@ -168,6 +168,10 @@ hipTexRefSetAddressMode hipTexRefSetArray hipTexRefSetAddress hipTexRefSetAddress2D +hipTexRefGetAddress +hipTexRefGetAddressMode +hipTexRefGetArray +hipTexRefSetArray ihipBindTextureImpl ihipBindTextureToArrayImpl hipCreateChannelDesc diff --git a/hipamd/api/hip/hip_hcc.map.in b/hipamd/api/hip/hip_hcc.map.in index 50384ec46a..afe47e8df1 100644 --- a/hipamd/api/hip/hip_hcc.map.in +++ b/hipamd/api/hip/hip_hcc.map.in @@ -183,6 +183,10 @@ global: hipTexRefSetArray*; hipTexRefSetAddress*; hipTexRefSetAddress2D*; + hipTexRefGetAddress*; + hipTexRefGetAddressMode*; + hipTexRefGetArray*; + hipTexRefSetArray*; hipCreateChannelDesc*; ihipBindTextureImpl*; ihipBindTextureToArrayImpl*; diff --git a/hipamd/api/hip/hip_texture.cpp b/hipamd/api/hip/hip_texture.cpp index 6e5cc9d668..a8f642c400 100644 --- a/hipamd/api/hip/hip_texture.cpp +++ b/hipamd/api/hip/hip_texture.cpp @@ -561,6 +561,18 @@ hipError_t hipTexRefSetFilterMode(textureReference* tex, hipTextureFilterMode fm HIP_RETURN(hipSuccess); } +hipError_t hipTexRefGetAddressMode(hipTextureAddressMode* am, textureReference tex, int dim) { + HIP_INIT_API(am, &tex, dim); + + if ((am == nullptr) || (dim >= 3)) { + HIP_RETURN(hipErrorInvalidValue); + } + + *am = tex.addressMode[dim]; + + HIP_RETURN(hipSuccess); +} + hipError_t hipTexRefSetAddressMode(textureReference* tex, int dim, hipTextureAddressMode am) { HIP_INIT_API(tex, dim, am); @@ -573,12 +585,61 @@ hipError_t hipTexRefSetAddressMode(textureReference* tex, int dim, hipTextureAdd HIP_RETURN(hipSuccess); } +hipError_t hipTexRefGetArray(hipArray* array, textureReference tex) { + HIP_INIT_API(array, &tex); + + hip::TextureObject* texture = nullptr; + + if (array == nullptr) { + HIP_RETURN(hipErrorInvalidImage); + } + + texture = reinterpret_cast(tex.textureObject); + if(hipResourceTypeArray != texture->resDesc.resType){ + HIP_RETURN(hipErrorInvalidValue); + } + + if (texture->resDesc.res.array.array == nullptr) { + HIP_RETURN(hipErrorUnknown); + } + + *array = *(texture->resDesc.res.array.array); + + HIP_RETURN(hipSuccess); +} + hipError_t hipTexRefSetArray(textureReference* tex, hipArray_const_t array, unsigned int flags) { HIP_INIT_API(tex, array, flags); - assert(0 && "Unimplemented"); + size_t offset = 0; - HIP_RETURN(hipErrorUnknown); + if ((tex == nullptr) || (array == nullptr)) { + HIP_RETURN(hipErrorInvalidImage); + } + + HIP_RETURN(ihipBindTexture(CL_MEM_OBJECT_IMAGE1D, &offset, tex, array->data, &array->desc, array->width, + array->height, array->depth)); +} + +hipError_t hipTexRefGetAddress(hipDeviceptr_t* dev_ptr, textureReference tex) { + HIP_INIT_API(dev_ptr, &tex); + + hip::TextureObject* texture = nullptr; + device::Memory* dev_mem = nullptr; + + texture = reinterpret_cast(tex.textureObject); + if ((texture == nullptr) || (texture->image == nullptr)) { + HIP_RETURN(hipErrorInvalidImage); + } + + dev_mem = texture->image->getDeviceMemory(*hip::getCurrentContext()->devices()[0]); + if (dev_mem == nullptr) { + HIP_RETURN(hipErrorInvalidImage); + } + + *dev_ptr = reinterpret_cast(dev_mem->virtualAddress()); + + HIP_RETURN(hipSuccess); } hipError_t hipTexRefSetAddress(size_t* offset, textureReference* tex, hipDeviceptr_t devPtr,