Loading...
Searching...
No Matches
graphicsCmds.h
1//
2// Copyright 2019 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_GRAPHICS_CMDS_H
8#define PXR_IMAGING_HGI_GRAPHICS_CMDS_H
9
10#include "pxr/pxr.h"
11#include "pxr/base/gf/vec4i.h"
12#include "pxr/imaging/hgi/api.h"
13#include "pxr/imaging/hgi/graphicsCmdsDesc.h"
14#include "pxr/imaging/hgi/graphicsPipeline.h"
15#include "pxr/imaging/hgi/resourceBindings.h"
16#include "pxr/imaging/hgi/cmds.h"
17#include <memory>
18
19PXR_NAMESPACE_OPEN_SCOPE
20
21using HgiGraphicsCmdsUniquePtr = std::unique_ptr<class HgiGraphicsCmds>;
22
23
31{
32public:
33 HGI_API
34 ~HgiGraphicsCmds() override;
35
37 HGI_API
38 virtual void PushDebugGroup(const char* label,
39 const GfVec4f& color = s_graphicsDebugColor) = 0;
40
42 HGI_API
43 virtual void PopDebugGroup() = 0;
44
46 HGI_API
47 virtual void InsertDebugMarker(
48 const char* label,
49 const GfVec4f& color = s_markerDebugColor) = 0;
50
52 HGI_API
53 virtual void SetViewport(GfVec4i const& vp) = 0;
54
57 HGI_API
58 virtual void SetScissor(GfVec4i const& sc) = 0;
59
64 HGI_API
65 virtual void BindPipeline(HgiGraphicsPipelineHandle pipeline) = 0;
66
70 HGI_API
71 virtual void BindResources(HgiResourceBindingsHandle resources) = 0;
72
83 HGI_API
84 virtual void SetConstantValues(
86 HgiShaderStage stages,
87 uint32_t bindIndex,
88 uint32_t byteSize,
89 const void* data) = 0;
90
92 HGI_API
93 virtual void BindVertexBuffers(
94 HgiVertexBufferBindingVector const &bindings) = 0;
95
104 HGI_API
105 virtual void Draw(
106 uint32_t vertexCount,
107 uint32_t baseVertex,
108 uint32_t instanceCount,
109 uint32_t baseInstance) = 0;
110
116 // struct IndirectCommand {
117 // uint32_t vertexCount;
118 // uint32_t instanceCount;
119 // uint32_t baseVertex;
120 // uint32_t baseInstance;
121 // }
125 HGI_API
126 virtual void DrawIndirect(
127 HgiBufferHandle const& drawParameterBuffer,
128 uint32_t drawBufferByteOffset,
129 uint32_t drawCount,
130 uint32_t stride) = 0;
131
143 HGI_API
144 virtual void DrawIndexed(
145 HgiBufferHandle const& indexBuffer,
146 uint32_t indexCount,
147 uint32_t indexBufferByteOffset,
148 uint32_t baseVertex,
149 uint32_t instanceCount,
150 uint32_t baseInstance) = 0;
151
158 // struct IndirectCommand {
159 // uint32_t indexCount;
160 // uint32_t instanceCount;
161 // uint32_t baseIndex;
162 // uint32_t baseVertex;
163 // uint32_t baseInstance;
164 // }
165 // struct MetalPatchIndirectCommand {
166 // uint32_t patchCount;
167 // uint32_t instanceCount;
168 // uint32_t patchStart;
169 // uint32_t baseInstance;
170 // }
181 HGI_API
183 HgiBufferHandle const& indexBuffer,
184 HgiBufferHandle const& drawParameterBuffer,
185 uint32_t drawBufferByteOffset,
186 uint32_t drawCount,
187 uint32_t stride,
188 std::vector<uint32_t> const& drawParameterBufferUInt32,
189 uint32_t patchBaseVertexByteOffset) = 0;
190
193 HGI_API
194 virtual void InsertMemoryBarrier(HgiMemoryBarrier barrier) = 0;
195
196protected:
197 HGI_API
199
200private:
201 HgiGraphicsCmds & operator=(const HgiGraphicsCmds&) = delete;
202 HgiGraphicsCmds(const HgiGraphicsCmds&) = delete;
203};
204
205
206
207PXR_NAMESPACE_CLOSE_SCOPE
208
209#endif
Basic type for a vector of 4 float components.
Definition: vec4f.h:46
Basic type for a vector of 4 int components.
Definition: vec4i.h:44
Graphics commands are recorded in 'cmds' objects which are later submitted to hgi.
Definition: cmds.h:29
A graphics API independent abstraction of graphics commands.
Definition: graphicsCmds.h:31
virtual HGI_API void InsertDebugMarker(const char *label, const GfVec4f &color=s_markerDebugColor)=0
Insert a debug marker.
virtual HGI_API void PushDebugGroup(const char *label, const GfVec4f &color=s_graphicsDebugColor)=0
Push a debug scope.
virtual HGI_API void BindVertexBuffers(HgiVertexBufferBindingVector const &bindings)=0
Binds the vertex buffer(s) that describe the vertex attributes.
virtual HGI_API void SetViewport(GfVec4i const &vp)=0
Set viewport [left, BOTTOM, width, height] - OpenGL coords.
virtual HGI_API void DrawIndexed(HgiBufferHandle const &indexBuffer, uint32_t indexCount, uint32_t indexBufferByteOffset, uint32_t baseVertex, uint32_t instanceCount, uint32_t baseInstance)=0
Records a draw command that renders one or more instances of primitives using an indexBuffer starting...
virtual HGI_API void BindPipeline(HgiGraphicsPipelineHandle pipeline)=0
Bind a pipeline state object.
virtual HGI_API void Draw(uint32_t vertexCount, uint32_t baseVertex, uint32_t instanceCount, uint32_t baseInstance)=0
Records a draw command that renders one or more instances of primitives using the number of vertices ...
virtual HGI_API void PopDebugGroup()=0
Pop the last debug scope.
virtual HGI_API void SetConstantValues(HgiGraphicsPipelineHandle pipeline, HgiShaderStage stages, uint32_t bindIndex, uint32_t byteSize, const void *data)=0
Set Push / Function constants.
virtual HGI_API void SetScissor(GfVec4i const &sc)=0
Only pixels that lie within the scissor box are modified by drawing commands.
virtual HGI_API void DrawIndirect(HgiBufferHandle const &drawParameterBuffer, uint32_t drawBufferByteOffset, uint32_t drawCount, uint32_t stride)=0
Records a multi-draw command that reads the draw parameters from a provided drawParameterBuffer.
virtual HGI_API void DrawIndexedIndirect(HgiBufferHandle const &indexBuffer, HgiBufferHandle const &drawParameterBuffer, uint32_t drawBufferByteOffset, uint32_t drawCount, uint32_t stride, std::vector< uint32_t > const &drawParameterBufferUInt32, uint32_t patchBaseVertexByteOffset)=0
Records a indexed multi-draw command that reads the draw parameters from a provided drawParameterBuff...
virtual HGI_API void BindResources(HgiResourceBindingsHandle resources)=0
Bind resources such as textures and uniform buffers.
virtual HGI_API void InsertMemoryBarrier(HgiMemoryBarrier barrier)=0
Inserts a barrier so that data written to memory by commands before the barrier is available to comma...