aboutsummaryrefslogtreecommitdiff
path: root/demo/d3d12/NvCoDxFormatUtil.h
blob: e749ea8645dd12e772709a27daf4ea875866308b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#ifndef NV_CO_DX_FORMAT_UTIL_H
#define NV_CO_DX_FORMAT_UTIL_H

#define NOMINMAX
#include <dxgi.h>

namespace nvidia { 
namespace Common {

struct DxFormatUtil
{
	enum UsageType
	{
		USAGE_UNKNOWN,						///< Generally used to mark an error
		USAGE_TARGET,						///< Format should be used when written as target
		USAGE_DEPTH_STENCIL,				///< Format should be used when written as depth stencil	
		USAGE_SRV,							///< Format if being read as srv
		USAGE_COUNT_OF,
	};
	enum UsageFlag
	{
		USAGE_FLAG_MULTI_SAMPLE = 0x1,
		USAGE_FLAG_SRV = 0x2,
	};

		/// Given the usage, flags, and format will return the most suitable format. Will return DXGI_UNKNOWN if combination is not possible
	static DXGI_FORMAT calcFormat(UsageType usage, DXGI_FORMAT format);
		/// Calculate appropriate format for creating a buffer for usage and flags
	static DXGI_FORMAT calcResourceFormat(UsageType usage, int usageFlags, DXGI_FORMAT format);
		/// True if the type is 'typeless'
	static bool isTypeless(DXGI_FORMAT format);

		/// Returns number of bits used for color channel for format (for channels with multiple sizes, returns smallest ie RGB565 -> 5)
	static int getNumColorChannelBits(DXGI_FORMAT fmt);

};

} // namespace Common 
} // namespace nvidia 

#endif // NV_CO_DX12_RESOURCE_H