GPUShader: Port 2D widget shaders to use shaderCreateInfo
This should have no functional changes.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"},
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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). */
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
Reference in New Issue
Block a user