Files
TheRock/rocm-systems/projects/hip-tests/catch/unit/texture/hipCreateTextureObject_Pitch2D.cc
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

234 lines
7.7 KiB
C++

/*
* Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
*
* SPDX-License-Identifier: MIT
*/
#include <hip_test_common.hh>
/**
* @addtogroup hipCreateTextureObject hipCreateTextureObject
* @{
* @ingroup TextureTest
*/
#define UNALIGN_OFFSET 1
#define SIZE_H 20
#define SIZE_W 30
#define N 512
/**
* Test Description
* ------------------------
* - Validates handling of invalid 2D pitch resource:
* -# When device pointer is `nullptr`
* - Expected output: do not return `hipSuccess`
* -# When device pointer is not aligned appropriately
* - Expected output: do not return `hipSuccess`
* -# When pitch is not aligned appropriately
* - Expected output: do not return `hipSuccess`
* -# When height is 0
* - Expected output: do not return `hipSuccess`
* -# When height is 0 and device pointer is `nullptr`
* - Expected output: do not return `hipSuccess`
* -# When height is `size_t` maximum
* - Expected output: do not return `hipSuccess`
* -# When width is 0
* - Expected output: do not return `hipSuccess`
* -# When width is 0 and device pointer is `nullptr`
* - Expected output: do not return `hipSuccess`
* -# When width is `size_t` maximum
* - Expected output: do not return `hipSuccess`
* -# When pitch is `size_t` maximum
* - Expected output: do not return `hipSuccess`
* Test source
* ------------------------
* - unit/texture/hipCreateTextureObject_Pitch2D.cc
* Test requirements
* ------------------------
* - Textures supported on device
* - HIP_VERSION >= 5.2
*/
HIP_TEST_CASE(Unit_hipCreateTextureObject_Pitch2DResource) {
CHECK_IMAGE_SUPPORT
hipError_t ret;
hipResourceDesc resDesc;
hipTextureDesc texDesc;
hipTextureObject_t texObj;
hipDeviceProp_t devProp;
size_t devPitchA;
float* devPtrA;
// Initialization
HIP_CHECK(hipMallocPitch(reinterpret_cast<void**>(&devPtrA), &devPitchA, SIZE_W * sizeof(float),
SIZE_H));
HIP_CHECK(hipGetDeviceProperties(&devProp, 0));
memset(&resDesc, 0, sizeof(resDesc));
memset(&texDesc, 0, sizeof(texDesc));
resDesc.resType = hipResourceTypePitch2D;
// Sections
SECTION("hipResourceTypePitch2D and devPtr(nullptr)") {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = nullptr;
resDesc.res.pitch2D.height = SIZE_H;
resDesc.res.pitch2D.width = SIZE_W;
resDesc.res.pitch2D.pitchInBytes = devPitchA;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
ret = hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr);
REQUIRE(ret != hipSuccess);
}
SECTION("hipResourceTypePitch2D and devicePtr un-aligned") {
if (devProp.textureAlignment > UNALIGN_OFFSET) {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = reinterpret_cast<char*>(devPtrA) + UNALIGN_OFFSET;
resDesc.res.pitch2D.height = SIZE_H;
resDesc.res.pitch2D.width = SIZE_W;
resDesc.res.pitch2D.pitchInBytes = devPitchA;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
memset(&texDesc, 0, sizeof(texDesc));
texDesc.readMode = hipReadModeElementType;
ret = hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr);
REQUIRE(ret != hipSuccess);
}
}
SECTION("hipResourceTypePitch2D and pitch(un-aligned)") {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = devPtrA;
resDesc.res.pitch2D.height = SIZE_H;
resDesc.res.pitch2D.width = SIZE_W;
resDesc.res.pitch2D.pitchInBytes = UNALIGN_OFFSET;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
ret = hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr);
REQUIRE(ret != hipSuccess);
}
SECTION("hipResourceTypePitch2D and height(0)") {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = devPtrA;
resDesc.res.pitch2D.height = 0;
resDesc.res.pitch2D.width = SIZE_W;
resDesc.res.pitch2D.pitchInBytes = devPitchA;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
HIP_CHECK(hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr));
HIP_CHECK(hipDestroyTextureObject(texObj));
}
SECTION("hipResourceTypePitch2D and height(0)/devptr(nullptr)") {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = nullptr;
resDesc.res.pitch2D.height = 0;
resDesc.res.pitch2D.width = SIZE_W;
resDesc.res.pitch2D.pitchInBytes = devPitchA;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
ret = hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr);
REQUIRE(ret != hipSuccess);
}
SECTION("hipResourceTypePitch2D and height(max(size_t))") {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = devPtrA;
resDesc.res.pitch2D.height = std::numeric_limits<std::size_t>::max();
resDesc.res.pitch2D.width = SIZE_W;
resDesc.res.pitch2D.pitchInBytes = devPitchA;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
ret = hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr);
REQUIRE(ret != hipSuccess);
}
SECTION("hipResourceTypePitch2D and width(0)") {
// Populate resource descriptor
resDesc.resType = hipResourceTypePitch2D;
resDesc.res.pitch2D.devPtr = devPtrA;
resDesc.res.pitch2D.height = SIZE_H;
resDesc.res.pitch2D.width = 0;
resDesc.res.pitch2D.pitchInBytes = devPitchA;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
HIP_CHECK(hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr));
HIP_CHECK(hipDestroyTextureObject(texObj));
}
SECTION("hipResourceTypePitch2D and width(0)/devPtr(nullptr)") {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = nullptr;
resDesc.res.pitch2D.height = SIZE_H;
resDesc.res.pitch2D.width = 0;
resDesc.res.pitch2D.pitchInBytes = devPitchA;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
ret = hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr);
REQUIRE(ret != hipSuccess);
}
SECTION("hipResourceTypePitch2D and width(max(size_t))") {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = devPtrA;
resDesc.res.pitch2D.height = SIZE_H;
resDesc.res.pitch2D.width = std::numeric_limits<std::size_t>::max();
resDesc.res.pitch2D.pitchInBytes = devPitchA;
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
ret = hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr);
REQUIRE(ret != hipSuccess);
}
SECTION("hipResourceTypePitch2D and pitch(max(size_t))") {
// Populate resource descriptor
resDesc.res.pitch2D.devPtr = devPtrA;
resDesc.res.pitch2D.height = SIZE_H;
resDesc.res.pitch2D.width = SIZE_W;
resDesc.res.pitch2D.pitchInBytes = std::numeric_limits<std::size_t>::max();
resDesc.res.pitch2D.desc = hipCreateChannelDesc<float>();
// Populate texture descriptor
texDesc.readMode = hipReadModeElementType;
ret = hipCreateTextureObject(&texObj, &resDesc, &texDesc, nullptr);
REQUIRE(ret != hipSuccess);
}
// De-Initialization
HIP_CHECK(hipFree(devPtrA));
}
/**
* End doxygen group TextureTest.
* @}
*/