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,