Blender Git Loki

Git Commits -> Revision 03013d1

Revision 03013d1 by Kévin Dietrich (master)
October 26, 2021, 16:29 (GMT)
Eevee: support accessing custom mesh attributes

This adds generic attribute rendering support for meshes for Eevee and
Workbench. Each attribute is stored inside of the `MeshBufferList` as a
separate VBO, with a maximum of `GPU_MAX_ATTR` VBOs for consistency with
the GPU shader compilation code.

Since `DRW_MeshCDMask` is not general enough, attribute requests are
stored in new `DRW_AttributeRequest` structures inside of a convenient
`DRW_MeshAttributes` structure. The latter is used in a similar manner
as `DRW_MeshCDMask`, with the `MeshBatchCache` keeping track of needed,
used, and used-over-time attributes. Again, `GPU_MAX_ATTR` is used in
`DRW_MeshAttributes` to prevent too many attributes being used.

To ensure thread-safety when updating the used attributes list, a mutex
is added to the Mesh runtime. This mutex will also be used in the future
for other things when other part of the rendre pre-processing are multi-threaded.

`GPU_BATCH_VBO_MAX_LEN` was increased to 16 in order to accommodate for
this design.

Since `CD_PROP_COLOR` are a valid attribute type, sculpt vertex colors
are now handled using this system to avoid to complicate things. In the
future regular vertex colors will also use this. From this change, bit
operations for DRW_MeshCDMask are now using uint32_t (to match the
representation now used by the compiler).

Due to the difference in behavior for implicit type conversion for scalar types
between OpenGL and what users expect (a scalar `s` is converted to
`vec4(s, 0, 0, 1)` by OpenGL, vs. `vec4(s, s, s, 1)` in Blender's various node graphs) ,
all scalar types are using a float3 internally for now, which increases memory usage.
This will be resolved during or after the EEVEE rewrite as properly handling
this involves much deeper changes.

Ref T85075

Reviewed By: fclem

Maniphest Tasks: T85075

Differential Revision: https://developer.blender.org/D12969

Commit Details:

Full Hash: 03013d19d16704672f9db93bc62547651b6a5cb8
Parent Commit: 8ddfdfd
Lines Changed: +741, -123

1 Added Path:

/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc (+398, -0) (View)

9 Modified Paths:

/source/blender/blenkernel/intern/mesh_runtime.c (+10, -0) (Diff)
/source/blender/draw/CMakeLists.txt (+1, -0) (Diff)
/source/blender/draw/intern/draw_cache_extract.h (+20, -3) (Diff)
/source/blender/draw/intern/draw_cache_extract_mesh.cc (+3, -0) (Diff)
/source/blender/draw/intern/draw_cache_impl_mesh.c (+298, -54) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh.h (+1, -0) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc (+2, -62) (Diff)
/source/blender/gpu/GPU_batch.h (+4, -4) (Diff)
/source/blender/makesdna/DNA_mesh_types.h (+4, -0) (Diff)
Tehnyt: Miika HämäläinenViimeksi päivitetty: 07.11.2014 14:18MiikaH:n Sivut a.k.a. MiikaHweb | 2003-2021