blob: 76e20e0a18c35a2a6462824aa955569e0a08badd [file] [log] [blame]
Tobin Ehlisacab8882014-11-14 13:01:02 -07001/*
2 * XGL
3 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include "xglLayer.h"
Tobin Ehlis3c26a542014-11-18 11:28:33 -070026// Object Tracker ERROR codes
27typedef enum _OBJECT_TRACK_ERROR
28{
29 OBJTRACK_NONE = 0, // Used for INFO & other non-error messages
30 OBJTRACK_UNKNOWN_OBJECT = 1, // Updating uses of object that's not in global object list
31 OBJTRACK_INTERNAL_ERROR = 2, // Bug with data tracking within the layer
32 OBJTRACK_DESTROY_OBJECT_FAILED = 3, // Couldn't find object to be destroyed
33 OBJTRACK_MISSING_OBJECT = 4, // Attempted look-up on object that isn't in global object list
34 OBJTRACK_OBJECT_LEAK = 5, // OBJECT was not correctly freed/destroyed
35 OBJTRACK_OBJCOUNT_MAX_EXCEEDED = 6, // Request for Object data in excess of max obj count
36} OBJECT_TRACK_ERROR;
37
Tobin Ehlisacab8882014-11-14 13:01:02 -070038
39// Object type enum
40typedef enum _XGL_OBJECT_TYPE
41{
42 XGL_OBJECT_TYPE_DEVICE = 0,
43 XGL_OBJECT_TYPE_GPU_MEMORY = 1,
44 XGL_OBJECT_TYPE_FENCE = 2,
45 XGL_OBJECT_TYPE_QUEUE_SEMAPHORE = 4,
46 XGL_OBJECT_TYPE_QUEUE = 5,
47 XGL_OBJECT_TYPE_EVENT = 6,
48 XGL_OBJECT_TYPE_QUERY_POOL = 7,
49 XGL_OBJECT_TYPE_IMAGE = 8,
50 XGL_OBJECT_TYPE_IMAGE_VIEW = 9,
51 XGL_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW = 10,
52 XGL_OBJECT_TYPE_DEPTH_STENCIL_VIEW = 11,
53 XGL_OBJECT_TYPE_SHADER = 12,
54 XGL_OBJECT_TYPE_PIPELINE = 13,
55 XGL_OBJECT_TYPE_PIPELINE_DELTA = 14,
56 XGL_OBJECT_TYPE_SAMPLER = 15,
57 XGL_OBJECT_TYPE_DESCRIPTOR_SET = 16,
58 XGL_OBJECT_TYPE_VIEWPORT_STATE = 17,
59 XGL_OBJECT_TYPE_RASTER_STATE = 18,
60 XGL_OBJECT_TYPE_MSAA_STATE = 19,
61 XGL_OBJECT_TYPE_COLOR_BLEND_STATE = 20,
62 XGL_OBJECT_TYPE_DEPTH_STENCIL_STATE = 21,
63 XGL_OBJECT_TYPE_CMD_BUFFER = 22,
64 XGL_OBJECT_TYPE_PHYSICAL_GPU = 23,
65 XGL_OBJECT_TYPE_UNKNOWN = 24,
66 XGL_OBJECT_TYPE_BEGIN_RANGE = XGL_OBJECT_TYPE_DEVICE,
67 XGL_OBJECT_TYPE_END_RANGE = XGL_OBJECT_TYPE_UNKNOWN,
68 XGL_NUM_OBJECT_TYPE = (XGL_OBJECT_TYPE_END_RANGE - XGL_OBJECT_TYPE_BEGIN_RANGE + 1),
69 XGL_OBJECT_TYPE_ANY = (XGL_NUM_OBJECT_TYPE + 1), // Allow global object list to be queried/retrieved
70 XGL_MAX_ENUM(_XGL_OBJECT_TYPE)
71} XGL_OBJECT_TYPE;
72
73static const char* string_XGL_OBJECT_TYPE(XGL_OBJECT_TYPE type) {
74 switch (type)
75 {
76 case XGL_OBJECT_TYPE_DEVICE:
77 return "DEVICE";
78 case XGL_OBJECT_TYPE_GPU_MEMORY:
79 return "GPU_MEMORY";
80 case XGL_OBJECT_TYPE_FENCE:
81 return "FENCE";
82 case XGL_OBJECT_TYPE_QUEUE:
83 return "QUEUE";
84 case XGL_OBJECT_TYPE_QUEUE_SEMAPHORE:
85 return "QUEUE_SEMAPHORE";
86 case XGL_OBJECT_TYPE_EVENT:
87 return "EVENT";
88 case XGL_OBJECT_TYPE_QUERY_POOL:
89 return "QUERY_POOL";
90 case XGL_OBJECT_TYPE_IMAGE:
91 return "TYPE_IMAGE";
92 case XGL_OBJECT_TYPE_IMAGE_VIEW:
93 return "IMAGE_VIEW";
94 case XGL_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW:
95 return "COLOR_ATTACHMENT_VIEW";
96 case XGL_OBJECT_TYPE_DEPTH_STENCIL_VIEW:
97 return "DEPTH_STENCIL_VIEW";
98 case XGL_OBJECT_TYPE_SHADER:
99 return "SHADER";
100 case XGL_OBJECT_TYPE_PIPELINE:
101 return "PIPELINE";
102 case XGL_OBJECT_TYPE_PIPELINE_DELTA:
103 return "PIPELINE_DELTA";
104 case XGL_OBJECT_TYPE_SAMPLER:
105 return "SAMPLER";
106 case XGL_OBJECT_TYPE_DESCRIPTOR_SET:
107 return "DESCRIPTOR_SET";
108 case XGL_OBJECT_TYPE_VIEWPORT_STATE:
109 return "VIEWPORT_STATE";
110 case XGL_OBJECT_TYPE_RASTER_STATE:
111 return "RASTER_STATE";
112 case XGL_OBJECT_TYPE_MSAA_STATE:
113 return "MSAA_STATE";
114 case XGL_OBJECT_TYPE_COLOR_BLEND_STATE:
115 return "COLOR_BLEND_STATE";
116 case XGL_OBJECT_TYPE_DEPTH_STENCIL_STATE:
117 return "DEPTH_STENCIL_STATE";
118 case XGL_OBJECT_TYPE_CMD_BUFFER:
119 return "CMD_BUFFER";
120 case XGL_OBJECT_TYPE_PHYSICAL_GPU:
121 return "PHYSICAL_GPU";
122 default:
123 return "UNKNOWN";
124 }
125}
126
127typedef struct _OBJTRACK_NODE {
128 XGL_VOID *pObj;
129 XGL_OBJECT_TYPE objType;
130 XGL_UINT64 numUses;
131} OBJTRACK_NODE;
132// prototype for extension functions
133XGL_UINT64 objTrackGetObjectCount(XGL_OBJECT_TYPE type);
134XGL_RESULT objTrackGetObjects(XGL_OBJECT_TYPE type, XGL_UINT64 objCount, OBJTRACK_NODE* pObjNodeArray);
Tobin Ehlis3c26a542014-11-18 11:28:33 -0700135// Func ptr typedefs
136typedef XGL_UINT64 (*OBJ_TRACK_GET_OBJECT_COUNT)(XGL_OBJECT_TYPE);
137typedef XGL_RESULT (*OBJ_TRACK_GET_OBJECTS)(XGL_OBJECT_TYPE, XGL_UINT64, OBJTRACK_NODE*);