GPU: Add GPU_shader_create_from_info_name

This function will be used as the way to build shaders from
create_infos. The previous used method was using a private function.
This commit is contained in:
Jeroen Bakker 2022-01-25 14:22:44 +01:00
parent 17b0c06946
commit c5980ada4f
3 changed files with 15 additions and 6 deletions

View File

@ -69,6 +69,7 @@ GPUShader *GPU_shader_create_ex(const char *vertcode,
int tf_count,
const char *shname);
GPUShader *GPU_shader_create_from_info(const GPUShaderCreateInfo *_info);
GPUShader *GPU_shader_create_from_info_name(const char *info_name);
struct GPU_ShaderCreateFromArray_Params {
const char **vert, **geom, **frag, **defs;

View File

@ -249,6 +249,18 @@ GPUShader *GPU_shader_create_compute(const char *computecode,
shname);
}
GPUShader *GPU_shader_create_from_info_name(const char *info_name)
{
using namespace blender::gpu::shader;
const GPUShaderCreateInfo *_info = gpu_shader_create_info_get(info_name);
const ShaderCreateInfo &info = *reinterpret_cast<const ShaderCreateInfo *>(_info);
if (!info.do_static_compilation_) {
printf("Warning: Trying to compile \"%s\" which was not marked for static compilation.\n",
info.name_.c_str());
}
return GPU_shader_create_from_info(_info);
}
GPUShader *GPU_shader_create_from_info(const GPUShaderCreateInfo *_info)
{
using namespace blender::gpu::shader;

View File

@ -41,9 +41,6 @@
#include "GPU_texture.h"
#include "GPU_uniform_buffer.h"
/* TODO(jbakker): Need a better way to retrieve create_infos. */
#include "gpu_shader_create_info_private.hh"
/* Adjust these constants as needed. */
#define MAX_DEFINE_LENGTH 256
#define MAX_EXT_DEFINE_LENGTH 512
@ -366,7 +363,7 @@ GPUShader *GPU_shader_get_builtin_shader_with_config(eGPUBuiltinShader shader,
/* common case */
if (sh_cfg == GPU_SHADER_CFG_DEFAULT) {
if (stages->create_info != NULL) {
*sh_p = GPU_shader_create_from_info(gpu_shader_create_info_get(stages->create_info));
*sh_p = GPU_shader_create_from_info_name(stages->create_info);
}
else {
*sh_p = GPU_shader_create_from_arrays_named(
@ -392,8 +389,7 @@ GPUShader *GPU_shader_get_builtin_shader_with_config(eGPUBuiltinShader shader,
GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR));
/* In rare cases geometry shaders calculate clipping themselves. */
if (stages->clipped_create_info != NULL) {
*sh_p = GPU_shader_create_from_info(
gpu_shader_create_info_get(stages->clipped_create_info));
*sh_p = GPU_shader_create_from_info_name(stages->clipped_create_info);
}
else {
const char *world_clip_lib = datatoc_gpu_shader_cfg_world_clip_lib_glsl;