/* SPDX-License-Identifier: GPL-2.0-or-later
 * Copyright 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, "vec4", "posTime[]")
    .sampler(0, ImageType::FLOAT_BUFFER, "hairPointBuffer")
    .sampler(1, ImageType::UINT_BUFFER, "hairStrandBuffer")
    .sampler(2, ImageType::UINT_BUFFER, "hairStrandSegBuffer")
    .push_constant(Type::MAT4, "hairDupliMatrix")
    .push_constant(Type::BOOL, "hairCloseTip")
    .push_constant(Type::FLOAT, "hairRadShape")
    .push_constant(Type::FLOAT, "hairRadTip")
    .push_constant(Type::FLOAT, "hairRadRoot")
    .push_constant(Type::INT, "hairThicknessRes")
    .push_constant(Type::INT, "hairStrandsRes")
    .push_constant(Type::INT, "hairStrandOffset")
    .compute_source("common_hair_refine_comp.glsl")
    .define("HAIR_PHASE_SUBDIV")
    .do_static_compilation(true);

GPU_SHADER_INTERFACE_INFO(draw_hair_refine_transform_feedback_workaround_iface, "")
    .smooth(Type::VEC4, "finalColor");

GPU_SHADER_CREATE_INFO(draw_hair_refine_transform_feedback_workaround)
    .define("srgbTarget", "false")
    .define("blender_srgb_to_framebuffer_space(a)", "a")
    .define("HAIR_PHASE_SUBDIV")
    .define("TF_WORKAROUND")

    /* Move these to "draw_hair"? */
    .sampler(0, ImageType::UINT_BUFFER, "hairStrandBuffer")
    .sampler(1, ImageType::UINT_BUFFER, "hairStrandSegBuffer")

    .push_constant(Type::INT, "targetWidth")
    .push_constant(Type::INT, "targetHeight")
    .push_constant(Type::INT, "idOffset")
    .vertex_out(draw_hair_refine_transform_feedback_workaround_iface)
    .fragment_out(0, Type::VEC4, "fragColor")
    .vertex_source("common_hair_refine_vert.glsl")
    .fragment_source("gpu_shader_3D_smooth_color_frag.glsl")
    .additional_info("draw_hair")
    .do_static_compilation(true);
