From 48ef3c3b347fbcfccce6c70443627837e26f5fcd Mon Sep 17 00:00:00 2001 From: Yang Rong Date: Wed, 27 Nov 2013 14:06:51 +0800 Subject: [PATCH] Fix some get image info errors. Get correct grf offset and need clear image set offsets. Signed-off-by: Yang Rong Reviewed-by: Zhigang Gong --- backend/src/backend/context.cpp | 2 +- backend/src/backend/gen_program.cpp | 1 + backend/src/ir/image.cpp | 13 +++++++++++++ backend/src/ir/image.hpp | 2 ++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/backend/src/backend/context.cpp b/backend/src/backend/context.cpp index 2609e7a..1bbe700 100644 --- a/backend/src/backend/context.cpp +++ b/backend/src/backend/context.cpp @@ -409,7 +409,7 @@ namespace gbe { int32_t offset = fn.getImageSet()->getInfoOffset(key); if (offset >= 0) - return offset; + return offset + GEN_REG_SIZE; newCurbeEntry(GBE_CURBE_IMAGE_INFO, key.data, size, 4); std::sort(kernel->patches.begin(), kernel->patches.end()); diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp index 67d4cab..e0a6f91 100644 --- a/backend/src/backend/gen_program.cpp +++ b/backend/src/backend/gen_program.cpp @@ -108,6 +108,7 @@ namespace gbe { break; } GBE_DELETE(ctx); + fn->getImageSet()->clearInfo(); } // XXX spill must be implemented diff --git a/backend/src/ir/image.cpp b/backend/src/ir/image.cpp index b901a12..af43ac7 100644 --- a/backend/src/ir/image.cpp +++ b/backend/src/ir/image.cpp @@ -64,6 +64,19 @@ namespace ir { setInfoOffset4Type(imageInfo, key.type, offset); } + void ImageSet::clearInfo() + { + struct ImageInfo *imageInfo; + for(auto &it : indexMap) { + imageInfo = it.second; + imageInfo->wSlot = -1; + imageInfo->hSlot = -1; + imageInfo->depthSlot = -1; + imageInfo->dataTypeSlot = -1; + imageInfo->channelOrderSlot = -1; + } + } + void ImageSet::append(Register imageReg, Context *ctx) { ir::FunctionArgument *arg = ctx->getFunction().getArg(imageReg); diff --git a/backend/src/ir/image.hpp b/backend/src/ir/image.hpp index c084c7d..088e479 100644 --- a/backend/src/ir/image.hpp +++ b/backend/src/ir/image.hpp @@ -47,6 +47,8 @@ namespace ir { void append(Register imageReg, Context *ctx); /*! Append an image info slot. */ void appendInfo(ImageInfoKey key, uint32_t offset); + /*! clear image info. */ + void clearInfo(); /*! Get the image's index(actual location). */ const uint32_t getIdx(const Register imageReg) const; size_t getDataSize(void) { return regMap.size(); } -- 2.7.4