https://github.com/shader-slang/slang
Raw File
Tip revision: 95a61ab5e49134e87584ca302b90bd78a5a58864 authored by Tim Foley on 05 April 2021, 20:40:45 UTC
Fix a bug in the "operator cache" (#1784)
Tip revision: 95a61ab
slang.natvis
<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

  <Type Name="Slang::BCPtr&lt;*&gt;">
    <SmartPointer Usage="Minimal">rawVal ? ($T1*)((char*)this + rawVal) : ($T1*)0</SmartPointer>
    <DisplayString Condition="rawVal == 0">BCPtr nullptr</DisplayString>
    <DisplayString Condition="rawVal != 0">BCPtr {*($T1*)((char*)this + rawVal)}</DisplayString>
    <Expand>
      <ExpandedItem>rawVal ? ($T1*)((char*)this + rawVal) : ($T1*)0</ExpandedItem>
    </Expand>
  </Type>
  <Type Name="Slang::DeclRef&lt;*&gt;">
    <SmartPointer Usage="Minimal">decl ? ($T1*)(decl) : ($T1*)0</SmartPointer>
    <DisplayString Condition="decl == 0">DeclRef nullptr</DisplayString>
    <DisplayString Condition="decl != 0">{(*(*(Slang::DeclRefBase*)this).decl).nameAndLoc}</DisplayString>
    <Expand>
      <ExpandedItem>decl ? ($T1*)(decl) : ($T1*)0</ExpandedItem>
      <Item Name="[Substitutions]:">"========================="</Item>
      <LinkedListItems>
        <HeadPointer>substitutions.substitutions.pointer</HeadPointer>
        <NextPointer>outer.pointer</NextPointer>
        <ValueNode>this</ValueNode>
      </LinkedListItems>
    </Expand>
  </Type>
    <Type Name="Slang::DeclRefBase">
        <SmartPointer Usage="Minimal">decl</SmartPointer>
        <DisplayString Condition="decl == 0">DeclRefBase nullptr</DisplayString>
        <DisplayString Condition="decl != 0">{(*(*(Slang::DeclRefBase*)this).decl).nameAndLoc}</DisplayString>
        <Expand>
            <ExpandedItem>decl</ExpandedItem>
            <Item Name="[Substitutions]:">"========================="</Item>
            <LinkedListItems>
                <HeadPointer>substitutions.genericSubstitutions.pointer</HeadPointer>
                <NextPointer>outer.pointer</NextPointer>
                <ValueNode>this</ValueNode>
            </LinkedListItems>
            <LinkedListItems>
                <HeadPointer>substitutions.globalGenParamSubstitutions.pointer</HeadPointer>
                <NextPointer>outer.pointer</NextPointer>
                <ValueNode>this</ValueNode>
            </LinkedListItems>
            <Item Name ="thisSubst">substitutions.thisTypeSubstitution</Item>
        </Expand>
    </Type>
    <Type Name="Slang::GenericSubstitution">
        <DisplayString>GenSubst {(*genericDecl).nameAndLoc}</DisplayString>
        <Expand>
            <Item Name="genericDecl">genericDecl</Item>
            <ExpandedItem>args</ExpandedItem>
        </Expand>
    </Type>
  <Type Name="Slang::DeclRefType">
    <DisplayString>DeclRefType {declRef}</DisplayString>
    <Expand>
      <ExpandedItem>declRef</ExpandedItem>
    </Expand>
  </Type>
    <Type Name="Slang::FuncDecl">
        <DisplayString>FuncDecl {nameAndLoc}</DisplayString>
    </Type>
  <Type Name="Slang::Name">
    <DisplayString>{{name={(char*)(text.m_buffer.pointer+1), s}}}</DisplayString>
  </Type>
  <Type Name="Slang::NameLoc">
    <DisplayString>{{name={(char*)((*name).text.m_buffer.pointer+1), s} loc={loc.raw}}}</DisplayString>
  </Type>
  <Type Name="Slang::IRWitnessTableEntry">
    <Expand>
      <Item Name="[Key]">requirementKey</Item>
      <Item Name="[Val]">satisfyingVal</Item>
    </Expand>
  </Type>
  <Type Name="Slang::IRInst">
    <DisplayString>{{{m_op}}}</DisplayString>
    <Expand>
      <Item Name="[op]">m_op</Item>
      <Item Name="[type]">typeUse.usedValue</Item>
      <CustomListItems MaxItemsPerView="3">
		  <Variable Name="child" InitialValue="m_decorationsAndChildren.first"/>
		  <Loop>
			  <If Condition="child == 0">
				  <Break/>
			  </If>
			  <If Condition="child->m_op == Slang::kIROp_NameHintDecoration">
				  <Item Name="[name]">((Slang::IRStringLit*)(((Slang::IRUse*)(child + 1))->usedValue))->value.stringVal.chars,[((Slang::IRStringLit*)(((Slang::IRUse*)(child + 1))->usedValue))->value.stringVal.numChars]s8</Item>
			  </If>
			  <If Condition="child->m_op == Slang::kIROp_ExportDecoration">
				  <Item Name="[exportName]">((Slang::IRStringLit*)(((Slang::IRUse*)(child + 1))->usedValue))->value.stringVal.chars,[((Slang::IRStringLit*)(((Slang::IRUse*)(child + 1))->usedValue))->value.stringVal.numChars]s8</Item>
			  </If>
			  <If Condition="child->m_op == Slang::kIROp_ImportDecoration">
				  <Item Name="[importName]">((Slang::IRStringLit*)(((Slang::IRUse*)(child + 1))->usedValue))->value.stringVal.chars,[((Slang::IRStringLit*)(((Slang::IRUse*)(child + 1))->usedValue))->value.stringVal.numChars]s8</Item>
			  </If>
			  <Exec>child = child->next</Exec>
		  </Loop>
      </CustomListItems>
      <Item Name="[value]" Condition="m_op == Slang::kIROp_StringLit">((IRStringLit*)this)->value.stringVal.chars,[((IRStringLit*)this)->value.stringVal.numChars]s8</Item>
      <Item Name="[value]" Condition="m_op == Slang::kIROp_IntLit">((IRIntLit*)this)->value.intVal</Item>
	  <!--
      <Synthetic Name="[operands]">
        <DisplayString>{{count = {operandCount}}}</DisplayString>
        <Expand>
          <Item Name="[count]">operandCount</Item>
          <ArrayItems>
            <Size>operandCount</Size>
            <ValuePointer>(IRUse*)(&amp;(typeUse) + 1)</ValuePointer>
          </ArrayItems>
        </Expand>
      </Synthetic>
	  -->
      <CustomListItems MaxItemsPerView="10">
	    <Variable Name="index" InitialValue="0"/>
	    <Variable Name="nameDecoration" InitialValue="(IRInst*)nullptr"/>
	    <Variable Name="child" InitialValue="(IRInst*)nullptr"/>
		<Variable Name="pOperandInst" InitialValue="(IRInst*)nullptr"/>
	    <Loop Condition="index &lt; operandCount">
		    <Exec>pOperandInst = ((IRUse*)(&amp;(typeUse) + 1 + index))->usedValue </Exec>
        <Item Condition="pOperandInst == 0" Name="[operand{index}]">pOperandInst</Item>
        <If Condition="pOperandInst != 0">
			<Exec>child = pOperandInst->m_decorationsAndChildren.first</Exec>
		    <Exec>nameDecoration = 0</Exec>
		    <Loop Condition="child != 0">
			    <If Condition="child->m_op == Slang::kIROp_NameHintDecoration">
				    <Exec>nameDecoration = child</Exec>
				    <Break/>
			    </If>
			    <If Condition="child->m_op == Slang::kIROp_ExportDecoration &amp;&amp; (nameDecoration == 0 || nameDecoration->m_op != Slang::kIROp_NameHintDecoration)">
				    <Exec>nameDecoration = child</Exec>
			    </If>
			    <If Condition="child->m_op == Slang::kIROp_ImportDecoration &amp;&amp; (nameDecoration == 0 || nameDecoration->m_op != Slang::kIROp_NameHintDecoration)">
				    <Exec>nameDecoration = child</Exec>
			    </If>
			    <Exec>child = child->next</Exec>
		    </Loop>
		    <Item Condition="nameDecoration != 0" Name="[operand{index}] : {((Slang::IRStringLit*)(((Slang::IRUse*)(nameDecoration + 1))->usedValue))->value.stringVal.chars,[((Slang::IRStringLit*)(((Slang::IRUse*)(nameDecoration + 1))->usedValue))->value.stringVal.numChars]s8}">*pOperandInst</Item>
		    <Item Condition="nameDecoration == 0" Name="[operand{index}]">*pOperandInst</Item>
        </If>
        <Exec>index = index + 1</Exec>
	    </Loop>
      </CustomListItems>
      <Synthetic Name="[decorations/children]">
        <Expand>
		  <CustomListItems MaxItemsPerView="5000">
			  <Variable Name="pItem" InitialValue="m_decorationsAndChildren.first"/>
			  <Variable Name="nameDecoration" InitialValue="(IRInst*)nullptr"/>
			  <Variable Name="child" InitialValue="(IRInst*)nullptr"/>
			  <Variable Name="index" InitialValue="0"/>
			  <Loop Condition="pItem != 0">
				  <Exec>child = pItem->m_decorationsAndChildren.first </Exec>
			      <Exec>nameDecoration = 0</Exec>
				  <Loop Condition="child != 0">
				      <If Condition="child->m_op == Slang::kIROp_NameHintDecoration">
						  <Exec>nameDecoration = child</Exec>
						  <Break/>
				      </If>
				      <If Condition="child->m_op == Slang::kIROp_ExportDecoration &amp;&amp; (nameDecoration == 0 || nameDecoration->m_op != Slang::kIROp_NameHintDecoration)">
						  <Exec>nameDecoration = child</Exec>
				      </If>
					  <If Condition="child->m_op == Slang::kIROp_ImportDecoration &amp;&amp; (nameDecoration == 0 || nameDecoration->m_op != Slang::kIROp_NameHintDecoration)">
						  <Exec>nameDecoration = child</Exec>
					  </If>
				      <Exec>child = child->next</Exec>
				  </Loop>      
			      <Item Condition="nameDecoration != 0" Name="[{index}] : {((Slang::IRStringLit*)(((Slang::IRUse*)(nameDecoration + 1))->usedValue))->value.stringVal.chars,[((Slang::IRStringLit*)(((Slang::IRUse*)(nameDecoration + 1))->usedValue))->value.stringVal.numChars]s8}">*pItem</Item>
			      <Item Condition="nameDecoration == 0">*pItem</Item>
				  <Exec>pItem = pItem->next</Exec>
				  <Exec>index = index + 1</Exec>
			  </Loop>
		  </CustomListItems>
        </Expand>
      </Synthetic>
      <Item Name="[parent]">parent</Item>
      <Synthetic Name="[uses]">
        <Expand>
          <LinkedListItems>
            <HeadPointer>firstUse</HeadPointer>
            <NextPointer>nextUse</NextPointer>
            <ValueNode>user</ValueNode>
          </LinkedListItems>
        </Expand>
      </Synthetic>
  </Expand>
  </Type>
  <Type Name="Slang::IRUse">
    <DisplayString>{{IRUse {usedValue}}}</DisplayString>
    <Expand>
      <ExpandedItem>usedValue</ExpandedItem>
    </Expand>
  </Type>
</AutoVisualizer>
back to top