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
123
124 size_t DedicatedVideoMemory = unknownAmount;
125 size_t DedicatedSystemMemory = unknownAmount;
126 size_t SharedSystemMemory = unknownAmount;
127
128 bool CheckFeatureLevel(int major, int minor) const
129 {
130 if(major > featureLevelMajor) return true;
131 if(major == featureLevelMajor && minor >= featureLevelMinor) return true;
132 return false;
133 }
134 };
135
141 {
147 virtual Vendors::EVendors getVendor() const { return Vendors::Unknown; }
148
154 virtual Series::ESeries getSeries() const { return Series::Unknown; }
155
161 virtual int getModel() const { return UnknownModel; };
162
168 virtual bool supportsInstancing() const { return false; };
169
175 virtual int getMaxTextureSlots() const { return 0; }
176
182 virtual const GraphicsDeviceCapabilities & getDeviceCapabilities() const { return none; }
183
184 private:
186 };
187}
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