SWDEV-207312 - Fix images_write_cube failure for gfx10
Change-Id: I7f6a8c77eb712103e4c0a5f36bba95093ffbff98
Esse commit está contido em:
@@ -22,11 +22,11 @@
|
||||
|
||||
#ifndef WITHOUT_HSA_BACKEND
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <GL/glx.h>
|
||||
#include <EGL/egl.h>
|
||||
#else
|
||||
#include <GL/gl.h>
|
||||
#ifndef _WIN32
|
||||
#include <GL/glx.h>
|
||||
#include <EGL/egl.h>
|
||||
#else
|
||||
#include <GL/gl.h>
|
||||
#include <EGL/egl.h>
|
||||
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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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_,
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário