blob: 77102f852140fa5394c07df3c9f65b4429733384 [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{
Chia-I Wub1466182015-01-05 14:33:42 +080029 OBJTRACK_NONE, // Used for INFO & other non-error messages
30 OBJTRACK_UNKNOWN_OBJECT, // Updating uses of object that's not in global object list
31 OBJTRACK_INTERNAL_ERROR, // Bug with data tracking within the layer
32 OBJTRACK_DESTROY_OBJECT_FAILED, // Couldn't find object to be destroyed
33 OBJTRACK_MISSING_OBJECT, // Attempted look-up on object that isn't in global object list
34 OBJTRACK_OBJECT_LEAK, // OBJECT was not correctly freed/destroyed
35 OBJTRACK_OBJCOUNT_MAX_EXCEEDED, // Request for Object data in excess of max obj count
Tobin Ehlis3c26a542014-11-18 11:28:33 -070036} OBJECT_TRACK_ERROR;
37
Tobin Ehlisacab8882014-11-14 13:01:02 -070038
39// Object type enum
40typedef enum _XGL_OBJECT_TYPE
41{
Chia-I Wub1466182015-01-05 14:33:42 +080042 XGL_OBJECT_TYPE_DEVICE,
43 XGL_OBJECT_TYPE_GPU_MEMORY,
44 XGL_OBJECT_TYPE_FENCE,
45 XGL_OBJECT_TYPE_QUEUE_SEMAPHORE,
46 XGL_OBJECT_TYPE_QUEUE,
47 XGL_OBJECT_TYPE_EVENT,
48 XGL_OBJECT_TYPE_QUERY_POOL,
49 XGL_OBJECT_TYPE_IMAGE,
50 XGL_OBJECT_TYPE_IMAGE_VIEW,
51 XGL_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW,
52 XGL_OBJECT_TYPE_DEPTH_STENCIL_VIEW,
53 XGL_OBJECT_TYPE_SHADER,
54 XGL_OBJECT_TYPE_PIPELINE,
55 XGL_OBJECT_TYPE_PIPELINE_DELTA,
56 XGL_OBJECT_TYPE_SAMPLER,
57 XGL_OBJECT_TYPE_DESCRIPTOR_SET,
58 XGL_OBJECT_TYPE_VIEWPORT_STATE,
59 XGL_OBJECT_TYPE_RASTER_STATE,
60 XGL_OBJECT_TYPE_MSAA_STATE,
61 XGL_OBJECT_TYPE_COLOR_BLEND_STATE,
62 XGL_OBJECT_TYPE_DEPTH_STENCIL_STATE,
63 XGL_OBJECT_TYPE_CMD_BUFFER,
64 XGL_OBJECT_TYPE_PHYSICAL_GPU,
65 XGL_OBJECT_TYPE_UNKNOWN,
66
67 XGL_NUM_OBJECT_TYPE,
68 XGL_OBJECT_TYPE_ANY, // Allow global object list to be queried/retrieved
Tobin Ehlisacab8882014-11-14 13:01:02 -070069} XGL_OBJECT_TYPE;
70
71static const char* string_XGL_OBJECT_TYPE(XGL_OBJECT_TYPE type) {
72 switch (type)
73 {
74 case XGL_OBJECT_TYPE_DEVICE:
75 return "DEVICE";
76 case XGL_OBJECT_TYPE_GPU_MEMORY:
77 return "GPU_MEMORY";
78 case XGL_OBJECT_TYPE_FENCE:
79 return "FENCE";
80 case XGL_OBJECT_TYPE_QUEUE:
81 return "QUEUE";
82 case XGL_OBJECT_TYPE_QUEUE_SEMAPHORE:
83 return "QUEUE_SEMAPHORE";
84 case XGL_OBJECT_TYPE_EVENT:
85 return "EVENT";
86 case XGL_OBJECT_TYPE_QUERY_POOL:
87 return "QUERY_POOL";
88 case XGL_OBJECT_TYPE_IMAGE:
89 return "TYPE_IMAGE";
90 case XGL_OBJECT_TYPE_IMAGE_VIEW:
91 return "IMAGE_VIEW";
92 case XGL_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW:
93 return "COLOR_ATTACHMENT_VIEW";
94 case XGL_OBJECT_TYPE_DEPTH_STENCIL_VIEW:
95 return "DEPTH_STENCIL_VIEW";
96 case XGL_OBJECT_TYPE_SHADER:
97 return "SHADER";
98 case XGL_OBJECT_TYPE_PIPELINE:
99 return "PIPELINE";
100 case XGL_OBJECT_TYPE_PIPELINE_DELTA:
101 return "PIPELINE_DELTA";
102 case XGL_OBJECT_TYPE_SAMPLER:
103 return "SAMPLER";
104 case XGL_OBJECT_TYPE_DESCRIPTOR_SET:
105 return "DESCRIPTOR_SET";
106 case XGL_OBJECT_TYPE_VIEWPORT_STATE:
107 return "VIEWPORT_STATE";
108 case XGL_OBJECT_TYPE_RASTER_STATE:
109 return "RASTER_STATE";
110 case XGL_OBJECT_TYPE_MSAA_STATE:
111 return "MSAA_STATE";
112 case XGL_OBJECT_TYPE_COLOR_BLEND_STATE:
113 return "COLOR_BLEND_STATE";
114 case XGL_OBJECT_TYPE_DEPTH_STENCIL_STATE:
115 return "DEPTH_STENCIL_STATE";
116 case XGL_OBJECT_TYPE_CMD_BUFFER:
117 return "CMD_BUFFER";
118 case XGL_OBJECT_TYPE_PHYSICAL_GPU:
119 return "PHYSICAL_GPU";
120 default:
121 return "UNKNOWN";
122 }
123}
124
125typedef struct _OBJTRACK_NODE {
126 XGL_VOID *pObj;
127 XGL_OBJECT_TYPE objType;
128 XGL_UINT64 numUses;
129} OBJTRACK_NODE;
130// prototype for extension functions
131XGL_UINT64 objTrackGetObjectCount(XGL_OBJECT_TYPE type);
132XGL_RESULT objTrackGetObjects(XGL_OBJECT_TYPE type, XGL_UINT64 objCount, OBJTRACK_NODE* pObjNodeArray);
Tobin Ehlis3c26a542014-11-18 11:28:33 -0700133// Func ptr typedefs
134typedef XGL_UINT64 (*OBJ_TRACK_GET_OBJECT_COUNT)(XGL_OBJECT_TYPE);
135typedef XGL_RESULT (*OBJ_TRACK_GET_OBJECTS)(XGL_OBJECT_TYPE, XGL_UINT64, OBJTRACK_NODE*);