From 9cfb973c3fe011ed31e8207fe9718c80fba7be69 Mon Sep 17 00:00:00 2001 From: Jason Tang Date: Thu, 12 Mar 2020 13:33:27 -0400 Subject: [PATCH] SWDEV-207312 - Fix images_write_cube failure for gfx10 Change-Id: I7f6a8c77eb712103e4c0a5f36bba95093ffbff98 --- rocclr/device/rocm/rocglinterop.hpp | 36 +++++++++++++++++------------ rocclr/device/rocm/rocmemory.cpp | 12 +++++++--- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/rocclr/device/rocm/rocglinterop.hpp b/rocclr/device/rocm/rocglinterop.hpp index f420d05ef1..88102d0e55 100644 --- a/rocclr/device/rocm/rocglinterop.hpp +++ b/rocclr/device/rocm/rocglinterop.hpp @@ -22,11 +22,11 @@ #ifndef WITHOUT_HSA_BACKEND -#ifndef _WIN32 -#include -#include -#else -#include +#ifndef _WIN32 +#include +#include +#else +#include #include typedef _XDisplay Display; typedef __GLXcontextRec* GLXContext; @@ -77,18 +77,24 @@ class image_metadata { return true; } - bool setLayer(uint32_t layer) { - data->word3.bits.type = SQ_RSRC_IMG_2D_ARRAY; - data->word5.bits.last_array = layer; - data->word5.bits.base_array = layer; - return true; - } - bool setFace(GLenum face) { + bool setFace(GLenum face, int32_t gfxipMajor) { int index = face - GL_TEXTURE_CUBE_MAP_POSITIVE_X; - if (index < 0 || index > 5) return false; - if (data->word3.bits.type != SQ_RSRC_IMG_CUBE) return false; - return setLayer(index); + if (index < 0 || index > 5) { + return false; + } + if (data->word3.bits.type != SQ_RSRC_IMG_CUBE) { + return false; + } + data->word3.bits.type = SQ_RSRC_IMG_2D_ARRAY; + if (gfxipMajor >= 10) { + // The base array is moved to word4 for gfx10 + data->word4.u32_all = index << 16; + } else { + data->word5.bits.last_array = index; + data->word5.bits.base_array = index; + } + return true; } }; diff --git a/rocclr/device/rocm/rocmemory.cpp b/rocclr/device/rocm/rocmemory.cpp index 74bc1c5447..1df902e6e2 100644 --- a/rocclr/device/rocm/rocmemory.cpp +++ b/rocclr/device/rocm/rocmemory.cpp @@ -1028,11 +1028,17 @@ bool Image::createInteropImage() { } image_metadata desc; - if (!desc.create(amdImageDesc_)) return false; + if (!desc.create(amdImageDesc_)) { + return false; + } - if (!desc.setMipLevel(obj->getGLMipLevel())) return false; + if (!desc.setMipLevel(obj->getGLMipLevel())) { + return false; + } - if (obj->getGLTarget() == GL_TEXTURE_CUBE_MAP) desc.setFace(obj->getCubemapFace()); + if (obj->getGLTarget() == GL_TEXTURE_CUBE_MAP) { + desc.setFace(obj->getCubemapFace(), dev().deviceInfo().gfxipVersion_ / 100); + } hsa_status_t err = hsa_amd_image_create(dev().getBackendDevice(), &imageDescriptor_, amdImageDesc_,