diff options
author | Jeroen Bakker <jbakker> | 2022-01-25 16:46:25 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2022-01-25 16:46:45 +0300 |
commit | 3f42417cd4c8c01142937ba03c8fa6ef6e895494 (patch) | |
tree | 1a3190641fbba649efe651b3a6c7ffdbee501ebc /source/blender/draw/intern | |
parent | 196da819ba4cf553c76468a091966f33081efb08 (diff) |
Draw: Migrate hair refine compute shader to use create info.
This patch migrates the draw manager hair refine compute shader to use
GPUShaderCreateInfo.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D13915
Diffstat (limited to 'source/blender/draw/intern')
5 files changed, 53 insertions, 10 deletions
diff --git a/source/blender/draw/intern/draw_hair.c b/source/blender/draw/intern/draw_hair.c index bf37ea45dda..e9010d7a81a 100644 --- a/source/blender/draw/intern/draw_hair.c +++ b/source/blender/draw/intern/draw_hair.c @@ -130,7 +130,7 @@ static void drw_hair_particle_cache_update_compute(ParticleHairCache *cache, con GPUShader *shader = hair_refine_shader_get(PART_REFINE_CATMULL_ROM); DRWShadingGroup *shgrp = DRW_shgroup_create(shader, g_tf_pass); drw_hair_particle_cache_shgrp_attach_resources(shgrp, cache, subdiv); - DRW_shgroup_vertex_buffer(shgrp, "hairPointOutputBuffer", cache->final[subdiv].proc_buf); + DRW_shgroup_vertex_buffer(shgrp, "posTime", cache->final[subdiv].proc_buf); const int max_strands_per_call = GPU_max_work_group_count(0); int strands_start = 0; diff --git a/source/blender/draw/intern/draw_shader.c b/source/blender/draw/intern/draw_shader.c index 121a0acd059..28ac76ccd7f 100644 --- a/source/blender/draw/intern/draw_shader.c +++ b/source/blender/draw/intern/draw_shader.c @@ -47,12 +47,7 @@ static struct { static GPUShader *hair_refine_shader_compute_create(ParticleRefineShader UNUSED(refinement)) { - GPUShader *sh = NULL; - sh = GPU_shader_create_compute(datatoc_common_hair_refine_comp_glsl, - datatoc_common_hair_lib_glsl, - "#define HAIR_PHASE_SUBDIV\n", - __func__); - return sh; + return GPU_shader_create_from_info_name("draw_hair_refine_compute"); } static GPUShader *hair_refine_shader_transform_feedback_create( diff --git a/source/blender/draw/intern/shaders/common_hair_lib.glsl b/source/blender/draw/intern/shaders/common_hair_lib.glsl index 6cc7f09a852..049d7785bf7 100644 --- a/source/blender/draw/intern/shaders/common_hair_lib.glsl +++ b/source/blender/draw/intern/shaders/common_hair_lib.glsl @@ -5,6 +5,7 @@ * of data the CPU has to precompute and transfer for each update. */ +#ifndef USE_GPU_SHADER_CREATE_INFO /** * hairStrandsRes: Number of points per hair strand. * 2 - no subdivision @@ -33,8 +34,6 @@ uniform int hairStrandOffset = 0; /* -- Per control points -- */ uniform samplerBuffer hairPointBuffer; /* RGBA32F */ -#define point_position xyz -#define point_time w /* Position along the hair length */ /* -- Per strands data -- */ uniform usamplerBuffer hairStrandBuffer; /* R32UI */ @@ -43,6 +42,10 @@ uniform usamplerBuffer hairStrandSegBuffer; /* R16UI */ /* Not used, use one buffer per uv layer */ // uniform samplerBuffer hairUVBuffer; /* RG32F */ // uniform samplerBuffer hairColBuffer; /* RGBA16 linear color */ +#endif + +#define point_position xyz +#define point_time w /* Position along the hair length */ /* -- Subdivision stage -- */ /** diff --git a/source/blender/draw/intern/shaders/common_hair_refine_comp.glsl b/source/blender/draw/intern/shaders/common_hair_refine_comp.glsl index 4dcde4b0245..6a3a7815cdc 100644 --- a/source/blender/draw/intern/shaders/common_hair_refine_comp.glsl +++ b/source/blender/draw/intern/shaders/common_hair_refine_comp.glsl @@ -1,4 +1,6 @@ +#pragma BLENDER_REQUIRE(common_hair_lib.glsl) +#ifndef USE_GPU_SHADER_CREATE_INFO /* * To be compiled with common_hair_lib.glsl. */ @@ -9,6 +11,7 @@ layout(std430, binding = 0) writeonly buffer hairPointOutputBuffer vec4 posTime[]; } out_vertbuf; +#endif void main(void) { @@ -20,5 +23,5 @@ void main(void) vec4 result = hair_interp_data(data0, data1, data2, data3, weights); uint index = uint(hair_get_id() * hairStrandsRes) + gl_GlobalInvocationID.y; - out_vertbuf.posTime[index] = result; + posTime[index] = result; } diff --git a/source/blender/draw/intern/shaders/draw_hair_refine_info.hh b/source/blender/draw/intern/shaders/draw_hair_refine_info.hh new file mode 100644 index 00000000000..3c1af1bf759 --- /dev/null +++ b/source/blender/draw/intern/shaders/draw_hair_refine_info.hh @@ -0,0 +1,42 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2022 Blender Foundation. + * All rights reserved. + */ + +/** \file + * \ingroup draw + */ + +#include "gpu_shader_create_info.hh" + +GPU_SHADER_CREATE_INFO(draw_hair_refine_compute) + .local_group_size(1, 1) + .storage_buf(0, Qualifier::WRITE_ONLY, "vec4", "posTime[]") + .sampler(0, ImageType::FLOAT_BUFFER, "hairPointBuffer") + .sampler(1, ImageType::UINT_BUFFER, "hairStrandBuffer") + .sampler(2, ImageType::UINT_BUFFER, "hairStrandSegBuffer") + .push_constant(0, Type::VEC4, "hairDupliMatrix", 4) + .push_constant(16, Type::BOOL, "hairCloseTip") + .push_constant(17, Type::FLOAT, "hairRadShape") + .push_constant(18, Type::FLOAT, "hairRadTip") + .push_constant(19, Type::FLOAT, "hairRadRoot") + .push_constant(20, Type::INT, "hairThicknessRes") + .push_constant(21, Type::INT, "hairStrandsRes") + .push_constant(22, Type::INT, "hairStrandOffset") + .compute_source("common_hair_refine_comp.glsl") + .define("HAIR_PHASE_SUBDIV") + .do_static_compilation(true); |