Blender V5.0
eval_output_gpu.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Foundation
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later
4 *
5 * Author: Sergey Sharybin. */
6
8
10
11#include "gpu_patch_table.hh"
12
13using OpenSubdiv::Osd::PatchArray;
14using OpenSubdiv::Osd::PatchArrayVector;
15
16namespace blender::opensubdiv {
17
18static gpu::StorageBuf *create_patch_array_buffer(const PatchArrayVector &patch_arrays)
19{
20 const size_t patch_array_size = sizeof(PatchArray);
21 const size_t patch_array_byte_size = patch_array_size * patch_arrays.size();
23 patch_array_byte_size, patch_arrays.data(), GPU_USAGE_STATIC, "osd_patch_array");
24 return storage_buf;
25}
26
27GpuEvalOutput::GpuEvalOutput(const StencilTable *vertex_stencils,
28 const StencilTable *varying_stencils,
29 const std::vector<const StencilTable *> &all_face_varying_stencils,
30 const int face_varying_width,
31 const PatchTable *patch_table,
37 GPUComputeEvaluator>(vertex_stencils,
38 varying_stencils,
39 all_face_varying_stencils,
40 face_varying_width,
41 patch_table,
42 evaluator_cache)
43{
44}
45
51
53{
54 GPUPatchTable *patch_table = getFVarPatchTable(face_varying_channel);
55 return create_patch_array_buffer(patch_table->GetFVarPatchArrays(face_varying_channel));
56}
57
58} // namespace blender::opensubdiv
blender::gpu::StorageBuf * GPU_storagebuf_create_ex(size_t size, const void *data, GPUUsageType usage, const char *name)
@ GPU_USAGE_STATIC
PatchArrayVector const & GetFVarPatchArrays(int fvarChannel=0) const
Returns the patch arrays for face-varying index buffer data.
PatchArrayVector const & GetPatchArrays() const
Returns the patch arrays for vertex index buffer data.
GL stencil table (Shader Storage buffer).
gpu::StorageBuf * create_patch_arrays_buf() override
gpu::StorageBuf * create_face_varying_patch_array_buf(const int face_varying_channel) override
GpuEvalOutput(const StencilTable *vertex_stencils, const StencilTable *varying_stencils, const std::vector< const StencilTable * > &all_face_varying_stencils, const int face_varying_width, const PatchTable *patch_table, EvaluatorCache *evaluator_cache=nullptr)
OpenSubdiv::Osd::EvaluatorCacheT< EVALUATOR > EvaluatorCache
VolatileEvalOutput(const StencilTable *vertex_stencils, const StencilTable *varying_stencils, const std::vector< const StencilTable * > &all_face_varying_stencils, const int face_varying_width, const PatchTable *patch_table, EvaluatorCache *evaluator_cache=NULL, void *device_context=NULL)
static gpu::StorageBuf * create_patch_array_buffer(const PatchArrayVector &patch_arrays)