Hello Gerrit,

a while back I ran into a problem with the ShaderCacheTreeV3, but could 
not pinpoint the problem then and forgot about it again. It has come 
back now and this time I have the list of operations that are performed 
on the cache up to the crash.
The crash happens in ShaderCacheTreeV3<>::find in the for loop:

     for(; uiCurrId < uiLastId; ++uiCurrId)
     {
         UInt32 uiCurrIdx  = vIds[uiCurrId] - uiLevelSub;
         UInt16 uiJumpDist = 1;

         if(uiCurrIdx <= LevelBits)
         {
             uiCurrBits |= IdxToBits[uiCurrIdx];

             continue;
         }
         else
         {
             // HERE pCurrNode can be invalid/NULL

             pNextNode = pCurrNode->_vChildren[uiCurrBits].asT2();

Sequence of operations on the cache [1]:

  SCTV3::find vIds [3 4 ]
  SCTV3::add pObject = '0x16321b0' vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [5 6 ]
  SCTV3::add pObject = '0x163a8c0' vIds [5 6 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [3 4 ]
  SCTV3::find vIds [7 8 13 ]
  SCTV3::add pObject = '0x1646540' vIds [7 8 13 ]
  SCTV3::find vIds [7 8 13 ]
  SCTV3::find vIds [7 8 13 ]
  SCTV3::find vIds [11 12 13 ]

I've added a check for pCurrNode == NULL at the crash point above and 
just break out of the loop, this is the state at that point:

  ShaderCacheTreeV3<>::find: Emergency break.
  uiStartdId = 10
  uiCurrId = 2
  uiCurrIdx = 4
  uiLevelSub = 9
  uiStartLevel = 3
  uiCurrBits = 0x6
  vIds = [11 12 13 ]

Next thing that happens is the add for ids [11 12 13]:

  SCTV3::add pObject = '0x164a940' vIds [11 12 13 ]

Is there just a test for pCurrNode == NULL missing or should this never 
happen? I'm afraid without some sort of description of the caches 
strategy this is a bit tricky for me to diagnose. Can you give some 
details or keywords that I should google to get an idea how this cache 
operates?

        Thanks,
                Carsten

[1] There are a few operations on the ShaderExecutableVar cache 
interspersed, but I've removed them from the above list, the operations 
shown are only those on the program cache.

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Opensg-core mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-core

Reply via email to