[Beignet] [PATCH 2/2] Fix some get image info errors.

Yang Rong rong.r.yang at intel.com
Tue Nov 26 22:06:51 PST 2013


Get correct grf offset and need clear image set offsets.

Signed-off-by: Yang Rong <rong.r.yang at intel.com>
---
 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(); }
-- 
1.8.1.2



More information about the Beignet mailing list