1#pragma once
2
3#include <nn/gfx/detail/gfx_DataContainer.h>
4#include <nn/gfx/gfx_CommandBufferData-api.nvn.8.h>
5#include <nn/gfx/gfx_Common.h>
6#include <nn/gfx/gfx_Enum.h>
7
8namespace nn::gfx {
9
10class CommandBufferInfo;
11class GpuAddress;
12class TextureSubresource;
13class TextureCopyRegion;
14class BufferTextureCopyRegion;
15class TextureArrayRange;
16class TextureSubresourceRange;
17class DescriptorSlot;
18class ViewportStateInfo;
19class ScissorStateInfo;
20
21namespace detail {
22
23template <>
24class CommandBufferImpl<ApiVariationNvn8>
25 : public DataContainer<CommandBufferImplData<ApiVariationNvn8>> {
26 NN_NO_COPY(CommandBufferImpl);
27
28public:
29 typedef CommandBufferInfo InfoType;
30
31 typedef void (*OutOfMemoryEventCallback)(TCommandBuffer<ApiVariationNvn8>*,
32 const OutOfMemoryEventArg&);
33
34 static size_t GetCommandMemoryAlignment(DeviceImpl<ApiVariationNvn8>*);
35 static size_t GetControlMemoryAlignment(DeviceImpl<ApiVariationNvn8>*);
36
37 CommandBufferImpl();
38 ~CommandBufferImpl();
39
40 void Initialize(DeviceImpl<ApiVariationNvn8>*, const InfoType&);
41 void Finalize(DeviceImpl<ApiVariationNvn8>*);
42
43 void AddCommandMemory(MemoryPoolImpl<ApiVariationNvn8>*, ptrdiff_t, size_t);
44 void AddControlMemory(void*, size_t);
45
46 void SetOutOfCommandMemoryEventCallback(OutOfMemoryEventCallback);
47 void SetOutOfControlMemoryEventCallback(OutOfMemoryEventCallback);
48
49 void Reset();
50 void Begin();
51 void End();
52 void Dispatch(int, int, int);
53
54 void Draw(PrimitiveTopology, int, int);
55 void Draw(PrimitiveTopology, int, int, int, int);
56 void DrawIndexed(PrimitiveTopology, IndexFormat, const GpuAddress&, int, int);
57 void DrawIndexed(PrimitiveTopology, IndexFormat, const GpuAddress&, int, int, int, int);
58 void DispatchIndirect(const GpuAddress&);
59 void DrawIndirect(PrimitiveTopology, const GpuAddress&);
60 void DrawIndexedIndirect(PrimitiveTopology, IndexFormat, const GpuAddress&, const GpuAddress&);
61
62 void SetPipeline(const PipelineImpl<ApiVariationNvn8>*);
63 void SetRenderTargets(int, const ColorTargetViewImpl<ApiVariationNvn8>* const*,
64 const DepthStencilViewImpl<ApiVariationNvn8>*);
65 void SetVertexBuffer(int, const GpuAddress&, ptrdiff_t, size_t);
66 void SetViewportScissorState(const ViewportScissorStateImpl<ApiVariationNvn8>*);
67
68 void CopyBuffer(BufferImpl<ApiVariationNvn8>*, ptrdiff_t, const BufferImpl<ApiVariationNvn8>*,
69 ptrdiff_t, size_t);
70 void CopyImage(TextureImpl<ApiVariationNvn8>*, const TextureSubresource&, int, int, int,
71 const TextureImpl<ApiVariationNvn8>*, const TextureCopyRegion&);
72 void CopyBufferToImage(TextureImpl<ApiVariationNvn8>*, const BufferImpl<ApiVariationNvn8>*,
73 const BufferTextureCopyRegion&);
74 void CopyBufferToImage(TextureImpl<ApiVariationNvn8>*, const TextureCopyRegion&,
75 const BufferImpl<ApiVariationNvn8>*, ptrdiff_t);
76 void CopyImageToBuffer(BufferImpl<ApiVariationNvn8>*, const TextureImpl<ApiVariationNvn8>*,
77 const BufferTextureCopyRegion&);
78 void CopyImageToBuffer(BufferImpl<ApiVariationNvn8>*, ptrdiff_t,
79 const TextureImpl<ApiVariationNvn8>*, const TextureCopyRegion&);
80 void BlitImage(TextureImpl<ApiVariationNvn8>*, const TextureCopyRegion&,
81 const TextureImpl<ApiVariationNvn8>*, const TextureCopyRegion&, int);
82 void ClearBuffer(BufferImpl<ApiVariationNvn8>*, ptrdiff_t, size_t, uint32_t);
83 void ClearColor(ColorTargetViewImpl<ApiVariationNvn8>*, float, float, float, float,
84 const TextureArrayRange*);
85 void ClearColorTarget(ColorTargetViewImpl<ApiVariationNvn8>*, const ClearColorValue&,
86 const TextureArrayRange*);
87 void ClearDepthStencil(DepthStencilViewImpl<ApiVariationNvn8>*, float, int,
88 DepthStencilClearMode, const TextureArrayRange*);
89
90 void Resolve(TextureImpl<ApiVariationNvn8>*, int, int,
91 const ColorTargetViewImpl<ApiVariationNvn8>*, const TextureArrayRange*);
92 void FlushMemory(int);
93 void InvalidateMemory(int);
94
95 void CallCommandBuffer(const CommandBufferImpl<ApiVariationNvn8>*);
96 void CopyCommandBuffer(const CommandBufferImpl<ApiVariationNvn8>*);
97
98 void SetBufferStateTransition(BufferImpl<ApiVariationNvn8>*, int, int, int, int);
99 void SetTextureStateTransition(TextureImpl<ApiVariationNvn8>*, const TextureSubresourceRange*,
100 int, int, int, int);
101 void SetDescriptorPool(const DescriptorPoolImpl<ApiVariationNvn8>*);
102 void SetRootSignature(PipelineType, RootSignatureImpl<ApiVariationNvn8>*);
103 void SetRootBufferDescriptorTable(PipelineType, int, const DescriptorSlot&);
104 void SetRootTextureAndSamplerDescriptorTable(PipelineType, int, const DescriptorSlot&,
105 const DescriptorSlot&);
106 void SetRootConstantBuffer(PipelineType, int, const GpuAddress&, size_t);
107 void SetRootUnorderedAccessBuffer(PipelineType, int, const GpuAddress&, size_t);
108 void SetRootTextureAndSampler(PipelineType, int, const TextureViewImpl<ApiVariationNvn8>*,
109 const SamplerImpl<ApiVariationNvn8>*);
110
111 void BeginQuery(QueryTarget);
112 void EndQuery(const GpuAddress&, QueryTarget);
113 void WriteTimestamp(const GpuAddress&);
114
115 void SetDepthBounds(float, float);
116 void SetLineWidth(float);
117 void SetViewports(int, int, const ViewportStateInfo*);
118 void SetScissors(int, int, const ScissorStateInfo*);
119
120 void SetConstantBuffer(int, ShaderStage, const DescriptorSlot&);
121 void SetUnorderedAccessBuffer(int, ShaderStage, const DescriptorSlot&);
122 void SetTextureAndSampler(int, ShaderStage, const DescriptorSlot&, const DescriptorSlot&);
123 void SetTexture(int, ShaderStage, const DescriptorSlot&);
124 void SetImage(int, ShaderStage, const DescriptorSlot&);
125
126 void SetConstantBuffer(int, ShaderStage, const GpuAddress&, size_t);
127 void SetUnorderedAccessBuffer(int, ShaderStage, const GpuAddress&, size_t);
128 void SetTextureAndSampler(int, ShaderStage, const TextureViewImpl<ApiVariationNvn8>*,
129 const SamplerImpl<ApiVariationNvn8>*);
130 void SetImage(int, ShaderStage, const TextureViewImpl<ApiVariationNvn8>*);
131
132 void SetShader(const ShaderImpl<ApiVariationNvn8>*, int);
133 void SetRasterizerState(const RasterizerStateImpl<ApiVariationNvn8>*);
134 void SetBlendState(const BlendStateImpl<ApiVariationNvn8>*);
135 void SetDepthStencilState(const DepthStencilStateImpl<ApiVariationNvn8>*);
136 void SetVertexState(const VertexStateImpl<ApiVariationNvn8>*);
137 void SetTessellationState(const TessellationStateImpl<ApiVariationNvn8>*);
138};
139
140} // namespace detail
141
142} // namespace nn::gfx
143