GPUShader: Port 2D widget shaders to use shaderCreateInfo

This should have no functional changes.
This commit is contained in:
2022-05-01 21:12:59 +02:00
parent a330b9b0ea
commit fc872d738e
7 changed files with 71 additions and 92 deletions

View File

@@ -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

View File

@@ -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"},

View File

@@ -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)
{

View File

@@ -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). */

View File

@@ -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);

View File

@@ -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;

View File

@@ -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");