Blender V5.0
draw_view_infos.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "draw_defines.hh"
6
7#ifdef GPU_SHADER
8# pragma once
9# include "gpu_shader_compat.hh"
10
11# include "draw_command_shared.hh"
12# include "draw_shader_shared.hh"
13
14/* Define stub defines for C++ test compilation. */
15# define DRAW_VIEW_CREATE_INFO
16# define DRW_VIEW_CULLING_INFO
17# define USE_WORLD_CLIP_PLANES
18
19# define DRW_VIEW_LEN DRW_VIEW_MAX
20#endif
21
23
24/* -------------------------------------------------------------------- */
28
33GPU_SHADER_NAMED_INTERFACE_INFO(draw_resource_id_iface, drw_ResourceID_iface)
34FLAT(uint, resource_index)
35GPU_SHADER_NAMED_INTERFACE_END(drw_ResourceID_iface)
36
37GPU_SHADER_CREATE_INFO(draw_resource_id_varying)
38VERTEX_OUT(draw_resource_id_iface)
39GEOMETRY_OUT(draw_resource_id_iface)
41
42GPU_SHADER_CREATE_INFO(draw_resource_id)
43STORAGE_BUF(DRW_RESOURCE_ID_SLOT, read, uint, resource_id_buf[])
45
46GPU_SHADER_CREATE_INFO(draw_resource_with_custom_id)
47DEFINE("WITH_CUSTOM_IDS")
48STORAGE_BUF(DRW_RESOURCE_ID_SLOT, read, uint2, resource_id_buf[])
50
52
53/* -------------------------------------------------------------------- */
56
57GPU_SHADER_CREATE_INFO(draw_modelmat_common)
58TYPEDEF_SOURCE("draw_shader_shared.hh")
60DEFINE("DRAW_MODELMAT_CREATE_INFO")
62
63GPU_SHADER_CREATE_INFO(draw_modelmat)
64ADDITIONAL_INFO(draw_modelmat_common)
65ADDITIONAL_INFO(draw_resource_id)
67
68GPU_SHADER_CREATE_INFO(draw_modelmat_with_custom_id)
69ADDITIONAL_INFO(draw_modelmat_common)
70ADDITIONAL_INFO(draw_resource_with_custom_id)
72
74
75/* -------------------------------------------------------------------- */
78
81DEFINE("DRAW_VIEW_CREATE_INFO")
82TYPEDEF_SOURCE("draw_shader_shared.hh")
84
85GPU_SHADER_CREATE_INFO(draw_view_culling)
87DEFINE("DRW_VIEW_CULLING_INFO")
88TYPEDEF_SOURCE("draw_shader_shared.hh")
90
92
93/* -------------------------------------------------------------------- */
96
97GPU_SHADER_CREATE_INFO(drw_clipped)
98/* TODO(fclem): Move to engine side. */
99UNIFORM_BUF_FREQ(DRW_CLIPPING_UBO_SLOT, float4, drw_clipping_[6], PASS)
100DEFINE("USE_WORLD_CLIP_PLANES")
102
104
105/* -------------------------------------------------------------------- */
108
109GPU_SHADER_CREATE_INFO(draw_resource_finalize)
111TYPEDEF_SOURCE("draw_shader_shared.hh")
112DEFINE("DRAW_FINALIZE_SHADER")
114STORAGE_BUF(0, read, ObjectMatrices, matrix_buf[])
115STORAGE_BUF(1, read_write, ObjectBounds, bounds_buf[])
116STORAGE_BUF(2, read_write, ObjectInfos, infos_buf[])
117PUSH_CONSTANT(int, resource_len)
118COMPUTE_SOURCE("draw_resource_finalize_comp.glsl")
120
121GPU_SHADER_CREATE_INFO(draw_view_finalize)
124DEFINE_VALUE("DRW_VIEW_LEN", STRINGIFY(DRW_VIEW_MAX))
125STORAGE_BUF(0, read_write, ViewCullingData, view_culling_buf[DRW_VIEW_LEN])
126COMPUTE_SOURCE("draw_view_finalize_comp.glsl")
127ADDITIONAL_INFO(draw_view)
129
130GPU_SHADER_CREATE_INFO(draw_visibility_compute)
133DEFINE_VALUE("DRW_VIEW_LEN", STRINGIFY(DRW_VIEW_MAX))
134STORAGE_BUF(0, read, ObjectBounds, bounds_buf[])
135STORAGE_BUF(1, read_write, uint, visibility_buf[])
136PUSH_CONSTANT(int, resource_len)
137PUSH_CONSTANT(int, view_len)
138PUSH_CONSTANT(int, visibility_word_per_draw)
139COMPUTE_SOURCE("draw_visibility_comp.glsl")
140ADDITIONAL_INFO(draw_view)
141ADDITIONAL_INFO(draw_view_culling)
143
144GPU_SHADER_CREATE_INFO(draw_command_generate)
146TYPEDEF_SOURCE("draw_shader_shared.hh")
147TYPEDEF_SOURCE("draw_command_shared.hh")
149STORAGE_BUF(0, read_write, DrawGroup, group_buf[])
150STORAGE_BUF(1, read, uint, visibility_buf[])
151STORAGE_BUF(2, read, DrawPrototype, prototype_buf[])
152STORAGE_BUF(3, write, DrawCommand, command_buf[])
153STORAGE_BUF(DRW_RESOURCE_ID_SLOT, write, uint, resource_id_buf[])
154PUSH_CONSTANT(int, prototype_len)
155PUSH_CONSTANT(int, visibility_word_per_draw)
156PUSH_CONSTANT(int, view_shift)
157PUSH_CONSTANT(int, view_len)
158PUSH_CONSTANT(bool, use_custom_ids)
159COMPUTE_SOURCE("draw_command_generate_comp.glsl")
161
163
164/* Stub needs to be after all definitions to avoid conflict with legacy definitions. */
165#ifdef GPU_SHADER
166/* Make it work for both draw_resource_id and draw_resource_with_custom_id. */
167# define resource_id_buf float2(0)
168#endif
unsigned int uint
#define STRINGIFY(x)
#define DRW_RESOURCE_ID_SLOT
#define DRW_VISIBILITY_GROUP_SIZE
#define DRW_FINALIZE_GROUP_SIZE
#define DRW_VIEW_CULLING_UBO_SLOT
#define DRW_COMMAND_GROUP_SIZE
#define DRW_CLIPPING_UBO_SLOT
#define DRW_VIEW_MAX
#define DRW_VIEW_UBO_SLOT
#define DRW_OBJ_MAT_SLOT
#define DRW_VIEW_LEN
#define GPU_SHADER_NAMED_INTERFACE_INFO(_interface, _inst_name)
#define GPU_SHADER_NAMED_INTERFACE_END(_inst_name)
#define GPU_SHADER_CREATE_INFO(_info)
#define GPU_SHADER_CREATE_END()
#define TYPEDEF_SOURCE(filename)
#define VERTEX_OUT(stage_interface)
#define UNIFORM_BUF(slot, type_name, name)
#define GEOMETRY_OUT(stage_interface)
#define ADDITIONAL_INFO(info_name)
#define PUSH_CONSTANT(type, name)
#define DEFINE(name)
#define FLAT(type, name)
#define UNIFORM_BUF_FREQ(slot, type_name, name, freq)
#define STORAGE_BUF(slot, qualifiers, type_name, name)
#define LOCAL_GROUP_SIZE(...)
#define COMPUTE_SOURCE(filename)
#define DO_STATIC_COMPILATION()
#define DEFINE_VALUE(name, value)