xref: /aosp_15_r20/external/skia/platform_tools/debugging/vs/Skia.natvis (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3    This .natvis file allows natively viewing Skia types in any debugger that supports NatVis,
4    although the installation or usage instructions vary:
5
6    <<< Visual Studio >>>
7        https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2019
8
9        Visualizer files can be placed in the project, but your best bet is to copy this file to
10        your 'Documents\Visual Studio YYYY\Visualizers' folder (where YYYY is 2017 or 2019).
11
12        If you use Visual Studio, there are graphical visualizers for SkBitmap and SkPixmap:
13        - Install the "Image Watch" extension to Visual Studio (created by Microsoft).
14        - Copy this file to the directory indicated above. (Visualizers can normally be placed in
15          the project, but the Image Watch extension requires them to be global.)
16        - While debugging, go to View -> Other Windows -> Image Watch
17          - SkBitmap and SkPixmap objects will be visible directly in the debugger.
18            Note that due to limitations, it does not visualize some more exotic color types
19            (565, 4444, 1010102, 888x).
20        - Documentation for the extension is available:
21          https://imagewatch.azurewebsites.net/ImageWatchHelp/ImageWatchHelp.htm
22
23    <<< Visual Studio Code >>>
24        https://code.visualstudio.com/docs/cpp/natvis
25
26        Visualizer files can be placed in a global directory, but the exact directory name depends
27        on the version of VS Code you're running, and the version of the CPP tools:
28        ~/.vscode(-insiders)/extensions/ms-vscode.cpptools-x.y.z/debugAdapters/vsdbg/bin/Visualizers
29
30        Instead, you can simply edit your launch.json debugger configuration file, and set the
31        "visualizerFile" property of any Skia launch targets to point at this file. For example:
32
33        {
34            "name": "DM",
35            "type": "cppvsdbg",
36            "request": "launch",
37            "program": "${workspaceFolder}/out/Debug/dm.exe",
38            "args": [],
39            "cwd": "${workspaceFolder}",
40            "environment": [],
41            "externalConsole": true,
42            "visualizerFile": "${workspaceFolder}/platform_tools/debugging/vs/Skia.natvis"
43        },
44
45-->
46<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
47  <UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1"
48                MenuName="Add to Image Watch"/>
49
50  <!-- sk_sp -->
51  <Type Name="sk_sp&lt;*&gt;">
52    <DisplayString>{fPtr}</DisplayString>
53    <Expand>
54      <ExpandedItem>fPtr</ExpandedItem>
55    </Expand>
56  </Type>
57
58  <!-- unique_ptr -->
59  <Type Name="std::unique_ptr&lt;*&gt;">
60    <DisplayString>{_Mypair._Myval2}</DisplayString>
61    <Expand>
62      <ExpandedItem>_Mypair._Myval2</ExpandedItem>
63    </Expand>
64  </Type>
65
66  <!-- shared_ptr -->
67  <Type Name="std::shared_ptr&lt;*&gt;">
68    <DisplayString>{_Ptr}</DisplayString>
69    <Expand>
70      <ExpandedItem>_Ptr</ExpandedItem>
71    </Expand>
72  </Type>
73
74  <!-- SkString -->
75  <Type Name="SkString">
76    <DisplayString>{&amp;fRec.fPtr->fBeginningOfData}</DisplayString>
77  </Type>
78
79  <!-- SkSL::StringFragment -->
80  <Type Name="SkSL::StringFragment">
81    <DisplayString>{fChars,[fLength]}</DisplayString>
82  </Type>
83
84  <!-- SkSL::SymbolTable::SymbolKey -->
85  <Type Name="SkSL::SymbolTable::SymbolKey">
86    <DisplayString>{fName}</DisplayString>
87  </Type>
88
89  <!-- AutoTArray -->
90  <Type Name="skia_private::AutoTArray&lt;*&gt;">
91    <DisplayString>{{size = {fCount}}}</DisplayString>
92    <Expand>
93      <Item Name="[size]">fCount</Item>
94      <ArrayItems>
95        <Size>fCount</Size>
96        <ValuePointer>fArray._Mypair._Myval2</ValuePointer>
97      </ArrayItems>
98    </Expand>
99  </Type>
100
101  <!-- TArray -->
102  <Type Name="skia_private::TArray&lt;*&gt;">
103    <DisplayString>{{size = {fSize}}}</DisplayString>
104    <Expand>
105      <Item Name="[size]">fSize</Item>
106      <ArrayItems>
107        <Size>fSize</Size>
108        <ValuePointer>fData</ValuePointer>
109      </ArrayItems>
110    </Expand>
111  </Type>
112
113  <!-- SkTHashTable::Slot -->
114  <Type Name="SkTHashTable&lt;*,*,*&gt;::Slot">
115    <DisplayString Condition="hash">{val}</DisplayString>
116    <DisplayString Condition="!hash">Empty</DisplayString>
117    <Expand>
118      <ExpandedItem>val</ExpandedItem>
119    </Expand>
120  </Type>
121
122  <!-- THashMap -->
123  <Type Name="skia_private::THashMap&lt;*,*,*&gt;">
124    <DisplayString>{{size = {fTable.fCount}}}</DisplayString>
125    <Expand>
126      <CustomListItems>
127        <Variable Name="iSlot" InitialValue="0"/>
128        <Size>fTable.fCount</Size>
129        <Loop>
130          <If Condition="fTable.fSlots.fArray._Mypair._Myval2[iSlot].hash != 0">
131            <Item Name="{fTable.fSlots.fArray._Mypair._Myval2[iSlot].val.key}">
132              fTable.fSlots.fArray._Mypair._Myval2[iSlot].val
133            </Item>
134          </If>
135          <Exec>iSlot++</Exec>
136        </Loop>
137      </CustomListItems>
138    </Expand>
139  </Type>
140
141  <!-- SkImageInfo -->
142  <Type Name="SkImageInfo">
143    <DisplayString>[{fDimensions.fWidth} x {fDimensions.fHeight}] {fColorInfo.fColorType,en} {fColorInfo.fAlphaType,en} {fColorInfo.fColorSpace,na}</DisplayString>
144  </Type>
145
146  <!-- SkBitmap -->
147  <Type Name="SkBitmap">
148    <UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1" />
149  </Type>
150
151  <Type Name="SkBitmap">
152    <DisplayString>{fPixmap.fInfo}</DisplayString>
153    <Expand>
154      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kAlpha_8_SkColorType">
155        <DisplayString>UINT8</DisplayString>
156      </Synthetic>
157      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kRGBA_8888_SkColorType">
158        <DisplayString>UINT8</DisplayString>
159      </Synthetic>
160      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kBGRA_8888_SkColorType">
161        <DisplayString>UINT8</DisplayString>
162      </Synthetic>
163      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kGray_8_SkColorType">
164        <DisplayString>UINT8</DisplayString>
165      </Synthetic>
166      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kRGBA_F16_SkColorType">
167        <DisplayString>FLOAT16</DisplayString>
168      </Synthetic>
169      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kRGBA_F16Norm_SkColorType">
170        <DisplayString>FLOAT16</DisplayString>
171      </Synthetic>
172      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kRGBA_F32_SkColorType">
173        <DisplayString>FLOAT32</DisplayString>
174      </Synthetic>
175      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kR8G8_unorm_SkColorType">
176        <DisplayString>UINT8</DisplayString>
177      </Synthetic>
178      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kA16_float_SkColorType">
179        <DisplayString>FLOAT16</DisplayString>
180      </Synthetic>
181      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kR16G16_float_SkColorType">
182        <DisplayString>FLOAT16</DisplayString>
183      </Synthetic>
184      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kA16_unorm_SkColorType">
185        <DisplayString>UINT16</DisplayString>
186      </Synthetic>
187      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kR16G16_unorm_SkColorType">
188        <DisplayString>UINT16</DisplayString>
189      </Synthetic>
190      <Synthetic Name="[type]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kR16G16B16A16_unorm_SkColorType">
191        <DisplayString>UINT16</DisplayString>
192      </Synthetic>
193
194      <Item Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kAlpha_8_SkColorType">1</Item>
195      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kRGBA_8888_SkColorType">
196        <DisplayString>RGBA</DisplayString>
197      </Synthetic>
198      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kBGRA_8888_SkColorType">
199        <DisplayString>BGRA</DisplayString>
200      </Synthetic>
201      <Item Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kGray_8_SkColorType">1</Item>
202      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kRGBA_F16_SkColorType">
203        <DisplayString>RGBA</DisplayString>
204      </Synthetic>
205      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kRGBA_F16Norm_SkColorType">
206        <DisplayString>RGBA</DisplayString>
207      </Synthetic>
208      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kRGBA_F32_SkColorType">
209        <DisplayString>RGBA</DisplayString>
210      </Synthetic>
211      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kR8G8_unorm_SkColorType">
212        <DisplayString>RG</DisplayString>
213      </Synthetic>
214      <Item Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kA16_float_SkColorType">1</Item>
215      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kR16G16_float_SkColorType">
216        <DisplayString>RG</DisplayString>
217      </Synthetic>
218      <Item Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kA16_unorm_SkColorType">1</Item>
219      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kR16G16_unorm_SkColorType">
220        <DisplayString>RG</DisplayString>
221      </Synthetic>
222      <Synthetic Name="[channels]" Condition="fPixmap.fInfo.fColorInfo.fColorType == kR16G16B16A16_unorm_SkColorType">
223        <DisplayString>BGRA</DisplayString>
224      </Synthetic>
225
226      <Item Name="[width]">fPixmap.fInfo.fDimensions.fWidth</Item>
227      <Item Name="[height]">fPixmap.fInfo.fDimensions.fHeight</Item>
228      <Item Name="[data]">fPixmap.fPixels</Item>
229      <Item Name="[stride]">fPixmap.fRowBytes</Item>
230    </Expand>
231  </Type>
232
233  <!-- SkPixmap -->
234  <Type Name="SkPixmap">
235    <UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1" />
236  </Type>
237
238  <Type Name="SkPixmap">
239    <DisplayString>{fInfo}</DisplayString>
240    <Expand>
241      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kAlpha_8_SkColorType">
242        <DisplayString>UINT8</DisplayString>
243      </Synthetic>
244      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kRGBA_8888_SkColorType">
245        <DisplayString>UINT8</DisplayString>
246      </Synthetic>
247      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kBGRA_8888_SkColorType">
248        <DisplayString>UINT8</DisplayString>
249      </Synthetic>
250      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kGray_8_SkColorType">
251        <DisplayString>UINT8</DisplayString>
252      </Synthetic>
253      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kRGBA_F16_SkColorType">
254        <DisplayString>FLOAT16</DisplayString>
255      </Synthetic>
256      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kRGBA_F16Norm_SkColorType">
257        <DisplayString>FLOAT16</DisplayString>
258      </Synthetic>
259      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kRGBA_F32_SkColorType">
260        <DisplayString>FLOAT32</DisplayString>
261      </Synthetic>
262      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kR8G8_unorm_SkColorType">
263        <DisplayString>UINT8</DisplayString>
264      </Synthetic>
265      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kA16_float_SkColorType">
266        <DisplayString>FLOAT16</DisplayString>
267      </Synthetic>
268      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kR16G16_float_SkColorType">
269        <DisplayString>FLOAT16</DisplayString>
270      </Synthetic>
271      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kA16_unorm_SkColorType">
272        <DisplayString>UINT16</DisplayString>
273      </Synthetic>
274      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kR16G16_unorm_SkColorType">
275        <DisplayString>UINT16</DisplayString>
276      </Synthetic>
277      <Synthetic Name="[type]" Condition="fInfo.fColorInfo.fColorType == kR16G16B16A16_unorm_SkColorType">
278        <DisplayString>UINT16</DisplayString>
279      </Synthetic>
280
281      <Item Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kAlpha_8_SkColorType">1</Item>
282      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kRGBA_8888_SkColorType">
283        <DisplayString>RGBA</DisplayString>
284      </Synthetic>
285      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kBGRA_8888_SkColorType">
286        <DisplayString>BGRA</DisplayString>
287      </Synthetic>
288      <Item Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kGray_8_SkColorType">1</Item>
289      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kRGBA_F16_SkColorType">
290        <DisplayString>RGBA</DisplayString>
291      </Synthetic>
292      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kRGBA_F16Norm_SkColorType">
293        <DisplayString>RGBA</DisplayString>
294      </Synthetic>
295      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kRGBA_F32_SkColorType">
296        <DisplayString>RGBA</DisplayString>
297      </Synthetic>
298      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kR8G8_unorm_SkColorType">
299        <DisplayString>RG</DisplayString>
300      </Synthetic>
301      <Item Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kA16_float_SkColorType">1</Item>
302      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kR16G16_float_SkColorType">
303        <DisplayString>RG</DisplayString>
304      </Synthetic>
305      <Item Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kA16_unorm_SkColorType">1</Item>
306      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kR16G16_unorm_SkColorType">
307        <DisplayString>RG</DisplayString>
308      </Synthetic>
309      <Synthetic Name="[channels]" Condition="fInfo.fColorInfo.fColorType == kR16G16B16A16_unorm_SkColorType">
310        <DisplayString>BGRA</DisplayString>
311      </Synthetic>
312
313      <Item Name="[width]">fInfo.fDimensions.fWidth</Item>
314      <Item Name="[height]">fInfo.fDimensions.fHeight</Item>
315      <Item Name="[data]">fPixels</Item>
316      <Item Name="[stride]">fRowBytes</Item>
317    </Expand>
318  </Type>
319</AutoVisualizer>
320