diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2015-05-05 15:01:37 -0500 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2015-05-05 17:38:54 -0500 |
| commit | ca4025114f64009c9acef75403c473f85582a3ee (patch) | |
| tree | 21334f0e7c6d6f353d4b9361ed1d51d73ce36454 /layers | |
| parent | cb34115f8c64851c12a392c114f59c607dd58db0 (diff) | |
| download | usermoji-ca4025114f64009c9acef75403c473f85582a3ee.tar.xz | |
layers: Use native Vulkan object type definitions
ObjectTracker was using locally-defined object types as the vulkan
ones were unavailable. Replaced them with ones from Vulkan.h.
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/README.md | 2 | ||||
| -rw-r--r-- | layers/object_track.h | 148 |
2 files changed, 64 insertions, 86 deletions
diff --git a/layers/README.md b/layers/README.md index 8198e985..271e6305 100644 --- a/layers/README.md +++ b/layers/README.md @@ -42,7 +42,7 @@ layer/Multi.cpp (name=multi1:multi2) simple example showing multiple layers per (build dir)/layer/api\_dump\_no\_addr.cpp (name=APIDumpNoAddrCpp) - same as above but uses c++ strings and i/o streams ### Print Object Stats -(build dir>/layer/object_track.c (name=ObjectTracker) - Print object CREATE/USE/DESTROY stats. Individually track objects by category. VK\_OBJECT\_TYPE enum defined in object_track.h. If a Dbg callback function is registered, this layer will use callback function(s) for reporting, otherwise uses stdout. Provides custom interface to query number of live objects of given type "VK\_UINT64 objTrackGetObjectCount(VK\_OBJECT\_TYPE type)" and a secondary call to return an array of those objects "VK\_RESULT objTrackGetObjects(VK\_OBJECT\_TYPE type, VK\_UINT64 objCount, OBJTRACK\_NODE* pObjNodeArray)". +(build dir>/layer/object_track.c (name=ObjectTracker) - Print object CREATE/USE/DESTROY stats. Individually track objects by category. VkObjectType enum defined in vulkan.h. If a Dbg callback function is registered, this layer will use callback function(s) for reporting, otherwise uses stdout. Provides custom interface to query number about the total number of objects or of live objects of given type. To get information on all objects, use "VK\_UINT64 objTrackGetObjectsCount()" and the secondary call to return an array of those objects "VK\_RESULT objTrackGetObjects(VK\_UINT64 objCount, OBJTRACK\_NODE\* pObjNodeArray)". For objects of a specific type, use "VK\_UINT64 objTrackGetObjectsOfTypeCount(VkObjectType type)" and the secondary call to return an array of those objects "VK\_RESULT objTrackGetObjectsOfType(VK\_OBJECT\_TYPE type, VK\_UINT64 objCount, OBJTRACK\_NODE\* pObjNodeArray)". ### Report Draw State layer/draw\_state.c (name=DrawState) - DrawState reports the Descriptor Set, Pipeline State, and dynamic state at each Draw call. DrawState layer performs a number of validation checks on this state. Of primary interest is making sure that the resources bound to Descriptor Sets correctly align with the layout specified for the Set. If a Dbg callback function is registered, this layer will use callback function(s) for reporting, otherwise uses stdout. diff --git a/layers/object_track.h b/layers/object_track.h index c9c90059..7697d60a 100644 --- a/layers/object_track.h +++ b/layers/object_track.h @@ -54,136 +54,114 @@ typedef enum _OBJECT_STATUS OBJSTATUS_DEPTH_STENCIL_BOUND = 0x00000010, // Viewport state object has been bound OBJSTATUS_GPU_MEM_MAPPED = 0x00000020, // Memory object is currently mapped } OBJECT_STATUS; -// TODO : Make this code-generated -// Object type enum -typedef enum _VK_OBJECT_TYPE -{ - VkObjectTypeSampler, - VkObjectTypeDynamicDsState, - VkObjectTypeDescriptorSet, - VkObjectTypeDescriptorPool, - VkObjectTypeDynamicCbState, - VkObjectTypeImageView, - VkObjectTypeSemaphore, - VkObjectTypeShader, - VkObjectTypeDescriptorSetLayout, - VkObjectTypePipelineLayout, - VkObjectTypeBuffer, - VkObjectTypePipeline, - VkObjectTypeDevice, - VkObjectTypeQueryPool, - VkObjectTypeEvent, - VkObjectTypeQueue, - VkObjectTypePhysicalDevice, - VkObjectTypeRenderPass, - VkObjectTypeFramebuffer, - VkObjectTypeImage, - VkObjectTypeBufferView, - VkObjectTypeDepthStencilView, - VkObjectTypeInstance, - VkObjectTypeDynamicVpState, - VkObjectTypeColorAttachmentView, - VkObjectTypeDeviceMemory, - VkObjectTypeDynamicRsState, - VkObjectTypeFence, - VkObjectTypeCmdBuffer, - - VkObjectTypeDisplayWSI, - VkObjectTypeSwapChainWSI, - VkObjectTypeSwapChainImageWSI, - VkObjectTypeSwapChainMemoryWSI, - - VkObjectTypeUnknown, - VkNumObjectType, - VkObjectTypeAny, // Allow global object list to be queried/retrieved -} VK_OBJECT_TYPE; -static const char* string_VK_OBJECT_TYPE(VK_OBJECT_TYPE type) { +static const char* string_VkObjectType(VkObjectType type) { switch (type) { - case VkObjectTypeDevice: + case VK_OBJECT_TYPE_DEVICE: return "DEVICE"; - case VkObjectTypePipeline: + case VK_OBJECT_TYPE_PIPELINE: return "PIPELINE"; - case VkObjectTypeFence: + case VK_OBJECT_TYPE_FENCE: return "FENCE"; - case VkObjectTypeDescriptorSetLayout: + case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT: return "DESCRIPTOR_SET_LAYOUT"; - case VkObjectTypeDeviceMemory: + case VK_OBJECT_TYPE_DEVICE_MEMORY: return "DEVICE_MEMORY"; - case VkObjectTypePipelineLayout: + case VK_OBJECT_TYPE_PIPELINE_LAYOUT: return "PIPELINE_LAYOUT"; - case VkObjectTypeQueue: + case VK_OBJECT_TYPE_QUEUE: return "QUEUE"; - case VkObjectTypeImage: + case VK_OBJECT_TYPE_IMAGE: return "IMAGE"; - case VkObjectTypeCmdBuffer: + case VK_OBJECT_TYPE_COMMAND_BUFFER: return "CMD_BUFFER"; - case VkObjectTypeSemaphore: + case VK_OBJECT_TYPE_SEMAPHORE: return "SEMAPHORE"; - case VkObjectTypeFramebuffer: + case VK_OBJECT_TYPE_FRAMEBUFFER: return "FRAMEBUFFER"; - case VkObjectTypeSampler: + case VK_OBJECT_TYPE_SAMPLER: return "SAMPLER"; - case VkObjectTypeColorAttachmentView: + case VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW: return "COLOR_ATTACHMENT_VIEW"; - case VkObjectTypeBufferView: + case VK_OBJECT_TYPE_BUFFER_VIEW: return "BUFFER_VIEW"; - case VkObjectTypeDescriptorSet: + case VK_OBJECT_TYPE_DESCRIPTOR_SET: return "DESCRIPTOR_SET"; - case VkObjectTypePhysicalDevice: + case VK_OBJECT_TYPE_PHYSICAL_DEVICE: return "PHYSICAL_DEVICE"; - case VkObjectTypeImageView: + case VK_OBJECT_TYPE_IMAGE_VIEW: return "IMAGE_VIEW"; - case VkObjectTypeBuffer: + case VK_OBJECT_TYPE_BUFFER: return "BUFFER"; - case VkObjectTypeDynamicRsState: + case VK_OBJECT_TYPE_DYNAMIC_RS_STATE: return "DYNAMIC_RS_STATE_OBJECT"; - case VkObjectTypeEvent: + case VK_OBJECT_TYPE_EVENT: return "EVENT"; - case VkObjectTypeDepthStencilView: + case VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW: return "DEPTH_STENCIL_VIEW"; - case VkObjectTypeShader: + case VK_OBJECT_TYPE_SHADER: return "SHADER"; - case VkObjectTypeDynamicDsState: + case VK_OBJECT_TYPE_DYNAMIC_DS_STATE: return "DYNAMIC_DS_STATE_OBJECT"; - case VkObjectTypeDynamicVpState: + case VK_OBJECT_TYPE_DYNAMIC_VP_STATE: return "DYNAMIC_VP_STATE_OBJECT"; - case VkObjectTypeDynamicCbState: + case VK_OBJECT_TYPE_DYNAMIC_CB_STATE: return "DYNAMIC_CB_STATE_OBJECT"; - case VkObjectTypeInstance: + case VK_OBJECT_TYPE_INSTANCE: return "INSTANCE"; - case VkObjectTypeRenderPass: + case VK_OBJECT_TYPE_RENDER_PASS: return "RENDER_PASS"; - case VkObjectTypeQueryPool: + case VK_OBJECT_TYPE_QUERY_POOL: return "QUERY_POOL"; - case VkObjectTypeDescriptorPool: + case VK_OBJECT_TYPE_DESCRIPTOR_POOL: return "DESCRIPTOR_POOL"; + default: + return NULL; + } +} - case VkObjectTypeDisplayWSI: +static const char* string_VK_OBJECT_TYPE_WSI(uint32_t type) { + switch (type) + { + case VK_OBJECT_TYPE_DISPLAY_WSI: return "DISPLAY_WSI"; - case VkObjectTypeSwapChainWSI: + case VK_OBJECT_TYPE_SWAP_CHAIN_WSI: return "SWAP_CHAIN_WSI"; - case VkObjectTypeSwapChainImageWSI: - return "SWAP_CHAIN_IMAGE_WSI"; - case VkObjectTypeSwapChainMemoryWSI: - return "SWAP_CHAIN_MEMORY_WSI"; default: - return "UNKNOWN"; + return NULL; + } +} + +static const char* string_from_vulkan_object_type(uint32_t type) { + const char *vkEnumString = string_VkObjectType((VkObjectType)type); + if (vkEnumString != NULL) { + return vkEnumString; + } + else { + vkEnumString = string_VK_OBJECT_TYPE_WSI(type); + if (vkEnumString != NULL) { + return vkEnumString; + } } + return "Unknown"; } typedef struct _OBJTRACK_NODE { VkObject vkObj; - VK_OBJECT_TYPE objType; + VkObjectType objType; uint64_t numUses; OBJECT_STATUS status; } OBJTRACK_NODE; // prototype for extension functions -uint64_t objTrackGetObjectCount(VK_OBJECT_TYPE type); -VkResult objTrackGetObjects(VK_OBJECT_TYPE type, uint64_t objCount, OBJTRACK_NODE* pObjNodeArray); +uint64_t objTrackGetObjectsCount(void); +VkResult objTrackGetObjects(uint64_t objCount, OBJTRACK_NODE* pObjNodeArray); +uint64_t objTrackGetObjectsOfTypeCount(VkObjectType type); +VkResult objTrackGetObjectsOfType(VkObjectType type, uint64_t objCount, OBJTRACK_NODE* pObjNodeArray); // Func ptr typedefs -typedef uint64_t (*OBJ_TRACK_GET_OBJECT_COUNT)(VK_OBJECT_TYPE); -typedef VkResult (*OBJ_TRACK_GET_OBJECTS)(VK_OBJECT_TYPE, uint64_t, OBJTRACK_NODE*); +typedef uint64_t (*OBJ_TRACK_GET_OBJECTS_COUNT)(void); +typedef VkResult (*OBJ_TRACK_GET_OBJECTS)(uint64_t, OBJTRACK_NODE*); +typedef uint64_t (*OBJ_TRACK_GET_OBJECTS_OF_TYPE_COUNT)(VkObjectType); +typedef VkResult (*OBJ_TRACK_GET_OBJECTS_OF_TYPE)(VkObjectType, uint64_t, OBJTRACK_NODE*); |
