1867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos#ifndef _VKDEBUGREPORTUTIL_HPP
2867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos#define _VKDEBUGREPORTUTIL_HPP
3867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos/*-------------------------------------------------------------------------
4867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos * Vulkan CTS Framework
5867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos * --------------------
6867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos *
7867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos * Copyright (c) 2016 Google Inc.
8867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos *
955378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos * Licensed under the Apache License, Version 2.0 (the "License");
1055378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos * you may not use this file except in compliance with the License.
1155378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos * You may obtain a copy of the License at
12867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos *
1355378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos *      http://www.apache.org/licenses/LICENSE-2.0
14867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos *
1555378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos * Unless required by applicable law or agreed to in writing, software
1655378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos * distributed under the License is distributed on an "AS IS" BASIS,
1755378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1855378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos * See the License for the specific language governing permissions and
1955378cabd32d93151fe0396bb98fe457d70d201fPyry Haulos * limitations under the License.
20867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos *
21867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos *//*!
22867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos * \file
23867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos * \brief VK_EXT_debug_report utilities
24867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos *//*--------------------------------------------------------------------*/
25867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
26867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos#include "vkDefs.hpp"
27867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos#include "vkRef.hpp"
28867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos#include "deAppendList.hpp"
29867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
30867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos#include <ostream>
31867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
32867246e525603a3242a91ce52cada18406bd1a05Pyry Haulosnamespace vk
33867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos{
34867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
35867246e525603a3242a91ce52cada18406bd1a05Pyry Haulosstruct DebugReportMessage
36867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos{
37867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	VkDebugReportFlagsEXT		flags;
38867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	VkDebugReportObjectTypeEXT	objectType;
39867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	deUint64					object;
40867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	size_t						location;
41867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	deInt32						messageCode;
42867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	std::string					layerPrefix;
43867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	std::string					message;
44867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
45867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	DebugReportMessage (void)
46867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		: flags			(0)
47867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, objectType	((VkDebugReportObjectTypeEXT)0)
48867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, object		(0)
49867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, location		(0)
50867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, messageCode	(0)
51867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	{}
52867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
53867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	DebugReportMessage (VkDebugReportFlagsEXT		flags_,
54867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos						VkDebugReportObjectTypeEXT	objectType_,
55867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos						deUint64					object_,
56867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos						size_t						location_,
57867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos						deInt32						messageCode_,
58867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos						const std::string&			layerPrefix_,
59867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos						const std::string&			message_)
60867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		: flags			(flags_)
61867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, objectType	(objectType_)
62867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, object		(object_)
63867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, location		(location_)
64867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, messageCode	(messageCode_)
65867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, layerPrefix	(layerPrefix_)
66867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos		, message		(message_)
67867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	{}
68867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos};
69867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
70867246e525603a3242a91ce52cada18406bd1a05Pyry Haulosstd::ostream&	operator<<	(std::ostream& str, const DebugReportMessage& message);
71867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
72867246e525603a3242a91ce52cada18406bd1a05Pyry Haulosclass DebugReportRecorder
73867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos{
74867246e525603a3242a91ce52cada18406bd1a05Pyry Haulospublic:
75867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	typedef de::AppendList<DebugReportMessage>	MessageList;
76867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
77867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos											DebugReportRecorder		(const InstanceInterface& vki, VkInstance instance);
78867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos											~DebugReportRecorder	(void);
79867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
80867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	const MessageList&						getMessages				(void) const { return m_messages; }
81867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	void									clearMessages			(void) { m_messages.clear(); }
82867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
83867246e525603a3242a91ce52cada18406bd1a05Pyry Haulosprivate:
84867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	MessageList								m_messages;
85867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos	const Unique<VkDebugReportCallbackEXT>	m_callback;
86867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos};
87867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
88501ac7ba5259b7e9f6d107fe1bed304886ef7e12Pyry Haulosbool	isDebugReportSupported		(const PlatformInterface& vkp);
89501ac7ba5259b7e9f6d107fe1bed304886ef7e12Pyry Haulos
90867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos} // vk
91867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos
92867246e525603a3242a91ce52cada18406bd1a05Pyry Haulos#endif // _VKDEBUGREPORTUTIL_HPP
93