diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-09-01 03:41:29 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-09-01 13:03:52 +0300 |
commit | 53a806f6dffb2a778e383a82c3d0cdb6e9d9d552 (patch) | |
tree | 3bfc9bb0d705a1c198c19b62fe134bda525e51ad /source/blender/gpu/intern | |
parent | 5ec0250df9d8cf44d099e5b6fffca99bf9cf0c46 (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.hh | 26 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_shader_private.hh | 5 |
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); }; |