Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-09-01 03:41:29 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-09-01 13:03:52 +0300
commit53a806f6dffb2a778e383a82c3d0cdb6e9d9d552 (patch)
tree3bfc9bb0d705a1c198c19b62fe134bda525e51ad /source/blender/gpu/intern
parent5ec0250df9d8cf44d099e5b6fffca99bf9cf0c46 (diff)
GPU: Move UBO binding validation to GL backend
This also make the validation quicker by tracking the currently bound slots.
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r--source/blender/gpu/intern/gpu_shader_interface.hh26
-rw-r--r--source/blender/gpu/intern/gpu_shader_private.hh5
2 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/gpu/intern/gpu_shader_interface.hh b/source/blender/gpu/intern/gpu_shader_interface.hh
index 6e1cb342c68..265fe90fc76 100644
--- a/source/blender/gpu/intern/gpu_shader_interface.hh
+++ b/source/blender/gpu/intern/gpu_shader_interface.hh
@@ -83,12 +83,21 @@ class ShaderInterface {
{
return input_lookup(inputs_ + attr_len_, ubo_len_, name);
}
+ inline const ShaderInput *ubo_get(const int binding) const
+ {
+ return input_lookup(inputs_ + attr_len_, ubo_len_, binding);
+ }
inline const ShaderInput *uniform_get(const char *name) const
{
return input_lookup(inputs_ + attr_len_ + ubo_len_, uniform_len_, name);
}
+ inline const char *input_name_get(const ShaderInput *input) const
+ {
+ return name_buffer_ + input->name_offset;
+ }
+
/* Returns uniform location. */
inline int32_t uniform_builtin(const GPUUniformBuiltin builtin) const
{
@@ -116,6 +125,10 @@ class ShaderInterface {
inline const ShaderInput *input_lookup(const ShaderInput *const inputs,
const uint inputs_len,
const char *name) const;
+
+ inline const ShaderInput *input_lookup(const ShaderInput *const inputs,
+ const uint inputs_len,
+ const int binding) const;
};
inline const char *ShaderInterface::builtin_uniform_name(GPUUniformBuiltin u)
@@ -226,4 +239,17 @@ inline const ShaderInput *ShaderInterface::input_lookup(const ShaderInput *const
return NULL; /* not found */
}
+inline const ShaderInput *ShaderInterface::input_lookup(const ShaderInput *const inputs,
+ const uint inputs_len,
+ const int binding) const
+{
+ /* Simple linear search for now. */
+ for (int i = inputs_len - 1; i >= 0; i--) {
+ if (inputs[i].binding == binding) {
+ return inputs + i;
+ }
+ }
+ return NULL; /* not found */
+}
+
} // namespace blender::gpu
diff --git a/source/blender/gpu/intern/gpu_shader_private.hh b/source/blender/gpu/intern/gpu_shader_private.hh
index dc6941a067e..9c9aa835b97 100644
--- a/source/blender/gpu/intern/gpu_shader_private.hh
+++ b/source/blender/gpu/intern/gpu_shader_private.hh
@@ -64,6 +64,11 @@ class Shader {
virtual void vertformat_from_shader(GPUVertFormat *) const = 0;
+ inline const char *const name_get(void) const
+ {
+ return name;
+ };
+
protected:
void print_errors(Span<const char *> sources, char *log, const char *stage);
};