Files
test/source/blender/gpu/intern/gpu_shader_srd_cpp.hh
Clément Foucault 869fc2cf4e GPU: Shader: Add Shared Variable in shader create info
This allows to control the type of data inside the create infos for
easy variation of the same shader.

Also this wraps the last global shader resource usage for the future
SRD.

Pull Request: https://projects.blender.org/blender/blender/pulls/144769
2025-08-19 18:27:49 +02:00

61 lines
2.6 KiB
C++

/* SPDX-FileCopyrightText: 2021 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup gpu
*/
#pragma once
#define SRD_STRUCT_BEGIN(srd) \
namespace srd { \
namespace gl_VertexShader { \
} \
namespace gl_FragmentShader { \
} \
namespace gl_ComputeShader { \
}
#define SRD_STRUCT_END(srd) }
#define SRD_VERTEX_IN_BEGIN(srd) SRD_STRUCT_BEGIN(srd)
#define SRD_VERTEX_IN_END(srd) SRD_STRUCT_END(srd)
#define SRD_VERTEX_IN(srd, binding, type, name) const type name = {};
#define SRD_VERTEX_OUT_BEGIN(srd) GPU_SHADER_INTERFACE_INFO(srd)
#define SRD_VERTEX_OUT_END(srd) GPU_SHADER_INTERFACE_END()
#define SRD_VERTEX_OUT(srd, qual, type, name) type name = {};
#define SRD_FRAGMENT_IN_BEGIN(srd) SRD_STRUCT_BEGIN(srd)
#define SRD_FRAGMENT_IN_END(srd) SRD_STRUCT_END(srd)
#define SRD_FRAGMENT_IN(srd, qual, type, name) const type name = {};
#define SRD_FRAGMENT_IN_ROG(srd, slot, type, img_type, name, rog) const type name = {};
#define SRD_FRAGMENT_OUT_BEGIN(srd) SRD_STRUCT_BEGIN(srd)
#define SRD_FRAGMENT_OUT_END(srd) SRD_STRUCT_END(srd)
#define SRD_FRAGMENT_OUT(srd, binding, type, name) type name = {};
#define SRD_FRAGMENT_OUT_DUAL(srd, slot, type, name, blend) type name = {};
#define SRD_FRAGMENT_OUT_ROG(srd, slot, type, name, rog) type name = {};
#define SRD_RESOURCE_BEGIN(srd) SRD_STRUCT_BEGIN(srd)
#define SRD_RESOURCE_END(srd) SRD_STRUCT_END(srd)
#define SRD_RESOURCE_SPECIALIZATION_CONSTANT(srd, type, name, default) type name = {};
#define SRD_RESOURCE_GROUP_SHARED(srd, type, name) type name;
#define SRD_RESOURCE_PUSH_CONSTANT(srd, type, name) type name = {};
#define SRD_RESOURCE_PUSH_CONSTANT_ARRAY(srd, type, name, array) type(*name) = {};
#define SRD_RESOURCE_SAMPLER(srd, binding, type, name) type name = {};
#define SRD_RESOURCE_SAMPLER_FREQ(srd, binding, type, name, freq) type name = {};
#define SRD_RESOURCE_IMAGE(srd, binding, format, access, type, name) _##access type name;
#define SRD_RESOURCE_IMAGE_FREQ(srd, binding, format, access, type, name, freq) \
_##access type name;
#define SRD_RESOURCE_STORAGE_BUF(srd, binding, access, type, name, array) type(*name) array = {};
#define SRD_RESOURCE_STORAGE_BUF_FREQ(srd, binding, access, type, name, array, freq) \
type(*name) array = {};
#define SRD_RESOURCE_UNIFORM_BUF(srd, binding, type, name, array) type(*name) array = {};
#define SRD_RESOURCE_UNIFORM_BUF_FREQ(srd, binding, type, name, array, freq) \
type(*name) array = {};
#define SRD_RESOURCE_STRUCT(srd, type, name) type name = {};
/* Temporary solution while everything is being ported.
* Should be replace by SRD_RESOURCE_STRUCT. */
#define SRD_RESOURCE_ADDITIONAL_INFO(srd, type) using namespace type;