GPU: Expose preprocessor through API
This is needed to preprocess some source inside the `intern` directory.
This commit is contained in:
@@ -40,6 +40,12 @@ constexpr static int GPU_MAX_UNIFORM_ATTR = 8;
|
||||
/** \name Creation
|
||||
* \{ */
|
||||
|
||||
/**
|
||||
* Preprocess a raw GLSL source to adhere to our backend compatible shader language.
|
||||
* Needed if the string was not part of our build system and is used in a #GPUShaderCreateInfo.
|
||||
*/
|
||||
std::string GPU_shader_preprocess_source(blender::StringRefNull original);
|
||||
|
||||
/**
|
||||
* Create a shader using the given #GPUShaderCreateInfo.
|
||||
* Can return a null pointer if compilation fails.
|
||||
|
||||
@@ -269,7 +269,7 @@ GPUShader *GPU_shader_create_from_info(const GPUShaderCreateInfo *_info)
|
||||
return wrap(Context::get()->get_compiler()->compile(info, false));
|
||||
}
|
||||
|
||||
static std::string preprocess_source(StringRefNull original)
|
||||
std::string GPU_shader_preprocess_source(StringRefNull original)
|
||||
{
|
||||
if (original.is_empty()) {
|
||||
return original;
|
||||
@@ -289,10 +289,10 @@ GPUShader *GPU_shader_create_from_info_python(const GPUShaderCreateInfo *_info)
|
||||
std::string geometry_source_original = info.geometry_source_generated;
|
||||
std::string compute_source_original = info.compute_source_generated;
|
||||
|
||||
info.vertex_source_generated = preprocess_source(info.vertex_source_generated);
|
||||
info.fragment_source_generated = preprocess_source(info.fragment_source_generated);
|
||||
info.geometry_source_generated = preprocess_source(info.geometry_source_generated);
|
||||
info.compute_source_generated = preprocess_source(info.compute_source_generated);
|
||||
info.vertex_source_generated = GPU_shader_preprocess_source(info.vertex_source_generated);
|
||||
info.fragment_source_generated = GPU_shader_preprocess_source(info.fragment_source_generated);
|
||||
info.geometry_source_generated = GPU_shader_preprocess_source(info.geometry_source_generated);
|
||||
info.compute_source_generated = GPU_shader_preprocess_source(info.compute_source_generated);
|
||||
|
||||
GPUShader *result = wrap(Context::get()->get_compiler()->compile(info, false));
|
||||
|
||||
@@ -336,19 +336,19 @@ GPUShader *GPU_shader_create_from_python(std::optional<StringRefNull> vertcode,
|
||||
std::string library_source_processed;
|
||||
|
||||
if (vertcode.has_value()) {
|
||||
vertex_source_processed = preprocess_source(*vertcode);
|
||||
vertex_source_processed = GPU_shader_preprocess_source(*vertcode);
|
||||
vertcode = vertex_source_processed;
|
||||
}
|
||||
if (fragcode.has_value()) {
|
||||
fragment_source_processed = preprocess_source(*fragcode);
|
||||
fragment_source_processed = GPU_shader_preprocess_source(*fragcode);
|
||||
fragcode = fragment_source_processed;
|
||||
}
|
||||
if (geomcode.has_value()) {
|
||||
geometry_source_processed = preprocess_source(*geomcode);
|
||||
geometry_source_processed = GPU_shader_preprocess_source(*geomcode);
|
||||
geomcode = geometry_source_processed;
|
||||
}
|
||||
if (libcode.has_value()) {
|
||||
library_source_processed = preprocess_source(*libcode);
|
||||
library_source_processed = GPU_shader_preprocess_source(*libcode);
|
||||
libcode = library_source_processed;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user