ops.h
1 //
2 // Copyright 2020 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_HGIGL_OPS_H
8 #define PXR_IMAGING_HGIGL_OPS_H
9 
10 #include "pxr/pxr.h"
11 #include "pxr/base/gf/vec4i.h"
12 
13 #include "pxr/imaging/hgi/buffer.h"
14 #include "pxr/imaging/hgi/blitCmdsOps.h"
15 #include "pxr/imaging/hgi/graphicsCmdsDesc.h"
16 #include "pxr/imaging/hgi/graphicsPipeline.h"
17 #include "pxr/imaging/hgi/resourceBindings.h"
18 
19 #include "pxr/imaging/hgiGL/api.h"
20 #include "pxr/imaging/hgiGL/device.h"
21 
22 #include <cstdint>
23 #include <functional>
24 #include <vector>
25 
26 PXR_NAMESPACE_OPEN_SCOPE
27 
28 using HgiGLOpsFn = std::function<void(void)>;
29 
53 class HgiGLOps
54 {
55 public:
56  HGIGL_API
57  static HgiGLOpsFn PushDebugGroup(const char* label,
58  const GfVec4f& color = GfVec4f(0.0));
59 
60  HGIGL_API
61  static HgiGLOpsFn PopDebugGroup();
62 
63  HGIGL_API
64  static HgiGLOpsFn InsertDebugMarker(const char* label);
65 
66  HGIGL_API
67  static HgiGLOpsFn CopyTextureGpuToCpu(HgiTextureGpuToCpuOp const& copyOp);
68 
69  HGIGL_API
70  static HgiGLOpsFn CopyTextureCpuToGpu(HgiTextureCpuToGpuOp const& copyOp);
71 
72  HGIGL_API
73  static HgiGLOpsFn CopyBufferGpuToGpu(HgiBufferGpuToGpuOp const& copyOp);
74 
75  HGIGL_API
76  static HgiGLOpsFn CopyBufferCpuToGpu(HgiBufferCpuToGpuOp const& copyOp);
77 
78  HGIGL_API
79  static HgiGLOpsFn CopyBufferGpuToCpu(HgiBufferGpuToCpuOp const& copyOp);
80 
81  HGIGL_API
82  static HgiGLOpsFn CopyTextureToBuffer(HgiTextureToBufferOp const& copyOp);
83 
84  HGIGL_API
85  static HgiGLOpsFn CopyBufferToTexture(HgiBufferToTextureOp const& copyOp);
86 
87  HGIGL_API
88  static HgiGLOpsFn ResolveFramebuffer(
89  HgiGLDevice* device,
90  HgiGraphicsCmdsDesc const &graphicsCmds);
91 
92  HGIGL_API
93  static HgiGLOpsFn SetViewport(GfVec4i const& vp);
94 
95  HGIGL_API
96  static HgiGLOpsFn SetScissor(GfVec4i const& sc);
97 
98  HGIGL_API
99  static HgiGLOpsFn BindPipeline(HgiGraphicsPipelineHandle pipeline);
100 
101  HGIGL_API
102  static HgiGLOpsFn BindPipeline(HgiComputePipelineHandle pipeline);
103 
104  HGIGL_API
105  static HgiGLOpsFn BindResources(HgiResourceBindingsHandle resources);
106 
107  HGIGL_API
108  static HgiGLOpsFn SetConstantValues(
109  HgiGraphicsPipelineHandle pipeline,
110  HgiShaderStage stages,
111  uint32_t bindIndex,
112  uint32_t byteSize,
113  const void* data);
114 
115  HGIGL_API
116  static HgiGLOpsFn SetConstantValues(
117  HgiComputePipelineHandle pipeline,
118  uint32_t bindIndex,
119  uint32_t byteSize,
120  const void* data);
121 
122  HGIGL_API
123  static HgiGLOpsFn BindVertexBuffers(
124  HgiVertexBufferBindingVector const &bindings);
125 
126  HGIGL_API
127  static HgiGLOpsFn Draw(
128  HgiPrimitiveType primitiveType,
129  uint32_t primitiveIndexSize,
130  uint32_t vertexCount,
131  uint32_t baseVertex,
132  uint32_t instanceCount,
133  uint32_t baseInstance);
134 
135  HGIGL_API
136  static HgiGLOpsFn DrawIndirect(
137  HgiPrimitiveType primitiveType,
138  uint32_t primitiveIndexSize,
139  HgiBufferHandle const& drawParameterBuffer,
140  uint32_t drawBufferByteOffset,
141  uint32_t drawCount,
142  uint32_t stride);
143 
144  HGIGL_API
145  static HgiGLOpsFn DrawIndexed(
146  HgiPrimitiveType primitiveType,
147  uint32_t primitiveIndexSize,
148  HgiBufferHandle const& indexBuffer,
149  uint32_t indexCount,
150  uint32_t indexBufferByteOffset,
151  uint32_t baseVertex,
152  uint32_t instanceCount,
153  uint32_t baseInstance);
154 
155  HGIGL_API
156  static HgiGLOpsFn DrawIndexedIndirect(
157  HgiPrimitiveType primitiveType,
158  uint32_t primitiveIndexSize,
159  HgiBufferHandle const& indexBuffer,
160  HgiBufferHandle const& drawParameterBuffer,
161  uint32_t drawBufferByteOffset,
162  uint32_t drawCount,
163  uint32_t stride);
164 
165  HGIGL_API
166  static HgiGLOpsFn BindFramebufferOp(
167  HgiGLDevice* device,
168  HgiGraphicsCmdsDesc const& desc);
169 
170  HGIGL_API
171  static HgiGLOpsFn Dispatch(int dimX, int dimY);
172 
173  HGIGL_API
174  static HgiGLOpsFn FillBuffer(HgiBufferHandle const& buffer, uint8_t value);
175 
176  HGIGL_API
177  static HgiGLOpsFn GenerateMipMaps(HgiTextureHandle const& texture);
178 
179  HGIGL_API
180  static HgiGLOpsFn InsertMemoryBarrier(HgiMemoryBarrier barrier);
181 
182 };
183 
184 PXR_NAMESPACE_CLOSE_SCOPE
185 
186 #endif
Basic type for a vector of 4 int components.
Definition: vec4i.h:45
Describes the properties needed to copy buffer data from CPU to GPU.
Definition: blitCmdsOps.h:173
Describes the properties needed to copy GPU buffer data into a GPU texture.
Definition: blitCmdsOps.h:297
Describes the properties needed to copy texture data from GPU to CPU.
Definition: blitCmdsOps.h:50
OpenGL implementation of GPU device.
Definition: device.h:29
Describes the properties to begin a HgiGraphicsCmds.
Basic type for a vector of 4 float components.
Definition: vec4f.h:47
Describes the properties needed to copy buffer data from GPU to CPU.
Definition: blitCmdsOps.h:213
Describes the properties needed to copy texture data from CPU to GPU.
Definition: blitCmdsOps.h:93
Describes the properties needed to copy buffer data from GPU to GPU.
Definition: blitCmdsOps.h:133
Describes the properties needed to copy GPU texture data into a GPU buffer.
Definition: blitCmdsOps.h:253
A collection of functions used by cmds objects to do deferred cmd recording.
Definition: ops.h:53