Cogs.Core
ICapabilities.h
1#pragma once
2
3#include <stddef.h>
4#include <stdint.h>
5
6namespace Cogs
7{
11 struct Vendors
12 {
14 {
25 };
26 };
27
31 struct Series
32 {
34 {
37 // AMD
44 // nVidia,
57 };
58 };
59
61 static int UnknownModel = -1;
62
67 {
68 static constexpr size_t unknownAmount = ~static_cast<size_t>(0);
69
70 int featureLevelMajor = -1;
71 int featureLevelMinor = -1;
72
73 int MaxTextureSlots = 0;
74 int MaxVertexInputElements = 32;
75 unsigned MaxSamples = 8;
76 unsigned MaxMultiViews = 0;
77 float MaxAnisotropy = 1.f;
79
80 uint32_t MaxTexture2DSize = 16384;
81 uint32_t MaxTexture3DSize = 2048;
82 uint32_t MaxTextureCubeSize = 16384;
83 uint32_t MaxTextureArrayLayers = 2048;
84
85 bool RenderPass = false;
86 bool SyncObjects = false;
87 bool GeometryShaders = false;
88 bool TessellationShaders = false;
89 bool ComputeShaders = false;
90 bool ConstantBufferRange = false;
92 bool SupportsHlsl = true;
93 bool Instancing = true;
94 bool StartInstance = true;
95 bool UnsignedIntIndexes = true;
96 bool FloatTextures = true;
97 bool TextureCompressionS3TC = false;
98 bool TextureCompressionRGTC = false;
99 bool TextureCompressionBPTC = false;
100 bool TextureCompressionETC = false;
101 bool TextureCompressionPVRTC = false;
102 bool TextureCompressionASTC = false;
103 bool FragDepth = true;
104 bool VertexAndIndexDataInSharedBuffers = true;
105 bool SupportsMultipleThreads = true;
106 bool TextureCubeArrays = true;
107 bool VertexArrayObjects = false;
108 bool MultiView = false;
109 bool MultiSampleMultiView = false;
110 bool OriginOnTop = true;
112 bool NoDepthClip = false;
113
124
125 size_t DedicatedVideoMemory = unknownAmount;
126 size_t DedicatedSystemMemory = unknownAmount;
127 size_t SharedSystemMemory = unknownAmount;
128
129 bool CheckFeatureLevel(int major, int minor) const
130 {
131 if(major > featureLevelMajor) return true;
132 if(major == featureLevelMajor && minor >= featureLevelMinor) return true;
133 return false;
134 }
135 };
136
142 {
148 virtual Vendors::EVendors getVendor() const { return Vendors::Unknown; }
149
155 virtual Series::ESeries getSeries() const { return Series::Unknown; }
156
162 virtual int getModel() const { return UnknownModel; };
163
169 virtual bool supportsInstancing() const { return false; };
170
176 virtual int getMaxTextureSlots() const { return 0; }
177
183 virtual const GraphicsDeviceCapabilities & getDeviceCapabilities() const { return none; }
184
185 private:
187 };
188}
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
Contains device capabilities.
Definition: ICapabilities.h:67
bool DefaultColorTargetHasLinearEncoding
Encoding of default color target.
bool DepthNegativeOneToOne
If true, min z depth=-1 otherwise it is min z depth = 0 (max z depth = 1).
bool FragDepth
Allows setting fragdepth in fragment shader.
uint32_t MaxTexture3DSize
Using D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION as default.
Definition: ICapabilities.h:81
bool IndependentSamplerState
Sampler state not tied to a texture unit (hlsl style)
Definition: ICapabilities.h:91
bool OriginOnTop
If true, y=0 refers to top of screen, otherwise it refers to bottom.
uint32_t MaxTexture2DSize
Using D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION as default.
Definition: ICapabilities.h:80
bool SyncObjects
Support for syncronization objects.
Definition: ICapabilities.h:86
uint32_t MaxTextureCubeSize
Using D3D11_REQ_TEXTURECUBE_DIMENSION as default.
Definition: ICapabilities.h:82
bool Instancing
Supports instanced draw calls.
Definition: ICapabilities.h:93
bool VertexArrayObjects
Supports binding input geometry using GL vertex array objects.
uint32_t MaxTextureArrayLayers
Using D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION as default.
Definition: ICapabilities.h:83
bool TextureCubeArrays
supports texture cube arrays.
bool StartInstance
Supports non-zero start instance in instanced draw calls.
Definition: ICapabilities.h:94
unsigned ConstantBufferOffsetAlignment
Minimum offset alignment when binding constant buffers.
Definition: ICapabilities.h:78
bool ConstantBufferRange
supports binding a range of a constant buffer.
Definition: ICapabilities.h:90
Provides capability query functionality.
virtual int getModel() const
Gets the model number of the initialized graphics device.
virtual const GraphicsDeviceCapabilities & getDeviceCapabilities() const
Gets the device capabilities in a structure.
virtual bool supportsInstancing() const
Check if the graphics device supports instancing.
virtual Vendors::EVendors getVendor() const
Gets the known vendor of the initialized graphics device.
virtual Series::ESeries getSeries() const
Gets the series of GPUs the currently initialized graphics device belongs to.
virtual int getMaxTextureSlots() const
Gets maximum number of supported texture slots.
Known graphics device series.
Definition: ICapabilities.h:32
@ Unknown
Unknown series.
Definition: ICapabilities.h:36
@ HD
Intel HD.
Definition: ICapabilities.h:52
@ QuadroFX
nVidia Quadro FX professional graphics adapters.
Definition: ICapabilities.h:50
@ Iris
Intel Iris.
Definition: ICapabilities.h:54
@ IrisPro
Intel Iris Pro.
Definition: ICapabilities.h:56
@ FireGL
AMD FireGL series.
Definition: ICapabilities.h:43
@ geForce
nVidia geForce consumer adapters.
Definition: ICapabilities.h:46
@ RadeonX
AMD Radeon X series.
Definition: ICapabilities.h:39
@ RadeonHD
AMD Radeon HD series.
Definition: ICapabilities.h:41
@ Quadro
nVidia Quadro professional graphics adapters.
Definition: ICapabilities.h:48
Known graphics device vendors.
Definition: ICapabilities.h:12
@ Apple
Apple silicon.
Definition: ICapabilities.h:24
@ nVidia
nVidia Corporation.
Definition: ICapabilities.h:20
@ Unknown
Unknown device vendor.
Definition: ICapabilities.h:16