diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-05-01 22:12:59 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-05-01 22:12:59 +0300 |
commit | fc872d738ef1526fd251f073c1a495344360a667 (patch) | |
tree | 9f0676b1156f59e636500285502f7bb633d2693e /source/blender/gpu | |
parent | a330b9b0eac6ad1a71ee1cad974f673f26ec0cd3 (diff) |
GPUShader: Port 2D widget shaders to use shaderCreateInfo
This should have no functional changes.
Diffstat (limited to 'source/blender/gpu')
7 files changed, 71 insertions, 92 deletions
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 356daa2f23c..68f228e17e0 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -492,6 +492,7 @@ set(SRC_SHADER_CREATE_INFOS shaders/infos/gpu_shader_2D_point_varying_size_varying_color_info.hh shaders/infos/gpu_shader_2D_smooth_color_info.hh shaders/infos/gpu_shader_2D_uniform_color_info.hh + shaders/infos/gpu_shader_2D_widget_info.hh shaders/infos/gpu_shader_3D_depth_only_info.hh shaders/infos/gpu_shader_3D_flat_color_info.hh shaders/infos/gpu_shader_3D_image_modulate_alpha_info.hh diff --git a/source/blender/gpu/intern/gpu_shader_builtin.c b/source/blender/gpu/intern/gpu_shader_builtin.c index 1958ecedb28..f97ff0bf101 100644 --- a/source/blender/gpu/intern/gpu_shader_builtin.c +++ b/source/blender/gpu/intern/gpu_shader_builtin.c @@ -305,25 +305,13 @@ static const GPUShaderStages builtin_shader_stages[GPU_SHADER_BUILTIN_LEN] = { [GPU_SHADER_2D_AREA_BORDERS] = {.name = "GPU_SHADER_2D_AREA_BORDERS", .create_info = "gpu_shader_2D_area_borders"}, - [GPU_SHADER_2D_WIDGET_BASE] = - { - .name = "GPU_SHADER_2D_WIDGET_BASE", - .vert = datatoc_gpu_shader_2D_widget_base_vert_glsl, - .frag = datatoc_gpu_shader_2D_widget_base_frag_glsl, - }, - [GPU_SHADER_2D_WIDGET_BASE_INST] = - { - .name = "GPU_SHADER_2D_WIDGET_BASE_INST", - .vert = datatoc_gpu_shader_2D_widget_base_vert_glsl, - .frag = datatoc_gpu_shader_2D_widget_base_frag_glsl, - .defs = "#define USE_INSTANCE\n", - }, - [GPU_SHADER_2D_WIDGET_SHADOW] = - { - .name = "GPU_SHADER_2D_WIDGET_SHADOW", - .vert = datatoc_gpu_shader_2D_widget_shadow_vert_glsl, - .frag = datatoc_gpu_shader_2D_widget_shadow_frag_glsl, - }, + [GPU_SHADER_2D_WIDGET_BASE] = {.name = "GPU_SHADER_2D_WIDGET_BASE", + .create_info = "gpu_shader_2D_widget_base"}, + [GPU_SHADER_2D_WIDGET_BASE_INST] = {.name = "GPU_SHADER_2D_WIDGET_BASE_INST", + .defs = "#define USE_INSTANCE\n", + .create_info = "gpu_shader_2D_widget_base_inst"}, + [GPU_SHADER_2D_WIDGET_SHADOW] = {.name = "GPU_SHADER_2D_WIDGET_SHADOW", + .create_info = "gpu_shader_2D_widget_shadow"}, [GPU_SHADER_2D_NODELINK] = {.name = "GPU_SHADER_2D_NODELINK", .create_info = "gpu_shader_2D_nodelink"}, diff --git a/source/blender/gpu/shaders/gpu_shader_2D_widget_base_frag.glsl b/source/blender/gpu/shaders/gpu_shader_2D_widget_base_frag.glsl index a03b88db342..662589fb2ce 100644 --- a/source/blender/gpu/shaders/gpu_shader_2D_widget_base_frag.glsl +++ b/source/blender/gpu/shaders/gpu_shader_2D_widget_base_frag.glsl @@ -1,19 +1,4 @@ -#ifndef USE_GPU_SHADER_CREATE_INFO -uniform vec3 checkerColorAndSize; - -noperspective in vec2 uvInterp; -noperspective in float butCo; -flat in float discardFac; -flat in float shadeTri; -flat in vec2 outRectSize; -flat in vec4 outRoundCorners; -noperspective in vec4 innerColor; -flat in vec4 borderColor; -flat in vec4 embossColor; -flat in float lineWidth; - -out vec4 fragColor; -#endif +#pragma BLENDER_REQUIRE(gpu_shader_colorspace_lib.glsl) vec3 compute_masks(vec2 uv) { diff --git a/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl index 3a39cd8b847..c102b422211 100644 --- a/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl +++ b/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl @@ -1,24 +1,3 @@ -#ifndef USE_GPU_SHADER_CREATE_INFO -uniform mat4 ModelViewProjectionMatrix; - -# define MAX_PARAM 12 -# ifdef USE_INSTANCE -# define MAX_INSTANCE 6 -uniform vec4 parameters[MAX_PARAM * MAX_INSTANCE]; -# else -uniform vec4 parameters[MAX_PARAM]; -# endif -#endif - -/* gl_InstanceID is supposed to be 0 if not drawing instances, but this seems - * to be violated in some drivers. For example, macOS 10.15.4 and Intel Iris - * causes T78307 when using gl_InstanceID outside of instance. */ -#ifdef USE_INSTANCE -# define widgetID gl_InstanceID -#else -# define widgetID 0 -#endif - #define recti parameters[widgetID * MAX_PARAM + 0] #define rect parameters[widgetID * MAX_PARAM + 1] #define radsi parameters[widgetID * MAX_PARAM + 2].x @@ -42,22 +21,6 @@ uniform vec4 parameters[MAX_PARAM]; #define doAlphaCheck (alphaDiscard < 0.0) #define discardFactor abs(alphaDiscard) -#ifndef USE_GPU_SHADER_CREATE_INFO -noperspective out vec2 uvInterp; -flat out vec2 outRectSize; -flat out vec4 outRoundCorners; -noperspective out vec4 innerColor; -flat out vec4 borderColor; -flat out vec4 embossColor; -flat out float lineWidth; -noperspective out float butCo; -flat out float discardFac; - -# if defined(OS_MAC) && defined(GPU_OPENGL) -in float dummy; -# endif -#endif - vec2 do_widget(void) { /* Offset to avoid losing pixels (mimics conservative rasterization). */ diff --git a/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_frag.glsl b/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_frag.glsl index a624d3f2f8b..4d153102e41 100644 --- a/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_frag.glsl +++ b/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_frag.glsl @@ -1,12 +1,4 @@ -#ifndef USE_GPU_SHADER_CREATE_INFO -in float shadowFalloff; - -out vec4 fragColor; - -uniform float alpha; -#endif - void main() { fragColor = vec4(0.0); diff --git a/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl index d3eed997292..de1da01ff98 100644 --- a/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl +++ b/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl @@ -51,12 +51,6 @@ const vec2 cornervec[36] = vec2[36](vec2(0.0, 1.0), #define INNER_FLAG uint(1 << 10) /* is inner vert */ -#ifndef USE_GPU_SHADER_CREATE_INFO -uniform mat4 ModelViewProjectionMatrix; - -uniform vec4 parameters[4]; -#endif - /* radi and rad per corner */ #define recti parameters[0] #define rect parameters[1] @@ -64,12 +58,6 @@ uniform vec4 parameters[4]; #define rads parameters[2].y #define roundCorners parameters[3] -#ifndef USE_GPU_SHADER_CREATE_INFO -in uint vflag; - -out float shadowFalloff; -#endif - void main() { uint cflag = vflag & CNR_FLAG_RANGE; diff --git a/source/blender/gpu/shaders/infos/gpu_shader_2D_widget_info.hh b/source/blender/gpu/shaders/infos/gpu_shader_2D_widget_info.hh new file mode 100644 index 00000000000..7a430717f85 --- /dev/null +++ b/source/blender/gpu/shaders/infos/gpu_shader_2D_widget_info.hh @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2022 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup gpu + */ + +#include "gpu_interface_info.hh" +#include "gpu_shader_create_info.hh" + +GPU_SHADER_INTERFACE_INFO(gpu_widget_iface, "") + .flat(Type::FLOAT, "discardFac") + .flat(Type::FLOAT, "lineWidth") + .flat(Type::VEC2, "outRectSize") + .flat(Type::VEC4, "borderColor") + .flat(Type::VEC4, "embossColor") + .flat(Type::VEC4, "outRoundCorners") + .no_perspective(Type::FLOAT, "butCo") + .no_perspective(Type::VEC2, "uvInterp") + .no_perspective(Type::VEC4, "innerColor"); + +/* TODO(fclem): Share with C code. */ +#define MAX_PARAM 12 +#define MAX_INSTANCE 6 + +GPU_SHADER_CREATE_INFO(gpu_shader_2D_widget_shared) + .define("MAX_PARAM", STRINGIFY(MAX_PARAM)) + .push_constant(Type::MAT4, "ModelViewProjectionMatrix") + .push_constant(Type::VEC3, "checkerColorAndSize") + .vertex_out(gpu_widget_iface) + .fragment_out(0, Type::VEC4, "fragColor") + .vertex_source("gpu_shader_2D_widget_base_vert.glsl") + .fragment_source("gpu_shader_2D_widget_base_frag.glsl") + .additional_info("gpu_srgb_to_framebuffer_space"); + +GPU_SHADER_CREATE_INFO(gpu_shader_2D_widget_base) + .do_static_compilation(true) + /* gl_InstanceID is supposed to be 0 if not drawing instances, but this seems + * to be violated in some drivers. For example, macOS 10.15.4 and Intel Iris + * causes T78307 when using gl_InstanceID outside of instance. */ + .define("widgetID", "0") + .push_constant(Type::VEC4, "parameters", MAX_PARAM) + .additional_info("gpu_shader_2D_widget_shared"); + +GPU_SHADER_CREATE_INFO(gpu_shader_2D_widget_base_inst) + .do_static_compilation(true) + .define("widgetID", "gl_InstanceID") + .push_constant(Type::VEC4, "parameters", (MAX_PARAM * MAX_INSTANCE)) + .additional_info("gpu_shader_2D_widget_shared"); + +GPU_SHADER_INTERFACE_INFO(gpu_widget_shadow_iface, "").smooth(Type::FLOAT, "shadowFalloff"); + +GPU_SHADER_CREATE_INFO(gpu_shader_2D_widget_shadow) + .do_static_compilation(true) + .push_constant(Type::MAT4, "ModelViewProjectionMatrix") + .push_constant(Type::VEC4, "parameters", 4) + .push_constant(Type::FLOAT, "alpha") + .vertex_in(0, Type::UINT, "vflag") + .vertex_out(gpu_widget_shadow_iface) + .fragment_out(0, Type::VEC4, "fragColor") + .vertex_source("gpu_shader_2D_widget_shadow_vert.glsl") + .fragment_source("gpu_shader_2D_widget_shadow_frag.glsl"); |