Metal: TF more optimal for hair refinement
Patch prefers usage of Transform Feedback for hair refinement as opposed to compute, as vertex work can be pipelined with existing rendering work which is in-flight. This approach is ~20% faster depending on the scene. Note that the current implementation only uses TF, as storage buffer support is disabled. Though once storage buffer support is added, we should still use the TF path. Authored by Apple: Michael Parkin-White Pull Request: https://projects.blender.org/blender/blender/pulls/107166
This commit is contained in:
committed by
Jeroen Bakker
parent
bebb17a973
commit
3650b36141
@@ -33,7 +33,12 @@
|
||||
|
||||
BLI_INLINE eParticleRefineShaderType drw_curves_shader_type_get()
|
||||
{
|
||||
if (GPU_compute_shader_support() && GPU_shader_storage_buffer_objects_support()) {
|
||||
/* NOTE: Curve refine is faster using transform feedback via vertex processing pipeline with
|
||||
* Metal and Apple Silicon GPUs. This is also because vertex work can more easily be executed in
|
||||
* parallel with fragment work, whereas compute inserts an explicit dependency,
|
||||
* due to switching of command encoder types. */
|
||||
if (GPU_compute_shader_support() && GPU_shader_storage_buffer_objects_support() &&
|
||||
(GPU_backend_get_type() != GPU_BACKEND_METAL)) {
|
||||
return PART_REFINE_SHADER_COMPUTE;
|
||||
}
|
||||
if (GPU_transform_feedback_support()) {
|
||||
|
||||
@@ -36,7 +36,12 @@
|
||||
|
||||
BLI_INLINE eParticleRefineShaderType drw_hair_shader_type_get()
|
||||
{
|
||||
if (GPU_compute_shader_support() && GPU_shader_storage_buffer_objects_support()) {
|
||||
/* NOTE: Hair refine is faster using transform feedback via vertex processing pipeline with Metal
|
||||
* and Apple Silicon GPUs. This is also because vertex work can more easily be executed in
|
||||
* parallel with fragment work, whereas compute inserts an explicit dependency,
|
||||
* due to switching of command encoder types. */
|
||||
if (GPU_compute_shader_support() && GPU_shader_storage_buffer_objects_support() &&
|
||||
(GPU_backend_get_type() != GPU_BACKEND_METAL)) {
|
||||
return PART_REFINE_SHADER_COMPUTE;
|
||||
}
|
||||
if (GPU_transform_feedback_support()) {
|
||||
|
||||
Reference in New Issue
Block a user