VmaDumpVis: Improved coloring based on new Usage parameter dumped in JSON.
diff --git a/tools/VmaDumpVis/README.md b/tools/VmaDumpVis/README.md
index fee2392..97a396b 100644
--- a/tools/VmaDumpVis/README.md
+++ b/tools/VmaDumpVis/README.md
@@ -28,7 +28,15 @@
## Legend
* ![Free space](README_files/Legend_Bkg.png "Free space") Light gray without border - a space in Vulkan device memory block unused by any allocation.
-* ![Buffer](README_files/Legend_Buffer.png "Buffer") Yellow rectangle - buffer.
-* ![Image Optimal](README_files/Legend_ImageOptimal.png "Image Optimal") Aqua rectangle - image with TILING_OPTIMAL.
-* ![Image Linear](README_files/Legend_ImageLinear.png "Image Linear") Green rectangle - image with TILING_LINEAR.
-* ![Details](README_files/Legend_Details.png "Details") Black bar or rectangle - one or more allocations of any kind too small to be visualized as filled rectangles.
+* ![Buffer 1](README_files/Legend_Buffer_1.png "Buffer 1") Buffer with usage containing INDIRECT_BUFFER, VERTEX_BUFFER, or INDEX_BUFFER.
+* ![Buffer 2](README_files/Legend_Buffer_2.png "Buffer 2") Buffer with usage containing STORAGE_BUFFER or STORAGE_TEXEL_BUFFER.
+* ![Buffer 3](README_files/Legend_Buffer_3.png "Buffer 3") Buffer with usage containing UNIFORM_BUFFER or UNIFORM_TEXEL_BUFFER.
+* ![Buffer 4](README_files/Legend_Buffer_4.png "Buffer 4") Other buffer.
+* ![Image 1](README_files/Legend_Image_1.png "Image 1") Image with OPTIMAL tiling and usage containing DEPTH_STENCIL_ATTACHMENT.
+* ![Image 2](README_files/Legend_Image_2.png "Image 2") Image with OPTIMAL tiling and usage containing INPUT_ATTACHMENT, TRANSIENT_ATTACHMENT, or COLOR_ATTACHMENT.
+* ![Image 3](README_files/Legend_Image_3.png "Image 3") Image with OPTIMAL tiling and usage containing SAMPLED.
+* ![Image 4](README_files/Legend_Image_4.png "Image 4") Other image with OPTIMAL tiling.
+* ![Image Linear](README_files/Legend_Image_Linear.png "Image Linear") Image with LINEAR tiling.
+* ![Image Unknown](README_files/Legend_Image_Unknown.png "Image Unknown") Image with tiling unknown to the allocator.
+* ![Unknown](README_files/Legend_Unknown.png "Unknown") Allocation of unknown type.
+* ![Details](README_files/Legend_Details.png "Details") Black bar - one or more allocations of any kind too small to be visualized as filled rectangles.
diff --git a/tools/VmaDumpVis/README_files/ExampleOutput.png b/tools/VmaDumpVis/README_files/ExampleOutput.png
index 0aba87e..2646ed2 100644
--- a/tools/VmaDumpVis/README_files/ExampleOutput.png
+++ b/tools/VmaDumpVis/README_files/ExampleOutput.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Buffer.png b/tools/VmaDumpVis/README_files/Legend_Buffer.png
deleted file mode 100644
index 3acc825..0000000
--- a/tools/VmaDumpVis/README_files/Legend_Buffer.png
+++ /dev/null
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Buffer_1.png b/tools/VmaDumpVis/README_files/Legend_Buffer_1.png
new file mode 100644
index 0000000..3805225
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Buffer_1.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Buffer_2.png b/tools/VmaDumpVis/README_files/Legend_Buffer_2.png
new file mode 100644
index 0000000..bc3773f
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Buffer_2.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Buffer_3.png b/tools/VmaDumpVis/README_files/Legend_Buffer_3.png
new file mode 100644
index 0000000..992d8b2
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Buffer_3.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Buffer_4.png b/tools/VmaDumpVis/README_files/Legend_Buffer_4.png
new file mode 100644
index 0000000..d29f54e
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Buffer_4.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Details.png b/tools/VmaDumpVis/README_files/Legend_Details.png
index 450c7c7..a9c8535 100644
--- a/tools/VmaDumpVis/README_files/Legend_Details.png
+++ b/tools/VmaDumpVis/README_files/Legend_Details.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_ImageLinear.png b/tools/VmaDumpVis/README_files/Legend_ImageLinear.png
deleted file mode 100644
index 4bd3672..0000000
--- a/tools/VmaDumpVis/README_files/Legend_ImageLinear.png
+++ /dev/null
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_ImageOptimal.png b/tools/VmaDumpVis/README_files/Legend_ImageOptimal.png
deleted file mode 100644
index 8d74288..0000000
--- a/tools/VmaDumpVis/README_files/Legend_ImageOptimal.png
+++ /dev/null
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Image_1.png b/tools/VmaDumpVis/README_files/Legend_Image_1.png
new file mode 100644
index 0000000..dc180af
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Image_1.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Image_2.png b/tools/VmaDumpVis/README_files/Legend_Image_2.png
new file mode 100644
index 0000000..fc35c7c
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Image_2.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Image_3.png b/tools/VmaDumpVis/README_files/Legend_Image_3.png
new file mode 100644
index 0000000..b69849d
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Image_3.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Image_4.png b/tools/VmaDumpVis/README_files/Legend_Image_4.png
new file mode 100644
index 0000000..7f3980e
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Image_4.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Image_Linear.png b/tools/VmaDumpVis/README_files/Legend_Image_Linear.png
new file mode 100644
index 0000000..36d8be5
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Image_Linear.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Image_Unknown.png b/tools/VmaDumpVis/README_files/Legend_Image_Unknown.png
new file mode 100644
index 0000000..f3f40ec
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Image_Unknown.png
Binary files differ
diff --git a/tools/VmaDumpVis/README_files/Legend_Unknown.png b/tools/VmaDumpVis/README_files/Legend_Unknown.png
new file mode 100644
index 0000000..3053726
--- /dev/null
+++ b/tools/VmaDumpVis/README_files/Legend_Unknown.png
Binary files differ
diff --git a/tools/VmaDumpVis/VmaDumpVis.py b/tools/VmaDumpVis/VmaDumpVis.py
index 5bf3d5b..455ee7e 100644
--- a/tools/VmaDumpVis/VmaDumpVis.py
+++ b/tools/VmaDumpVis/VmaDumpVis.py
@@ -32,7 +32,7 @@
MAP_SIZE = 24
COLOR_TEXT_H1 = (0, 0, 0, 255)
COLOR_TEXT_H2 = (150, 150, 150, 255)
-COLOR_OUTLINE = (160, 160, 160, 255)
+COLOR_OUTLINE = (155, 155, 155, 255)
COLOR_OUTLINE_HARD = (0, 0, 0, 255)
COLOR_GRID_LINE = (224, 224, 224, 255)
@@ -52,7 +52,7 @@
dstBlockObj = {'Size':iBlockSize, 'Suballocations':[]}
dstBlockList.append(dstBlockObj)
for objSuballoc in arrSuballocs:
- dstBlockObj['Suballocations'].append((objSuballoc['Type'], int(objSuballoc['Size'])))
+ dstBlockObj['Suballocations'].append((objSuballoc['Type'], int(objSuballoc['Size']), int(objSuballoc['Usage']) if ('Usage' in objSuballoc) else 0))
def GetDataForMemoryType(iMemTypeIndex):
@@ -88,31 +88,49 @@
return iImgSizeY, fPixelsPerByte
-def TypeToColor(sType):
+def TypeToColor(sType, iUsage):
if sType == 'FREE':
return 220, 220, 220, 255
elif sType == 'BUFFER':
- return 255, 255, 0, 255
+ if (iUsage & 0x1C0) != 0: # INDIRECT_BUFFER | VERTEX_BUFFER | INDEX_BUFFER
+ return 255, 148, 148, 255 # Red
+ elif (iUsage & 0x28) != 0: # STORAGE_BUFFER | STORAGE_TEXEL_BUFFER
+ return 255, 187, 121, 255 # Orange
+ elif (iUsage & 0x14) != 0: # UNIFORM_BUFFER | UNIFORM_TEXEL_BUFFER
+ return 255, 255, 0, 255 # Yellow
+ else:
+ return 255, 255, 165, 255 # Light yellow
elif sType == 'IMAGE_OPTIMAL':
- return 128, 255, 255, 255
+ if (iUsage & 0x20) != 0: # DEPTH_STENCIL_ATTACHMENT
+ return 246, 128, 255, 255 # Pink
+ elif (iUsage & 0xD0) != 0: # INPUT_ATTACHMENT | TRANSIENT_ATTACHMENT | COLOR_ATTACHMENT
+ return 179, 179, 255, 255 # Blue
+ elif (iUsage & 0x4) != 0: # SAMPLED
+ return 0, 255, 255, 255 # Aqua
+ else:
+ return 183, 255, 255, 255 # Light aqua
elif sType == 'IMAGE_LINEAR':
- return 64, 255, 64, 255
+ return 0, 255, 0, 255 # Green
+ elif sType == 'IMAGE_UNKNOWN':
+ return 0, 255, 164, 255 # Green/aqua
+ elif sType == 'UNKNOWN':
+ return 175, 175, 175, 255 # Gray
assert False
return 0, 0, 0, 255
-def DrawDedicatedAllocationBlock(draw, y, tDedicatedAlloc):
+def DrawDedicatedAllocationBlock(draw, y, tDedicatedAlloc):
global fPixelsPerByte
iSizeBytes = tDedicatedAlloc[1]
iSizePixels = int(iSizeBytes * fPixelsPerByte)
- draw.rectangle([IMG_MARGIN, y, IMG_MARGIN + iSizePixels, y + MAP_SIZE], fill=TypeToColor(tDedicatedAlloc[0]), outline=COLOR_OUTLINE)
+ draw.rectangle([IMG_MARGIN, y, IMG_MARGIN + iSizePixels, y + MAP_SIZE], fill=TypeToColor(tDedicatedAlloc[0], tDedicatedAlloc[2]), outline=COLOR_OUTLINE)
def DrawBlock(draw, y, objBlock):
global fPixelsPerByte
iSizeBytes = objBlock['Size']
iSizePixels = int(iSizeBytes * fPixelsPerByte)
- draw.rectangle([IMG_MARGIN, y, IMG_MARGIN + iSizePixels, y + MAP_SIZE], fill=TypeToColor('FREE'), outline=None)
+ draw.rectangle([IMG_MARGIN, y, IMG_MARGIN + iSizePixels, y + MAP_SIZE], fill=TypeToColor('FREE', 0), outline=None)
iByte = 0
iX = 0
iLastHardLineX = -1
@@ -122,7 +140,8 @@
iXEnd = int(iByteEnd * fPixelsPerByte)
if sType != 'FREE':
if iXEnd > iX + 1:
- draw.rectangle([IMG_MARGIN + iX, y, IMG_MARGIN + iXEnd, y + MAP_SIZE], fill=TypeToColor(sType), outline=COLOR_OUTLINE)
+ iUsage = tSuballoc[2]
+ draw.rectangle([IMG_MARGIN + iX, y, IMG_MARGIN + iXEnd, y + MAP_SIZE], fill=TypeToColor(sType, iUsage), outline=COLOR_OUTLINE)
# Hard line was been overwritten by rectangle outline: redraw it.
if iLastHardLineX == iX:
draw.line([IMG_MARGIN + iX, y, IMG_MARGIN + iX, y + MAP_SIZE], fill=COLOR_OUTLINE_HARD)
@@ -154,7 +173,7 @@
iType = int(sType[5:])
typeData = GetDataForMemoryType(iType)
for objAlloc in tType[1]:
- typeData['DedicatedAllocations'].append((objAlloc['Type'], int(objAlloc['Size'])))
+ typeData['DedicatedAllocations'].append((objAlloc['Type'], int(objAlloc['Size']), int(objAlloc['Usage']) if ('Usage' in objAlloc) else 0))
if 'DefaultPools' in jsonSrc:
for tType in jsonSrc['DefaultPools'].items():
sType = tType[0]
@@ -171,7 +190,6 @@
arrBlocks = objPool['Blocks']
for objBlock in arrBlocks:
ProcessBlock(typeData['CustomPoolBlocks'], objBlock)
-
iImgSizeY, fPixelsPerByte = CalcParams()
@@ -234,6 +252,7 @@
- Fixed key 'DedicatedAllocations'. Value is list of tuples, each containing:
- [0]: Type : string
- [1]: Size : integer
+ - [2]: Usage : integer (0 if unknown)
- Fixed key 'DefaultPoolBlocks'. Value is list of objects, each containing dictionary with:
- Fixed key 'Size'. Value is int.
- Fixed key 'Suballocations'. Value is list of tuples as above.