1#pragma once
2
3#include <nn/gfx/detail/gfx_DataContainer.h>
4#include <nn/gfx/gfx_Common.h>
5#include <nn/gfx/gfx_StateData-api.nvn.8.h>
6
7namespace nn::gfx {
8
9class RasterizerStateInfo;
10class BlendStateInfo;
11class DepthStencilStateInfo;
12class VertexStateInfo;
13class TessellationStateInfo;
14class ViewportScissorStateInfo;
15
16namespace detail {
17
18template <>
19class RasterizerStateImpl<ApiVariationNvn8>
20 : public DataContainer<RasterizerStateImplData<ApiVariationNvn8>> {
21public:
22 typedef RasterizerStateInfo InfoType;
23
24 RasterizerStateImpl();
25 ~RasterizerStateImpl();
26
27 void Initialize(DeviceImpl<ApiVariationNvn8>* device, const InfoType& info);
28 void Finalize(DeviceImpl<ApiVariationNvn8>*);
29};
30
31template <>
32class BlendStateImpl<ApiVariationNvn8>
33 : public DataContainer<BlendStateImplData<ApiVariationNvn8>> {
34public:
35 typedef BlendStateInfo InfoType;
36
37 static size_t GetRequiredMemorySize(const InfoType& info);
38
39 BlendStateImpl();
40 ~BlendStateImpl();
41
42 void SetMemory(void* p, size_t s);
43 void* GetMemory();
44 void* GetMemory() const;
45
46 void Initialize(DeviceImpl<ApiVariationNvn8>* device, const InfoType& info);
47 void Finalize(DeviceImpl<ApiVariationNvn8>* device);
48};
49
50template <>
51class DepthStencilStateImpl<ApiVariationNvn8>
52 : public DataContainer<DepthStencilStateImplData<ApiVariationNvn8>> {
53public:
54 typedef DepthStencilStateInfo InfoType;
55
56 DepthStencilStateImpl();
57 ~DepthStencilStateImpl();
58
59 void Initialize(DeviceImpl<ApiVariationNvn8>*, const DepthStencilStateInfo& info);
60 void Finalize(DeviceImpl<ApiVariationNvn8>*);
61};
62
63template <>
64class VertexStateImpl<ApiVariationNvn8>
65 : public DataContainer<VertexStateImplData<ApiVariationNvn8>> {
66public:
67 typedef VertexStateInfo InfoType;
68
69 enum RequiredMemoryInfo { RequiredMemoryInfo_Alignment = 8 };
70
71 VertexStateImpl();
72 ~VertexStateImpl();
73 static size_t GetRequiredMemorySize(const InfoType&);
74 void SetMemory(void*, size_t);
75 void* GetMemory();
76 const void* GetMemory() const;
77 void Initialize(DeviceImpl<ApiVariationNvn8>*, const InfoType&,
78 const ShaderImpl<ApiVariationNvn8>*);
79 void Finalize(DeviceImpl<ApiVariationNvn8>*);
80};
81
82template <>
83class TessellationStateImpl<ApiVariationNvn8>
84 : public DataContainer<TessellationStateImplData<ApiVariationNvn8>> {
85public:
86 typedef TessellationStateInfo InfoType;
87
88 TessellationStateImpl();
89 ~TessellationStateImpl();
90 void Initialize(DeviceImpl<ApiVariationNvn8>*, const InfoType&);
91 void Finalize(DeviceImpl<ApiVariationNvn8>*);
92};
93
94template <>
95class ViewportScissorStateImpl<ApiVariationNvn8>
96 : public DataContainer<ViewportScissorStateImplData<ApiVariationNvn8>> {
97public:
98 typedef ViewportScissorStateInfo InfoType;
99
100 ViewportScissorStateImpl();
101 ~ViewportScissorStateImpl();
102 static size_t GetRequiredMemorySize(const InfoType&);
103 void SetMemory(void*, size_t);
104 void* GetMemory();
105 const void* GetMemory() const;
106 void Initialize(DeviceImpl<ApiVariationNvn8>*, const InfoType&);
107 void Finalize(DeviceImpl<ApiVariationNvn8>*);
108};
109
110} // namespace detail
111} // namespace nn::gfx