capabilities.h
1 //
2 // Copyright 2021 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 #ifndef PXR_IMAGING_HGI_CAPABILITIES_H
8 #define PXR_IMAGING_HGI_CAPABILITIES_H
9 
10 #include "pxr/pxr.h"
11 #include "pxr/imaging/hgi/api.h"
12 #include "pxr/imaging/hgi/enums.h"
13 
14 #include <cstddef>
15 
16 PXR_NAMESPACE_OPEN_SCOPE
17 
23 {
24 public:
25  HGI_API
26  virtual ~HgiCapabilities() = 0;
27 
28  bool IsSet(HgiDeviceCapabilities mask) const {
29  return (_flags & mask) != 0;
30  }
31 
32  HGI_API
33  virtual int GetAPIVersion() const = 0;
34 
35  HGI_API
36  virtual int GetShaderVersion() const = 0;
37 
38  HGI_API
39  size_t GetMaxUniformBlockSize() const {
40  return _maxUniformBlockSize;
41  }
42 
43  HGI_API
44  size_t GetMaxShaderStorageBlockSize() const {
45  return _maxShaderStorageBlockSize;
46  }
47 
48  HGI_API
49  size_t GetUniformBufferOffsetAlignment() const {
50  return _uniformBufferOffsetAlignment;
51  }
52 
53  HGI_API
54  size_t GetMaxClipDistances() const {
55  return _maxClipDistances;
56  }
57 
58  HGI_API
59  size_t GetPageSizeAlignment() const {
60  return _pageSizeAlignment;
61  }
62 
63  HGI_API
64  size_t GetMaxSamplersPerShaderStage() const {
65  return _maxSamplersPerShaderStage;
66  }
67 
68 protected:
70  : _maxUniformBlockSize(0)
71  , _maxShaderStorageBlockSize(0)
72  , _uniformBufferOffsetAlignment(0)
73  , _maxClipDistances(0)
74  , _pageSizeAlignment(1)
75  , _maxSamplersPerShaderStage(0)
76  , _flags(0)
77  {}
78 
79  void _SetFlag(HgiDeviceCapabilities mask, bool value) {
80  if (value) {
81  _flags |= mask;
82  } else {
83  _flags &= ~mask;
84  }
85  }
86 
87  size_t _maxUniformBlockSize;
88  size_t _maxShaderStorageBlockSize;
89  size_t _uniformBufferOffsetAlignment;
90  size_t _maxClipDistances;
91  size_t _pageSizeAlignment;
92  size_t _maxSamplersPerShaderStage;
93 
94 private:
95  HgiCapabilities & operator=(const HgiCapabilities&) = delete;
96  HgiCapabilities(const HgiCapabilities&) = delete;
97 
98  HgiDeviceCapabilities _flags;
99 };
100 
101 PXR_NAMESPACE_CLOSE_SCOPE
102 
103 #endif
Reports the capabilities of the Hgi device.
Definition: capabilities.h:22