2023-08-16 00:20:26 +10:00
|
|
|
/* SPDX-FileCopyrightText: 2023 Blender Authors
|
2023-05-31 16:19:06 +02:00
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
2018-09-14 09:32:19 -03:00
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
|
* \ingroup bpygpu
|
2018-09-14 09:32:19 -03:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
2025-01-07 12:39:13 +01:00
|
|
|
#include <Python.h>
|
|
|
|
|
|
2022-09-01 08:21:10 -03:00
|
|
|
#ifndef __cplusplus
|
2024-09-24 15:25:36 +02:00
|
|
|
# include "../generic/py_capi_utils.hh"
|
2022-09-01 08:21:10 -03:00
|
|
|
#endif
|
|
|
|
|
|
2025-08-11 09:34:28 +02:00
|
|
|
namespace blender::gpu {
|
|
|
|
|
class Shader;
|
|
|
|
|
} // namespace blender::gpu
|
|
|
|
|
|
2024-03-23 10:10:52 -04:00
|
|
|
struct GPUShaderCreateInfo;
|
|
|
|
|
struct GPUStageInterfaceInfo;
|
|
|
|
|
|
2022-04-12 18:28:27 -03:00
|
|
|
/* Make sure that there is always a reference count for PyObjects of type String as the strings are
|
|
|
|
|
* passed by reference in the #GPUStageInterfaceInfo and #GPUShaderCreateInfo APIs. */
|
|
|
|
|
#define USE_GPU_PY_REFERENCES
|
|
|
|
|
|
2023-07-31 11:50:54 +10:00
|
|
|
/* `gpu_py_shader.cc` */
|
2022-04-12 18:28:27 -03:00
|
|
|
|
2018-09-14 09:32:19 -03:00
|
|
|
extern PyTypeObject BPyGPUShader_Type;
|
|
|
|
|
|
|
|
|
|
#define BPyGPUShader_Check(v) (Py_TYPE(v) == &BPyGPUShader_Type)
|
|
|
|
|
|
2025-01-07 11:26:06 +11:00
|
|
|
struct BPyGPUShader {
|
2021-04-01 11:15:47 +11:00
|
|
|
PyObject_VAR_HEAD
|
2025-08-11 09:34:28 +02:00
|
|
|
blender::gpu::Shader *shader;
|
2018-09-20 15:21:59 -03:00
|
|
|
bool is_builtin;
|
2025-01-07 11:26:06 +11:00
|
|
|
};
|
2018-09-14 09:32:19 -03:00
|
|
|
|
2025-08-11 09:34:28 +02:00
|
|
|
[[nodiscard]] PyObject *BPyGPUShader_CreatePyObject(blender::gpu::Shader *shader, bool is_builtin);
|
2025-06-28 00:15:23 +00:00
|
|
|
[[nodiscard]] PyObject *bpygpu_shader_init();
|
2022-04-12 18:28:27 -03:00
|
|
|
|
|
|
|
|
/* gpu_py_shader_create_info.cc */
|
|
|
|
|
|
2022-09-01 08:21:10 -03:00
|
|
|
extern const struct PyC_StringEnumItems pygpu_attrtype_items[];
|
2022-04-12 18:28:27 -03:00
|
|
|
extern PyTypeObject BPyGPUShaderCreateInfo_Type;
|
|
|
|
|
extern PyTypeObject BPyGPUStageInterfaceInfo_Type;
|
|
|
|
|
|
|
|
|
|
#define BPyGPUShaderCreateInfo_Check(v) (Py_TYPE(v) == &BPyGPUShaderCreateInfo_Type)
|
|
|
|
|
#define BPyGPUStageInterfaceInfo_Check(v) (Py_TYPE(v) == &BPyGPUStageInterfaceInfo_Type)
|
|
|
|
|
|
2024-03-23 10:10:52 -04:00
|
|
|
struct BPyGPUStageInterfaceInfo {
|
2022-04-12 18:28:27 -03:00
|
|
|
PyObject_VAR_HEAD
|
2024-03-23 10:10:52 -04:00
|
|
|
GPUStageInterfaceInfo *interface;
|
2022-04-12 18:28:27 -03:00
|
|
|
#ifdef USE_GPU_PY_REFERENCES
|
2024-03-26 17:54:30 +11:00
|
|
|
/* Just to keep a user to prevent freeing buffers we're using. */
|
2022-04-12 18:28:27 -03:00
|
|
|
PyObject *references;
|
|
|
|
|
#endif
|
2024-03-23 10:10:52 -04:00
|
|
|
};
|
2022-04-12 18:28:27 -03:00
|
|
|
|
2024-03-23 10:10:52 -04:00
|
|
|
struct BPyGPUShaderCreateInfo {
|
2022-04-12 18:28:27 -03:00
|
|
|
PyObject_VAR_HEAD
|
2024-03-23 10:10:52 -04:00
|
|
|
GPUShaderCreateInfo *info;
|
2022-04-12 18:28:27 -03:00
|
|
|
#ifdef USE_GPU_PY_REFERENCES
|
2024-03-26 17:54:30 +11:00
|
|
|
/* Just to keep a user to prevent freeing buffers we're using. */
|
2022-04-12 18:28:27 -03:00
|
|
|
PyObject *vertex_source;
|
|
|
|
|
PyObject *fragment_source;
|
2023-11-23 14:23:26 +01:00
|
|
|
PyObject *compute_source;
|
2022-04-12 18:28:27 -03:00
|
|
|
PyObject *typedef_source;
|
|
|
|
|
PyObject *references;
|
|
|
|
|
#endif
|
|
|
|
|
size_t constants_total_size;
|
2024-03-23 10:10:52 -04:00
|
|
|
};
|
2022-04-12 18:28:27 -03:00
|
|
|
|
2025-06-28 00:15:23 +00:00
|
|
|
[[nodiscard]] PyObject *BPyGPUStageInterfaceInfo_CreatePyObject(GPUStageInterfaceInfo *interface);
|
|
|
|
|
[[nodiscard]] PyObject *BPyGPUShaderCreateInfo_CreatePyObject(GPUShaderCreateInfo *info);
|
2025-08-11 09:34:28 +02:00
|
|
|
[[nodiscard]] bool bpygpu_shader_is_polyline(blender::gpu::Shader *shader);
|