2019-07-31 10:32:35 +05:30
|
|
|
/*
|
2021-07-02 11:19:03 -07:00
|
|
|
Copyright (c) 2019 - 2021 Advanced Micro Devices, Inc. All rights reserved.
|
2019-07-31 10:32:35 +05:30
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
|
THE SOFTWARE.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* HIT_START
|
2020-06-09 15:45:22 -04:00
|
|
|
* BUILD: %t %s ../test_common.cpp EXCLUDE_HIP_PLATFORM nvidia EXCLUDE_HIP_PLATFORM amd
|
2019-07-31 10:32:35 +05:30
|
|
|
* TEST: %t
|
|
|
|
|
* HIT_END
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "test_common.h"
|
|
|
|
|
#define SIZE 10
|
2020-02-05 10:26:18 -05:00
|
|
|
|
|
|
|
|
static float getNormalizedValue(const float value,
|
2020-04-23 21:42:06 +05:30
|
|
|
const hipChannelFormatDesc& desc) {
|
|
|
|
|
if ((desc.x == 8) && (desc.f == hipChannelFormatKindSigned))
|
|
|
|
|
return (value / SCHAR_MAX);
|
|
|
|
|
if ((desc.x == 8) && (desc.f == hipChannelFormatKindUnsigned))
|
|
|
|
|
return (value / UCHAR_MAX);
|
|
|
|
|
if ((desc.x == 16) && (desc.f == hipChannelFormatKindSigned))
|
|
|
|
|
return (value / SHRT_MAX);
|
|
|
|
|
if ((desc.x == 16) && (desc.f == hipChannelFormatKindUnsigned))
|
|
|
|
|
return (value / USHRT_MAX);
|
|
|
|
|
return value;
|
2020-02-05 10:26:18 -05:00
|
|
|
}
|
|
|
|
|
|
2020-04-23 21:42:06 +05:30
|
|
|
texture<char, hipTextureType1D, hipReadModeNormalizedFloat> texc;
|
|
|
|
|
|
|
|
|
|
texture<unsigned char, hipTextureType1D, hipReadModeNormalizedFloat> texuc;
|
|
|
|
|
|
|
|
|
|
texture<short, hipTextureType1D, hipReadModeNormalizedFloat> texs;
|
|
|
|
|
|
|
|
|
|
texture<unsigned short, hipTextureType1D, hipReadModeNormalizedFloat> texus;
|
|
|
|
|
|
2019-07-31 10:32:35 +05:30
|
|
|
|
2020-04-23 21:42:06 +05:30
|
|
|
template<typename T>
|
2019-07-31 10:32:35 +05:30
|
|
|
__global__ void normalizedValTextureTest(unsigned int numElements, float* pDst)
|
|
|
|
|
{
|
|
|
|
|
unsigned int elementID = hipThreadIdx_x;
|
|
|
|
|
if(elementID >= numElements)
|
2020-04-23 21:42:06 +05:30
|
|
|
return;
|
|
|
|
|
float coord =(float) elementID/numElements;
|
|
|
|
|
if(std::is_same<T, char>::value)
|
|
|
|
|
pDst[elementID] = tex1D(texc, coord);
|
|
|
|
|
else if(std::is_same<T, unsigned char>::value)
|
|
|
|
|
pDst[elementID] = tex1D(texuc, coord);
|
|
|
|
|
else if(std::is_same<T, short>::value)
|
|
|
|
|
pDst[elementID] = tex1D(texs, coord);
|
|
|
|
|
else if(std::is_same<T, unsigned short>::value)
|
|
|
|
|
pDst[elementID] = tex1D(texus, coord);
|
2019-07-31 10:32:35 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<typename T>
|
2020-04-23 21:42:06 +05:30
|
|
|
bool textureTest(texture<T, hipTextureType1D, hipReadModeNormalizedFloat> *tex)
|
2019-07-31 10:32:35 +05:30
|
|
|
{
|
2020-04-23 21:42:06 +05:30
|
|
|
hipChannelFormatDesc desc = hipCreateChannelDesc<T>();
|
|
|
|
|
hipArray_t dData;
|
|
|
|
|
HIPCHECK(hipMallocArray(&dData, &desc, SIZE, 1, hipArrayDefault));
|
|
|
|
|
|
|
|
|
|
T hData[] = {65, 66, 67, 68, 69, 70, 71, 72, 73, 74};
|
|
|
|
|
HIPCHECK(hipMemcpy2DToArray(dData, 0, 0, hData, sizeof(T)*SIZE, sizeof(T)*SIZE, 1, hipMemcpyHostToDevice));
|
|
|
|
|
|
|
|
|
|
tex->normalized = true;
|
|
|
|
|
tex->channelDesc = desc;
|
|
|
|
|
HIPCHECK(hipBindTextureToArray(tex, dData, &desc));
|
|
|
|
|
|
2019-07-31 10:32:35 +05:30
|
|
|
float *dOutputData = NULL;
|
2019-11-07 13:17:46 +05:30
|
|
|
HIPCHECK(hipMalloc((void **) &dOutputData, sizeof(float)*SIZE));
|
2020-04-23 21:42:06 +05:30
|
|
|
|
|
|
|
|
hipLaunchKernelGGL(normalizedValTextureTest<T>, dim3(1,1,1), dim3(SIZE,1,1), 0, 0, SIZE, dOutputData);
|
2019-07-31 10:32:35 +05:30
|
|
|
|
|
|
|
|
float *hOutputData = new float[SIZE];
|
2020-04-23 21:42:06 +05:30
|
|
|
HIPCHECK(hipMemcpy(hOutputData, dOutputData, (sizeof(float)*SIZE), hipMemcpyDeviceToHost));
|
|
|
|
|
|
|
|
|
|
bool testResult = true;
|
2019-07-31 10:32:35 +05:30
|
|
|
for(int i = 0; i < SIZE; i++)
|
|
|
|
|
{
|
2020-04-23 21:42:06 +05:30
|
|
|
float expected = getNormalizedValue(float(hData[i]), desc);
|
2020-02-05 10:26:18 -05:00
|
|
|
if(expected != hOutputData[i])
|
2019-07-31 10:32:35 +05:30
|
|
|
{
|
2020-04-23 21:42:06 +05:30
|
|
|
printf("mismatch at index:%d output:%f expected:%f\n",i,hOutputData[i],expected);
|
2019-07-31 10:32:35 +05:30
|
|
|
testResult = false;
|
2020-04-23 21:42:06 +05:30
|
|
|
break;
|
2019-07-31 10:32:35 +05:30
|
|
|
}
|
|
|
|
|
}
|
2020-04-23 21:42:06 +05:30
|
|
|
|
|
|
|
|
HIPCHECK(hipFreeArray(dData));
|
|
|
|
|
HIPCHECK(hipFree(dOutputData));
|
2019-07-31 10:32:35 +05:30
|
|
|
delete [] hOutputData;
|
|
|
|
|
return testResult;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(int argc, char** argv)
|
|
|
|
|
{
|
|
|
|
|
int device = 0;
|
|
|
|
|
bool status = true;
|
2019-11-07 13:17:46 +05:30
|
|
|
HIPCHECK(hipSetDevice(device));
|
2019-07-31 10:32:35 +05:30
|
|
|
hipDeviceProp_t props;
|
2019-11-07 13:17:46 +05:30
|
|
|
HIPCHECK(hipGetDeviceProperties(&props, device));
|
2019-07-31 10:32:35 +05:30
|
|
|
std::cout << "Device :: " << props.name << std::endl;
|
2020-12-15 17:38:08 -05:00
|
|
|
#ifdef __HIP_PLATFORM_AMD__
|
2019-07-31 10:32:35 +05:30
|
|
|
std::cout << "Arch - AMD GPU :: " << props.gcnArch << std::endl;
|
|
|
|
|
#endif
|
|
|
|
|
|
2020-04-23 21:42:06 +05:30
|
|
|
status &= textureTest<char> (&texc);
|
|
|
|
|
status &= textureTest<unsigned char> (&texuc);
|
|
|
|
|
status &= textureTest<short> (&texs);
|
|
|
|
|
status &= textureTest<unsigned short>(&texus);
|
|
|
|
|
|
2019-07-31 10:32:35 +05:30
|
|
|
if(status){
|
|
|
|
|
passed();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
failed("checks failed!");
|
|
|
|
|
}
|
|
|
|
|
}
|