diff options
| author | shuffle2 <godisgovernment@gmail.com> | 2015-11-01 23:06:21 -0800 |
|---|---|---|
| committer | shuffle2 <godisgovernment@gmail.com> | 2015-11-01 23:06:21 -0800 |
| commit | baf438fc9fb3558f78eb1439471727dfdb0084fb (patch) | |
| tree | 22472558f3944d629be49a2c823e9782e4c9b724 /Source | |
| parent | 55c5ab5a2123d3749556c832c416d38a62f56151 (diff) | |
| parent | 0245b1219bbe8e3aa90a7fea5675441795ae86fe (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.natvis | 93 | ||||
| -rw-r--r-- | Source/Core/Common/Common.vcxproj | 5 | ||||
| -rw-r--r-- | Source/Core/Common/Common.vcxproj.filters | 7 |
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<*,*,*>"> + <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<*,*,__int64>"> + <!-- 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 & (1 << ($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<*,*,__int32>"> + <DisplayString Condition="(storage & (1 << ($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<*,*,__int16>"> + <DisplayString Condition="(storage & (1 << ($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<*,*,__int8>"> + <DisplayString Condition="(storage & (1 << ($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 |
