[Bf-blender-cvs] [2436d361581] temp-gpu-push-constants: Cleanup: Renamed converter to patcher.
Jeroen Bakker
noreply at git.blender.org
Fri Jul 2 12:11:07 CEST 2021
Commit: 2436d361581d0c91221f4cf5ee6a75bc088824ae
Author: Jeroen Bakker
Date: Fri Jul 2 12:11:03 2021 +0200
Branches: temp-gpu-push-constants
https://developer.blender.org/rB2436d361581d0c91221f4cf5ee6a75bc088824ae
Cleanup: Renamed converter to patcher.
===================================================================
M source/blender/gpu/CMakeLists.txt
M source/blender/gpu/opengl/gl_shader.hh
R068 source/blender/gpu/opengl/gl_shader_converter.cc source/blender/gpu/opengl/gl_shader_patcher.cc
R084 source/blender/gpu/opengl/gl_shader_converter.hh source/blender/gpu/opengl/gl_shader_patcher.hh
===================================================================
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index ba3a23f2641..6851f6158af 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -104,7 +104,7 @@ set(SRC
opengl/gl_query.cc
opengl/gl_shader.cc
opengl/gl_shader_log.cc
- opengl/gl_shader_converter.cc
+ opengl/gl_shader_patcher.cc
opengl/gl_shader_interface.cc
opengl/gl_state.cc
opengl/gl_texture.cc
@@ -180,6 +180,7 @@ set(SRC
opengl/gl_query.hh
opengl/gl_shader.hh
opengl/gl_shader_interface.hh
+ opengl/gl_shader_patcher.hh
opengl/gl_state.hh
opengl/gl_texture.hh
opengl/gl_uniform_buffer.hh
diff --git a/source/blender/gpu/opengl/gl_shader.hh b/source/blender/gpu/opengl/gl_shader.hh
index 76919b6b803..63dcbcbabae 100644
--- a/source/blender/gpu/opengl/gl_shader.hh
+++ b/source/blender/gpu/opengl/gl_shader.hh
@@ -29,7 +29,7 @@
#include "gpu_shader_private.hh"
-#include "gl_shader_converter.hh"
+#include "gl_shader_patcher.hh"
namespace blender {
namespace gpu {
@@ -50,7 +50,7 @@ class GLShader : public Shader {
bool compilation_failed_ = false;
eGPUShaderTFBType transform_feedback_type_ = GPU_SHADER_TFB_NONE;
- GLShaderConverter converter_;
+ GLShaderPatcher converter_;
public:
GLShader(const char *name);
diff --git a/source/blender/gpu/opengl/gl_shader_converter.cc b/source/blender/gpu/opengl/gl_shader_patcher.cc
similarity index 68%
rename from source/blender/gpu/opengl/gl_shader_converter.cc
rename to source/blender/gpu/opengl/gl_shader_patcher.cc
index d055006f2e9..5d6a766fc6b 100644
--- a/source/blender/gpu/opengl/gl_shader_converter.cc
+++ b/source/blender/gpu/opengl/gl_shader_patcher.cc
@@ -20,10 +20,10 @@
/** \file
* \ingroup gpu
*
- * Parse/convert GLSL source from Vulkan GLSL to OpenGL GLSL.
+ * Patch GLSL source from Vulkan GLSL to OpenGL GLSL.
*/
-#include "gl_shader_converter.hh"
+#include "gl_shader_patcher.hh"
#include <optional>
@@ -33,28 +33,28 @@ static CLG_LogRef LOG = {"gpu.gl.shader.converter"};
namespace blender::gpu {
-static bool is_error_state(GLShaderConverterState state)
+static bool is_error_state(GLShaderPatcherState state)
{
- return !ELEM(state, GLShaderConverterState::OkChanged, GLShaderConverterState::OkUnchanged);
+ return !ELEM(state, GLShaderPatcherState::OkChanged, GLShaderPatcherState::OkUnchanged);
}
struct GLSLPatchResult {
std::optional<std::string> patched_glsl;
- GLShaderConverterState state = GLShaderConverterState::OkUnchanged;
+ GLShaderPatcherState state = GLShaderPatcherState::OkUnchanged;
void merge(const GLSLPatchResult &other, const StringRef unchanged_result)
{
switch (other.state) {
- case GLShaderConverterState::OkUnchanged:
+ case GLShaderPatcherState::OkUnchanged:
patched_glsl = unchanged_result;
break;
- case GLShaderConverterState::OkChanged:
+ case GLShaderPatcherState::OkChanged:
patched_glsl = other.patched_glsl;
- if (state == GLShaderConverterState::OkUnchanged) {
- state = GLShaderConverterState::OkChanged;
+ if (state == GLShaderPatcherState::OkUnchanged) {
+ state = GLShaderPatcherState::OkChanged;
}
break;
- case GLShaderConverterState::MismatchedPushConstantNames:
+ case GLShaderPatcherState::MismatchedPushConstantNames:
state = other.state;
break;
}
@@ -68,7 +68,7 @@ class GLSLPatch {
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01232456789_";
public:
- virtual GLSLPatchResult patch(PatchContext &context, StringRef source) = 0;
+ virtual GLSLPatchResult patch(GLShaderPatchState &context, StringRef source) = 0;
protected:
static StringRef skip_whitespace(StringRef ref)
@@ -94,13 +94,13 @@ class PatchPushConstants : public GLSLPatch {
static constexpr StringRef LAYOUT_STD140 = "layout(std140)";
public:
- GLSLPatchResult patch(PatchContext &context, StringRef source) override
+ GLSLPatchResult patch(GLShaderPatchState &context, StringRef source) override
{
GLSLPatchResult result;
size_t pos = source.find(LAYOUT_PUSH_CONSTANTS);
if (pos == StringRef::not_found) {
- result.state = GLShaderConverterState::OkUnchanged;
+ result.state = GLShaderPatcherState::OkUnchanged;
return result;
}
@@ -124,12 +124,12 @@ class PatchPushConstants : public GLSLPatch {
"binding names must be identical across all stages.",
context.push_constants.name.c_str(),
std::string(name).c_str());
- result.state = GLShaderConverterState::MismatchedPushConstantNames;
+ result.state = GLShaderPatcherState::MismatchedPushConstantNames;
return result;
}
std::string patched_glsl_str = patched_glsl.str();
- result.state = GLShaderConverterState::OkChanged;
+ result.state = GLShaderPatcherState::OkChanged;
GLSLPatchResult recursive_result = patch(context, patched_glsl_str);
result.merge(recursive_result, patched_glsl_str);
return result;
@@ -138,7 +138,7 @@ class PatchPushConstants : public GLSLPatch {
class GLSLPatcher : public GLSLPatch {
private:
- static void patch(PatchContext &context,
+ static void patch(GLShaderPatchState &context,
GLSLPatch &patch,
StringRef source,
GLSLPatchResult &r_result)
@@ -153,7 +153,7 @@ class GLSLPatcher : public GLSLPatch {
}
public:
- GLSLPatchResult patch(PatchContext &context, StringRef source) override
+ GLSLPatchResult patch(GLShaderPatchState &context, StringRef source) override
{
GLSLPatchResult result;
PatchPushConstants push_constants;
@@ -162,30 +162,41 @@ class GLSLPatcher : public GLSLPatch {
}
};
-void GLShaderConverter::patch(MutableSpan<const char *> sources)
+void GLShaderPatcher::patch(MutableSpan<const char *> sources)
{
for (int i = 0; i < sources.size(); i++) {
GLSLPatcher patcher;
const char *source = sources[i];
- GLSLPatchResult patch_result = patcher.patch(context_, source);
- if (is_error_state(patch_result.state)) {
- state = patch_result.state;
- return;
- }
- if (patch_result.state == GLShaderConverterState::OkChanged) {
- BLI_assert(patch_result.patched_glsl);
- patched_sources_.append(*patch_result.patched_glsl);
- sources[i] = patched_sources_.last().c_str();
+ GLSLPatchResult patch_result = patcher.patch(context, source);
+ switch (patch_result.state) {
+ case GLShaderPatcherState::OkUnchanged:
+ break;
+
+ case GLShaderPatcherState::OkChanged:
+ BLI_assert(patch_result.patched_glsl);
+ patched_sources_.append(*patch_result.patched_glsl);
+ sources[i] = patched_sources_.last().c_str();
+
+ /* Keep any errors from previous stages. */
+ if (context.state == GLShaderPatcherState::OkUnchanged) {
+ context.state = GLShaderPatcherState::OkChanged;
+ }
+ break;
+
+ case GLShaderPatcherState::MismatchedPushConstantNames:
+ context.state = patch_result.state;
+ return;
+ break;
}
}
}
-bool GLShaderConverter::has_errors() const
+bool GLShaderPatcher::has_errors() const
{
- return is_error_state(state);
+ return is_error_state(context.state);
}
-void GLShaderConverter::free()
+void GLShaderPatcher::free()
{
patched_sources_.clear();
}
diff --git a/source/blender/gpu/opengl/gl_shader_converter.hh b/source/blender/gpu/opengl/gl_shader_patcher.hh
similarity index 84%
rename from source/blender/gpu/opengl/gl_shader_converter.hh
rename to source/blender/gpu/opengl/gl_shader_patcher.hh
index 84826fee38a..854de2b9ab2 100644
--- a/source/blender/gpu/opengl/gl_shader_converter.hh
+++ b/source/blender/gpu/opengl/gl_shader_patcher.hh
@@ -28,32 +28,32 @@
namespace blender::gpu {
-enum class GLShaderConverterState {
+enum class GLShaderPatcherState {
OkUnchanged,
OkChanged,
MismatchedPushConstantNames,
};
-struct PatchContext {
+struct GLShaderPatchState {
+ GLShaderPatcherState state = GLShaderPatcherState::OkUnchanged;
struct {
std::string name;
} push_constants;
};
-class GLShaderConverter {
+class GLShaderPatcher {
public:
- GLShaderConverterState state = GLShaderConverterState::OkUnchanged;
+ GLShaderPatchState context;
private:
Vector<std::string> patched_sources_;
- PatchContext context_;
public:
void patch(MutableSpan<const char *> sources);
bool has_errors() const;
void free();
- MEM_CXX_CLASS_ALLOC_FUNCS("GLShaderConverter");
+ MEM_CXX_CLASS_ALLOC_FUNCS("GLShaderPatcher");
};
} // namespace blender::gpu
More information about the Bf-blender-cvs
mailing list