Blender V5.0
gpu_shader_srd_info.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#define SRD_STRUCT_BEGIN(srd) \
12 struct srd { \
13 static void populate(blender::gpu::shader::ShaderCreateInfo &info) \
14 {
15
16#define SRD_STRUCT_END(srd) \
17 } \
18 } \
19 ;
20
21#define SRD_VERTEX_IN_BEGIN(srd) SRD_STRUCT_BEGIN(srd)
22#define SRD_VERTEX_IN_END(srd) SRD_STRUCT_END(srd)
23#define SRD_VERTEX_IN(srd, binding, type, name) info.vertex_in(binding, Type::type##_t, #name);
24
25#define SRD_VERTEX_OUT_BEGIN(srd) GPU_SHADER_INTERFACE_INFO(srd)
26#define SRD_VERTEX_OUT_END(srd) GPU_SHADER_INTERFACE_END()
27#define SRD_VERTEX_OUT(srd, qual, type, name) .qual(Type::type##_t, #name)
28
29#define SRD_FRAGMENT_IN_BEGIN(srd) SRD_STRUCT_BEGIN(srd)
30#define SRD_FRAGMENT_IN_END(srd) SRD_STRUCT_END(srd)
31#define SRD_FRAGMENT_IN(srd, qual, type, name) info.qual(Type::type##_t, #name);
32#define SRD_FRAGMENT_IN_ROG(srd, slot, type, img_type, name, rog) \
33 info.subpass_in(slot, type, img_type, name, rog)
34
35#define SRD_FRAGMENT_OUT_BEGIN(srd) SRD_STRUCT_BEGIN(srd)
36#define SRD_FRAGMENT_OUT_END(srd) SRD_STRUCT_END(srd)
37#define SRD_FRAGMENT_OUT(srd, binding, type, name) \
38 info.fragment_out(binding, Type::type##_t, #name);
39#define SRD_FRAGMENT_OUT_DUAL(srd, slot, type, name, blend) \
40 info.fragment_out(slot, Type::type##_t, #name, DualBlend::blend)
41#define SRD_FRAGMENT_OUT_ROG(srd, slot, type, name, rog) \
42 info.fragment_out(slot, Type::type##_t, #name, DualBlend::NONE, rog)
43
44#define SRD_RESOURCE_BEGIN(srd) SRD_STRUCT_BEGIN(srd)
45#define SRD_RESOURCE_END(srd) SRD_STRUCT_END(srd)
46#define SRD_RESOURCE_SPECIALIZATION_CONSTANT(srd, type, name, default) \
47 info.specialization_constant(Type::type##_t, #name, default);
48#define SRD_RESOURCE_GROUP_SHARED(srd, type, name) info.shared_variable(Type::type##_t, name)
49#define SRD_RESOURCE_PUSH_CONSTANT(srd, type, name) info.push_constant(Type::type##_t, #name);
50#define SRD_RESOURCE_PUSH_CONSTANT_ARRAY(srd, type, name, array) \
51 info.push_constant(Type::type##_t, #name, array);
52#define SRD_RESOURCE_SAMPLER(srd, binding, type, name) \
53 info.sampler(binding, ImageType::type, #name);
54#define SRD_RESOURCE_SAMPLER_FREQ(srd, binding, type, name, freq) \
55 info.sampler(binding, ImageType::type, #name, Frequency::freq);
56#define SRD_RESOURCE_IMAGE(srd, binding, format, access, type, name) \
57 info.image(binding, format, Qualifier::access, ImageReadWriteType::type, #name);
58#define SRD_RESOURCE_IMAGE_FREQ(srd, binding, format, access, type, name, freq) \
59 info.image(binding, format, Qualifier::access, ImageReadWriteType::type, #name, Frequency::freq);
60#define SRD_RESOURCE_STORAGE_BUF(srd, binding, access, type, name, array) \
61 info.storage_buf(binding, Qualifier::access, #type, #name #array);
62#define SRD_RESOURCE_STORAGE_BUF_FREQ(srd, binding, access, type, name, array, freq) \
63 info.storage_buf(binding, Qualifier::access, #type, #name #array, Frequency::freq);
64#define SRD_RESOURCE_UNIFORM_BUF(srd, binding, type, name, array) \
65 info.uniform_buf(binding, #type, #name #array);
66#define SRD_RESOURCE_UNIFORM_BUF_FREQ(srd, binding, type, name, array, freq) \
67 info.uniform_buf(binding, #type, #name #array, Frequency::freq);
68#define SRD_RESOURCE_STRUCT(srd, type, name) type::populate(info);
69/* Temporary solution while everything is being ported.
70 * Should be replace by SRD_RESOURCE_STRUCT. */
71#define SRD_RESOURCE_ADDITIONAL_INFO(srd, type) info.additional_info(#type);