summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorshuffle2 <godisgovernment@gmail.com>2015-11-01 23:06:21 -0800
committershuffle2 <godisgovernment@gmail.com>2015-11-01 23:06:21 -0800
commitbaf438fc9fb3558f78eb1439471727dfdb0084fb (patch)
tree22472558f3944d629be49a2c823e9782e4c9b724 /Source
parent55c5ab5a2123d3749556c832c416d38a62f56151 (diff)
parent0245b1219bbe8e3aa90a7fea5675441795ae86fe (diff)
Merge pull request #3213 from phire/bitfield
Bitfield: Add .natvis for easier debugging of BitFields in Visual Studio
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Common/BitField.natvis93
-rw-r--r--Source/Core/Common/Common.vcxproj5
-rw-r--r--Source/Core/Common/Common.vcxproj.filters7
3 files changed, 103 insertions, 2 deletions
diff --git a/Source/Core/Common/BitField.natvis b/Source/Core/Common/BitField.natvis
new file mode 100644
index 0000000000..42141a3189
--- /dev/null
+++ b/Source/Core/Common/BitField.natvis
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2015 Scott Mansell
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the owner nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
+ <!--
+ This is a re-implementation of the abstract bitfield class' algrothm (in BitField.h)
+ for Visual Studio to use for pretty-printing during debugging.
+ -->
+ <Type Name="BitField&lt;*,*,*&gt;">
+ <DisplayString Condition="$T2 == 1"><![CDATA[{(storage & (1 << $T1)) != 0}]]></DisplayString>
+ <DisplayString><![CDATA[{(storage >> $T1) & ((1 << $T2) - 1)}]]></DisplayString>
+ <Expand>
+ <Item Name="Offset">$T1</Item>
+ <Item Name="Size">$T2</Item>
+ </Expand>
+ </Type>
+
+
+ <!--Specialised versions for signed types-->
+ <Type Name="BitField&lt;*,*,__int64&gt;">
+ <!-- This is what I have do to get a sign extension in this crappy natvis "language"
+ Basically, we check the top bit, if it's one, we add the remaining
+ bits to the smallest (most negative) number. -->
+ <DisplayString Condition="(storage &amp; (1 &lt;&lt; ($T1 + $T2))) != 0">
+ <![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
+ </DisplayString>
+ <DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
+ <Expand>
+ <Item Name="Offset">$T1</Item>
+ <Item Name="Size">$T2</Item>
+ </Expand>
+ </Type>
+
+ <!-- Oh, and I can't do a generic match for all signed types, so these are identical to the __int64 case above
+ Would be nice if std::numeric_limits<$T3>::is_signed or std::is_signed<$T3>::value worked -->
+ <Type Name="BitField&lt;*,*,__int32&gt;">
+ <DisplayString Condition="(storage &amp; (1 &lt;&lt; ($T1 + $T2))) != 0">
+ <![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
+ </DisplayString>
+ <DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
+ <Expand>
+ <Item Name="Offset">$T1</Item>
+ <Item Name="Size">$T2</Item>
+ </Expand>
+ </Type>
+ <Type Name="BitField&lt;*,*,__int16&gt;">
+ <DisplayString Condition="(storage &amp; (1 &lt;&lt; ($T1 + $T2))) != 0">
+ <![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
+ </DisplayString>
+ <DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
+ <Expand>
+ <Item Name="Offset">$T1</Item>
+ <Item Name="Size">$T2</Item>
+ </Expand>
+ </Type>
+ <Type Name="BitField&lt;*,*,__int8&gt;">
+ <DisplayString Condition="(storage &amp; (1 &lt;&lt; ($T1 + $T2))) != 0">
+ <![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
+ </DisplayString>
+ <DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
+ <Expand>
+ <Item Name="Offset">$T1</Item>
+ <Item Name="Size">$T2</Item>
+ </Expand>
+ </Type>
+</AutoVisualizer> \ No newline at end of file
diff --git a/Source/Core/Common/Common.vcxproj b/Source/Core/Common/Common.vcxproj
index 85a9a47eb7..f92679a1b6 100644
--- a/Source/Core/Common/Common.vcxproj
+++ b/Source/Core/Common/Common.vcxproj
@@ -187,7 +187,10 @@
<Project>{41279555-f94f-4ebc-99de-af863c10c5c4}</Project>
</ProjectReference>
</ItemGroup>
+ <ItemGroup>
+ <Natvis Include="BitField.natvis" />
+ </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/Source/Core/Common/Common.vcxproj.filters b/Source/Core/Common/Common.vcxproj.filters
index af926981f3..e708d237dd 100644
--- a/Source/Core/Common/Common.vcxproj.filters
+++ b/Source/Core/Common/Common.vcxproj.filters
@@ -189,6 +189,8 @@
<ClInclude Include="GL\GLInterfaceBase.h">
<Filter>GL\GLInterface</Filter>
</ClInclude>
+ <ClInclude Include="Assert.h" />
+ <ClInclude Include="NonCopyable.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="BreakPoints.cpp" />
@@ -253,4 +255,7 @@
<ItemGroup>
<Text Include="CMakeLists.txt" />
</ItemGroup>
-</Project>
+ <ItemGroup>
+ <Natvis Include="BitField.natvis" />
+ </ItemGroup>
+</Project> \ No newline at end of file