From 26b70fce8ae7c9174f4e410fc1f36075a9b333f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sat, 5 Feb 2022 22:41:08 +0100 Subject: GPU: move gpu_shader_shared_utils.h to the public section of the module This is then easier to include in other modules. --- .../engines/workbench/workbench_shader_shared.h | 2 +- source/blender/draw/intern/draw_shader_shared.h | 2 +- source/blender/gpu/CMakeLists.txt | 2 +- source/blender/gpu/GPU_shader_shared.h | 2 +- source/blender/gpu/GPU_shader_shared_utils.h | 116 +++++++++++++++++++++ source/blender/gpu/intern/gpu_shader.cc | 2 +- .../blender/gpu/intern/gpu_shader_shared_utils.h | 116 --------------------- 7 files changed, 121 insertions(+), 121 deletions(-) create mode 100644 source/blender/gpu/GPU_shader_shared_utils.h delete mode 100644 source/blender/gpu/intern/gpu_shader_shared_utils.h diff --git a/source/blender/draw/engines/workbench/workbench_shader_shared.h b/source/blender/draw/engines/workbench/workbench_shader_shared.h index 0bfd5957834..c63760a634d 100644 --- a/source/blender/draw/engines/workbench/workbench_shader_shared.h +++ b/source/blender/draw/engines/workbench/workbench_shader_shared.h @@ -1,6 +1,6 @@ #ifndef GPU_SHADER -# include "gpu_shader_shared_utils.h" +# include "GPU_shader_shared_utils.h" #endif #define WORKBENCH_SHADER_SHARED_H diff --git a/source/blender/draw/intern/draw_shader_shared.h b/source/blender/draw/intern/draw_shader_shared.h index 133ffdbd636..fba8f91b2f6 100644 --- a/source/blender/draw/intern/draw_shader_shared.h +++ b/source/blender/draw/intern/draw_shader_shared.h @@ -1,6 +1,6 @@ #ifndef GPU_SHADER -# include "gpu_shader_shared_utils.h" +# include "GPU_shader_shared_utils.h" #endif #define DRW_SHADER_SHARED_H diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 2b6b28bd649..cffea5e9dcc 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -375,7 +375,7 @@ set(GLSL_SRC shaders/gpu_shader_common_obinfos_lib.glsl - intern/gpu_shader_shared_utils.h + GPU_shader_shared_utils.h ) set(GLSL_C) diff --git a/source/blender/gpu/GPU_shader_shared.h b/source/blender/gpu/GPU_shader_shared.h index eeca7ee6caa..636a8f53ba6 100644 --- a/source/blender/gpu/GPU_shader_shared.h +++ b/source/blender/gpu/GPU_shader_shared.h @@ -22,7 +22,7 @@ */ #ifndef USE_GPU_SHADER_CREATE_INFO -# include "intern/gpu_shader_shared_utils.h" +# include "GPU_shader_shared_utils.h" #endif struct NodeLinkData { diff --git a/source/blender/gpu/GPU_shader_shared_utils.h b/source/blender/gpu/GPU_shader_shared_utils.h new file mode 100644 index 00000000000..0d283fb1e66 --- /dev/null +++ b/source/blender/gpu/GPU_shader_shared_utils.h @@ -0,0 +1,116 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2022 Blender Foundation. + * All rights reserved. + */ + +/** \file + * \ingroup gpu + * + * Glue definition to make shared declaration of struct & functions work in both C / C++ and GLSL. + * We use the same vector and matrix types as Blender C++. Some math functions are defined to use + * the float version to match the GLSL syntax. + * This file can be used for C & C++ code and the syntax used should follow the same rules. + * Some preprocessing is done by the GPU back-end to make it GLSL compatible. + * + * IMPORTANT: + * - Always use `u` suffix for enum values. GLSL do not support implicit cast. + * - Define all values. This is in order to simplify custom pre-processor code. + * - (C++ only) Always use `uint32_t` as underlying type (`enum eMyEnum : uint32_t`). + * - (C only) do NOT use the enum type inside UBO/SSBO structs and use `uint` instead. + * - Use float suffix by default for float literals to avoid double promotion in C++. + * - Pack one float or int after a vec3/ivec3 to fulfill alignment rules. + * + * NOTE: Due to alignment restriction and buggy drivers, do not try to use mat3 inside structs. + * NOTE: (UBO only) Do not use arrays of float. They are padded to arrays of vec4 and are not worth + * it. This does not apply to SSBO. + * + * IMPORTANT: Do not forget to align mat4, vec3 and vec4 to 16 bytes, and vec2 to 8 bytes. + * + * NOTE: You can use bool type using bool1 a int boolean type matching the GLSL type. + */ + +#ifdef GPU_SHADER +# define BLI_STATIC_ASSERT_ALIGN(type_, align_) +# define BLI_STATIC_ASSERT_SIZE(type_, size_) +# define static +# define inline +# define cosf cos +# define sinf sin +# define tanf tan +# define acosf acos +# define asinf asin +# define atanf atan +# define floorf floor +# define ceilf ceil +# define sqrtf sqrt + +# define float2 vec2 +# define float3 vec3 +# define float4 vec4 +# define float4x4 mat4 +# define int2 ivec2 +# define int3 ivec3 +# define int4 ivec4 +# define uint2 uvec2 +# define uint3 uvec3 +# define uint4 uvec4 +# define bool1 bool +# define bool2 bvec2 +# define bool3 bvec3 +# define bool4 bvec4 + +#else /* C / C++ */ +# pragma once + +# include "BLI_assert.h" + +# ifdef __cplusplus +# include "BLI_float4x4.hh" +# include "BLI_math_vec_types.hh" +using blender::float2; +using blender::float3; +using blender::float4; +using blender::float4x4; +using blender::int2; +using blender::int3; +using blender::int4; +using blender::uint2; +using blender::uint3; +using blender::uint4; +using bool1 = int; +using bool2 = blender::int2; +using bool3 = blender::int3; +using bool4 = blender::int4; + +# else /* C */ +typedef float float2[2]; +typedef float float3[3]; +typedef float float4[4]; +typedef float float4x4[4][4]; +typedef int int2[2]; +typedef int int3[2]; +typedef int int4[4]; +typedef uint uint2[2]; +typedef uint uint3[3]; +typedef uint uint4[4]; +typedef int bool1; +typedef int bool2[2]; +typedef int bool3[2]; +typedef int bool4[4]; +# endif + +#endif diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc index 93ec317be42..82069730ea9 100644 --- a/source/blender/gpu/intern/gpu_shader.cc +++ b/source/blender/gpu/intern/gpu_shader.cc @@ -306,7 +306,7 @@ GPUShader *GPU_shader_create_from_info(const GPUShaderCreateInfo *_info) Vector typedefs; if (!info.typedef_sources_.is_empty() || !info.typedef_source_generated.empty()) { - typedefs.append(gpu_shader_dependency_get_source("gpu_shader_shared_utils.h").c_str()); + typedefs.append(gpu_shader_dependency_get_source("GPU_shader_shared_utils.h").c_str()); } if (!info.typedef_source_generated.empty()) { typedefs.append(info.typedef_source_generated.c_str()); diff --git a/source/blender/gpu/intern/gpu_shader_shared_utils.h b/source/blender/gpu/intern/gpu_shader_shared_utils.h deleted file mode 100644 index 0d283fb1e66..00000000000 --- a/source/blender/gpu/intern/gpu_shader_shared_utils.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2022 Blender Foundation. - * All rights reserved. - */ - -/** \file - * \ingroup gpu - * - * Glue definition to make shared declaration of struct & functions work in both C / C++ and GLSL. - * We use the same vector and matrix types as Blender C++. Some math functions are defined to use - * the float version to match the GLSL syntax. - * This file can be used for C & C++ code and the syntax used should follow the same rules. - * Some preprocessing is done by the GPU back-end to make it GLSL compatible. - * - * IMPORTANT: - * - Always use `u` suffix for enum values. GLSL do not support implicit cast. - * - Define all values. This is in order to simplify custom pre-processor code. - * - (C++ only) Always use `uint32_t` as underlying type (`enum eMyEnum : uint32_t`). - * - (C only) do NOT use the enum type inside UBO/SSBO structs and use `uint` instead. - * - Use float suffix by default for float literals to avoid double promotion in C++. - * - Pack one float or int after a vec3/ivec3 to fulfill alignment rules. - * - * NOTE: Due to alignment restriction and buggy drivers, do not try to use mat3 inside structs. - * NOTE: (UBO only) Do not use arrays of float. They are padded to arrays of vec4 and are not worth - * it. This does not apply to SSBO. - * - * IMPORTANT: Do not forget to align mat4, vec3 and vec4 to 16 bytes, and vec2 to 8 bytes. - * - * NOTE: You can use bool type using bool1 a int boolean type matching the GLSL type. - */ - -#ifdef GPU_SHADER -# define BLI_STATIC_ASSERT_ALIGN(type_, align_) -# define BLI_STATIC_ASSERT_SIZE(type_, size_) -# define static -# define inline -# define cosf cos -# define sinf sin -# define tanf tan -# define acosf acos -# define asinf asin -# define atanf atan -# define floorf floor -# define ceilf ceil -# define sqrtf sqrt - -# define float2 vec2 -# define float3 vec3 -# define float4 vec4 -# define float4x4 mat4 -# define int2 ivec2 -# define int3 ivec3 -# define int4 ivec4 -# define uint2 uvec2 -# define uint3 uvec3 -# define uint4 uvec4 -# define bool1 bool -# define bool2 bvec2 -# define bool3 bvec3 -# define bool4 bvec4 - -#else /* C / C++ */ -# pragma once - -# include "BLI_assert.h" - -# ifdef __cplusplus -# include "BLI_float4x4.hh" -# include "BLI_math_vec_types.hh" -using blender::float2; -using blender::float3; -using blender::float4; -using blender::float4x4; -using blender::int2; -using blender::int3; -using blender::int4; -using blender::uint2; -using blender::uint3; -using blender::uint4; -using bool1 = int; -using bool2 = blender::int2; -using bool3 = blender::int3; -using bool4 = blender::int4; - -# else /* C */ -typedef float float2[2]; -typedef float float3[3]; -typedef float float4[4]; -typedef float float4x4[4][4]; -typedef int int2[2]; -typedef int int3[2]; -typedef int int4[4]; -typedef uint uint2[2]; -typedef uint uint3[3]; -typedef uint uint4[4]; -typedef int bool1; -typedef int bool2[2]; -typedef int bool3[2]; -typedef int bool4[4]; -# endif - -#endif -- cgit v1.2.3