From fb524d1675cf74e4d9e11e6b070f2158dfd0a57a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Wed, 30 Mar 2022 15:12:11 +0200 Subject: GPUShaderCreateInfo: Add DepthWrite option This option lets specify explicitely how the fragment shader will change the fragment's depth. --- source/blender/gpu/opengl/gl_shader.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'source/blender/gpu/opengl') diff --git a/source/blender/gpu/opengl/gl_shader.cc b/source/blender/gpu/opengl/gl_shader.cc index 71428633d79..5938444ce49 100644 --- a/source/blender/gpu/opengl/gl_shader.cc +++ b/source/blender/gpu/opengl/gl_shader.cc @@ -217,6 +217,20 @@ static const char *to_string(const PrimitiveOut &layout) } } +static const char *to_string(const DepthWrite &value) +{ + switch (value) { + case DepthWrite::ANY: + return "depth_any"; + case DepthWrite::GREATER: + return "depth_greater"; + case DepthWrite::LESS: + return "depth_less"; + default: + return "depth_unchanged"; + } +} + static void print_image_type(std::ostream &os, const ImageType &type, const ShaderCreateInfo::Resource::BindType bind_type) @@ -585,6 +599,9 @@ std::string GLShader::fragment_interface_declare(const ShaderCreateInfo &info) c if (info.early_fragment_test_) { ss << "layout(early_fragment_tests) in;\n"; } + if (GLEW_VERSION_4_2 || GLEW_ARB_conservative_depth) { + ss << "layout(" << to_string(info.depth_write_) << ") out float gl_FragDepth;\n"; + } ss << "\n/* Outputs. */\n"; for (const ShaderCreateInfo::FragOut &output : info.fragment_outputs_) { ss << "layout(location = " << output.index; -- cgit v1.2.3