diff options
Diffstat (limited to 'source/blender/gpu')
-rw-r--r-- | source/blender/gpu/CMakeLists.txt | 4 | ||||
-rw-r--r-- | source/blender/gpu/GPU_material.h | 20 | ||||
-rw-r--r-- | source/blender/gpu/GPU_shader.h | 2 | ||||
-rw-r--r-- | source/blender/gpu/GPU_uniform_buffer.h (renamed from source/blender/gpu/GPU_uniformbuffer.h) | 20 | ||||
-rw-r--r-- | source/blender/gpu/GPU_viewport.h | 4 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_codegen.c | 2 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_material.c | 37 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_node_graph.c | 8 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_shader.cc | 2 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_shader_builtin.c | 2 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_uniform_buffer.cc (renamed from source/blender/gpu/intern/gpu_uniformbuffer.cc) | 48 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_viewport.c | 6 |
12 files changed, 82 insertions, 73 deletions
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 50a5a0243f8..3b867429acc 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -84,7 +84,7 @@ set(SRC intern/gpu_shader_interface.cc intern/gpu_state.cc intern/gpu_texture.cc - intern/gpu_uniformbuffer.cc + intern/gpu_uniform_buffer.cc intern/gpu_vertex_buffer.cc intern/gpu_vertex_format.cc intern/gpu_viewport.c @@ -122,7 +122,7 @@ set(SRC GPU_shader.h GPU_state.h GPU_texture.h - GPU_uniformbuffer.h + GPU_uniform_buffer.h GPU_vertex_buffer.h GPU_vertex_format.h GPU_viewport.h diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h index 9dcf9b7d5bb..680e717e615 100644 --- a/source/blender/gpu/GPU_material.h +++ b/source/blender/gpu/GPU_material.h @@ -39,7 +39,7 @@ struct GPUNode; struct GPUNodeLink; struct GPUNodeStack; struct GPUTexture; -struct GPUUniformBuffer; +struct GPUUniformBuf; struct Image; struct ImageUser; struct ListBase; @@ -158,10 +158,10 @@ bool GPU_stack_link(GPUMaterial *mat, GPUNodeStack *in, GPUNodeStack *out, ...); -GPUNodeLink *GPU_uniformbuffer_link_out(struct GPUMaterial *mat, - struct bNode *node, - struct GPUNodeStack *stack, - const int index); +GPUNodeLink *GPU_uniformbuf_link_out(struct GPUMaterial *mat, + struct bNode *node, + struct GPUNodeStack *stack, + const int index); void GPU_material_output_link(GPUMaterial *material, GPUNodeLink *link); @@ -169,9 +169,9 @@ void GPU_material_sss_profile_create(GPUMaterial *material, float radii[3], const short *falloff_type, const float *sharpness); -struct GPUUniformBuffer *GPU_material_sss_profile_get(GPUMaterial *material, - int sample_len, - struct GPUTexture **tex_profile); +struct GPUUniformBuf *GPU_material_sss_profile_get(GPUMaterial *material, + int sample_len, + struct GPUTexture **tex_profile); /* High level functions to create and use GPU materials */ GPUMaterial *GPU_material_from_nodetree_find(struct ListBase *gpumaterials, @@ -201,9 +201,9 @@ struct GPUShader *GPU_material_get_shader(GPUMaterial *material); struct Material *GPU_material_get_material(GPUMaterial *material); eGPUMaterialStatus GPU_material_status(GPUMaterial *mat); -struct GPUUniformBuffer *GPU_material_uniform_buffer_get(GPUMaterial *material); +struct GPUUniformBuf *GPU_material_uniform_buffer_get(GPUMaterial *material); void GPU_material_uniform_buffer_create(GPUMaterial *material, ListBase *inputs); -struct GPUUniformBuffer *GPU_material_create_sss_profile_ubo(void); +struct GPUUniformBuf *GPU_material_create_sss_profile_ubo(void); bool GPU_material_has_surface_output(GPUMaterial *mat); bool GPU_material_has_volume_output(GPUMaterial *mat); diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index b38cc1f3244..0aff7b11fc1 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -28,7 +28,7 @@ extern "C" { #endif struct GPUTexture; -struct GPUUniformBuffer; +struct GPUUniformBuf; struct GPUVertBuf; /* TODO(fclem) These members should be private and the diff --git a/source/blender/gpu/GPU_uniformbuffer.h b/source/blender/gpu/GPU_uniform_buffer.h index e2b2a757fb9..2f3ce61bce0 100644 --- a/source/blender/gpu/GPU_uniformbuffer.h +++ b/source/blender/gpu/GPU_uniform_buffer.h @@ -29,22 +29,20 @@ extern "C" { struct ListBase; -typedef struct GPUUniformBuffer GPUUniformBuffer; +typedef struct GPUUniformBuf GPUUniformBuf; -GPUUniformBuffer *GPU_uniformbuffer_create(int size, const void *data, char err_out[256]); -GPUUniformBuffer *GPU_uniformbuffer_dynamic_create(struct ListBase *inputs, char err_out[256]); +GPUUniformBuf *GPU_uniformbuf_create_ex(size_t size, const void *data, const char *name); +GPUUniformBuf *GPU_uniformbuf_dynamic_create(struct ListBase *inputs, const char *name); -void GPU_uniformbuffer_free(GPUUniformBuffer *ubo); +#define GPU_uniformbuf_create(size) GPU_uniformbuf_create_ex(size, NULL, __func__); -void GPU_uniformbuffer_update(GPUUniformBuffer *ubo, const void *data); -void GPU_uniformbuffer_dynamic_update(GPUUniformBuffer *ubo_); +void GPU_uniformbuf_free(GPUUniformBuf *ubo); -void GPU_uniformbuffer_bind(GPUUniformBuffer *ubo, int number); -void GPU_uniformbuffer_unbind(GPUUniformBuffer *ubo); -void GPU_uniformbuffer_unbind_all(void); +void GPU_uniformbuf_update(GPUUniformBuf *ubo, const void *data); -bool GPU_uniformbuffer_is_empty(GPUUniformBuffer *ubo); -bool GPU_uniformbuffer_is_dirty(GPUUniformBuffer *ubo); +void GPU_uniformbuf_bind(GPUUniformBuf *ubo, int number); +void GPU_uniformbuf_unbind(GPUUniformBuf *ubo); +void GPU_uniformbuf_unbind_all(void); #define GPU_UBO_BLOCK_NAME "nodeTree" diff --git a/source/blender/gpu/GPU_viewport.h b/source/blender/gpu/GPU_viewport.h index 60b78ecd59b..c3e2f1788b4 100644 --- a/source/blender/gpu/GPU_viewport.h +++ b/source/blender/gpu/GPU_viewport.h @@ -55,8 +55,8 @@ typedef struct ViewportMemoryPool { struct BLI_memblock *views; struct BLI_memblock *passes; struct BLI_memblock *images; - struct GPUUniformBuffer **matrices_ubo; - struct GPUUniformBuffer **obinfos_ubo; + struct GPUUniformBuf **matrices_ubo; + struct GPUUniformBuf **obinfos_ubo; uint ubo_len; } ViewportMemoryPool; diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index b051d4fe59a..1629584e841 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -43,7 +43,7 @@ #include "GPU_extensions.h" #include "GPU_material.h" #include "GPU_shader.h" -#include "GPU_uniformbuffer.h" +#include "GPU_uniform_buffer.h" #include "GPU_vertex_format.h" #include "BLI_sys_types.h" /* for intptr_t support */ diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 8df1f94238a..95fb0aa56fc 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -47,7 +47,7 @@ #include "GPU_material.h" #include "GPU_shader.h" #include "GPU_texture.h" -#include "GPU_uniformbuffer.h" +#include "GPU_uniform_buffer.h" #include "DRW_engine.h" @@ -88,11 +88,11 @@ struct GPUMaterial { eGPUMatFlag flag; /* Used by 2.8 pipeline */ - GPUUniformBuffer *ubo; /* UBOs for shader uniforms. */ + GPUUniformBuf *ubo; /* UBOs for shader uniforms. */ /* Eevee SSS */ - GPUUniformBuffer *sss_profile; /* UBO containing SSS profile. */ - GPUTexture *sss_tex_profile; /* Texture containing SSS profile. */ + GPUUniformBuf *sss_profile; /* UBO containing SSS profile. */ + GPUTexture *sss_tex_profile; /* Texture containing SSS profile. */ float sss_enabled; float sss_radii[3]; int sss_samples; @@ -174,13 +174,13 @@ static void gpu_material_free_single(GPUMaterial *material) GPU_pass_release(material->pass); } if (material->ubo != NULL) { - GPU_uniformbuffer_free(material->ubo); + GPU_uniformbuf_free(material->ubo); } if (material->sss_tex_profile != NULL) { GPU_texture_free(material->sss_tex_profile); } if (material->sss_profile != NULL) { - GPU_uniformbuffer_free(material->sss_profile); + GPU_uniformbuf_free(material->sss_profile); } if (material->coba_tex != NULL) { GPU_texture_free(material->coba_tex); @@ -220,7 +220,7 @@ Material *GPU_material_get_material(GPUMaterial *material) return material->ma; } -GPUUniformBuffer *GPU_material_uniform_buffer_get(GPUMaterial *material) +GPUUniformBuf *GPU_material_uniform_buffer_get(GPUMaterial *material) { return material->ubo; } @@ -232,7 +232,12 @@ GPUUniformBuffer *GPU_material_uniform_buffer_get(GPUMaterial *material) */ void GPU_material_uniform_buffer_create(GPUMaterial *material, ListBase *inputs) { - material->ubo = GPU_uniformbuffer_dynamic_create(inputs, NULL); +#ifndef NDEBUG + const char *name = material->name; +#else + const char *name = NULL; +#endif + material->ubo = GPU_uniformbuf_dynamic_create(inputs, name); } /* Eevee Subsurface scattering. */ @@ -507,13 +512,13 @@ void GPU_material_sss_profile_create(GPUMaterial *material, /* Update / Create UBO */ if (material->sss_profile == NULL) { - material->sss_profile = GPU_uniformbuffer_create(sizeof(GPUSssKernelData), NULL, NULL); + material->sss_profile = GPU_uniformbuf_create(sizeof(GPUSssKernelData)); } } -struct GPUUniformBuffer *GPU_material_sss_profile_get(GPUMaterial *material, - int sample_len, - GPUTexture **tex_profile) +struct GPUUniformBuf *GPU_material_sss_profile_get(GPUMaterial *material, + int sample_len, + GPUTexture **tex_profile) { if (!material->sss_enabled) { return NULL; @@ -530,7 +535,7 @@ struct GPUUniformBuffer *GPU_material_sss_profile_get(GPUMaterial *material, compute_sss_kernel(&kd, material->sss_radii, sample_len, material->sss_falloff, sharpness); /* Update / Create UBO */ - GPU_uniformbuffer_update(material->sss_profile, &kd); + GPU_uniformbuf_update(material->sss_profile, &kd); /* Update / Create Tex */ float *translucence_profile; @@ -555,9 +560,9 @@ struct GPUUniformBuffer *GPU_material_sss_profile_get(GPUMaterial *material, return material->sss_profile; } -struct GPUUniformBuffer *GPU_material_create_sss_profile_ubo(void) +struct GPUUniformBuf *GPU_material_create_sss_profile_ubo(void) { - return GPU_uniformbuffer_create(sizeof(GPUSssKernelData), NULL, NULL); + return GPU_uniformbuf_create(sizeof(GPUSssKernelData)); } #undef SSS_EXPONENT @@ -735,7 +740,7 @@ GPUMaterial *GPU_material_from_nodetree(Scene *scene, gpu_node_graph_free(&mat->graph); } - /* Only free after GPU_pass_shader_get where GPUUniformBuffer + /* Only free after GPU_pass_shader_get where GPUUniformBuf * read data from the local tree. */ ntreeFreeLocalTree(localtree); MEM_freeN(localtree); diff --git a/source/blender/gpu/intern/gpu_node_graph.c b/source/blender/gpu/intern/gpu_node_graph.c index 81cf2d69f4d..1b8a5e20240 100644 --- a/source/blender/gpu/intern/gpu_node_graph.c +++ b/source/blender/gpu/intern/gpu_node_graph.c @@ -592,10 +592,10 @@ bool GPU_stack_link(GPUMaterial *material, return true; } -GPUNodeLink *GPU_uniformbuffer_link_out(GPUMaterial *mat, - bNode *node, - GPUNodeStack *stack, - const int index) +GPUNodeLink *GPU_uniformbuf_link_out(GPUMaterial *mat, + bNode *node, + GPUNodeStack *stack, + const int index) { return gpu_uniformbuffer_link(mat, node, stack, index, SOCK_OUT); } diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc index 21678548b13..9437da19b78 100644 --- a/source/blender/gpu/intern/gpu_shader.cc +++ b/source/blender/gpu/intern/gpu_shader.cc @@ -41,7 +41,7 @@ #include "GPU_platform.h" #include "GPU_shader.h" #include "GPU_texture.h" -#include "GPU_uniformbuffer.h" +#include "GPU_uniform_buffer.h" #include "gpu_backend.hh" #include "gpu_context_private.hh" diff --git a/source/blender/gpu/intern/gpu_shader_builtin.c b/source/blender/gpu/intern/gpu_shader_builtin.c index da5bcaeca17..ed95a236da5 100644 --- a/source/blender/gpu/intern/gpu_shader_builtin.c +++ b/source/blender/gpu/intern/gpu_shader_builtin.c @@ -40,7 +40,7 @@ #include "GPU_platform.h" #include "GPU_shader.h" #include "GPU_texture.h" -#include "GPU_uniformbuffer.h" +#include "GPU_uniform_buffer.h" /* Adjust these constants as needed. */ #define MAX_DEFINE_LENGTH 256 diff --git a/source/blender/gpu/intern/gpu_uniformbuffer.cc b/source/blender/gpu/intern/gpu_uniform_buffer.cc index e203ffd848f..76459dcf9f0 100644 --- a/source/blender/gpu/intern/gpu_uniformbuffer.cc +++ b/source/blender/gpu/intern/gpu_uniform_buffer.cc @@ -33,46 +33,52 @@ #include "GPU_extensions.h" #include "GPU_glew.h" #include "GPU_material.h" -#include "GPU_uniformbuffer.h" +#include "GPU_uniform_buffer.h" -typedef struct GPUUniformBuffer { +typedef struct GPUUniformBuf { /** Data size in bytes. */ int size; /** GL handle for UBO. */ GLuint bindcode; /** Current binding point. */ int bindpoint; - /** Continuous memory block to copy to GPU. Is own by the GPUUniformBuffer. */ + /** Continuous memory block to copy to GPU. Is own by the GPUUniformBuf. */ void *data; -} GPUUniformBuffer; -GPUUniformBuffer *GPU_uniformbuffer_create(int size, const void *data, char err_out[256]) +#ifndef NDEBUG + char name[64]; +#endif +} GPUUniformBuf; + +GPUUniformBuf *GPU_uniformbuf_create_ex(size_t size, const void *data, const char *name) { /* Make sure that UBO is padded to size of vec4 */ BLI_assert((size % 16) == 0); if (size > GPU_max_ubo_size()) { - if (err_out) { - BLI_strncpy(err_out, "GPUUniformBuffer: UBO too big", 256); - } + fprintf(stderr, "GPUUniformBuf: UBO too big. %s", name); return NULL; } - GPUUniformBuffer *ubo = (GPUUniformBuffer *)MEM_mallocN(sizeof(GPUUniformBuffer), __func__); + GPUUniformBuf *ubo = (GPUUniformBuf *)MEM_mallocN(sizeof(GPUUniformBuf), __func__); ubo->size = size; ubo->data = NULL; ubo->bindcode = 0; ubo->bindpoint = -1; +#ifndef NDEBUG + BLI_strncpy(ubo->name, name, sizeof(ubo->name)); +#endif + /* Direct init. */ if (data != NULL) { - GPU_uniformbuffer_update(ubo, data); + GPU_uniformbuf_update(ubo, data); } return ubo; } -void GPU_uniformbuffer_free(GPUUniformBuffer *ubo) +void GPU_uniformbuf_free(GPUUniformBuf *ubo) { MEM_SAFE_FREE(ubo->data); GPU_buf_free(ubo->bindcode); @@ -179,7 +185,7 @@ static void gpu_uniformbuffer_inputs_sort(ListBase *inputs) * * \param inputs: ListBase of #BLI_genericNodeN(#GPUInput). */ -GPUUniformBuffer *GPU_uniformbuffer_dynamic_create(ListBase *inputs, char err_out[256]) +GPUUniformBuf *GPU_uniformbuf_dynamic_create(ListBase *inputs, const char *name) { /* There is no point on creating an UBO if there is no arguments. */ if (BLI_listbase_is_empty(inputs)) { @@ -208,19 +214,19 @@ GPUUniformBuffer *GPU_uniformbuffer_dynamic_create(ListBase *inputs, char err_ou } /* Pass data as NULL for late init. */ - GPUUniformBuffer *ubo = GPU_uniformbuffer_create(buffer_size, NULL, err_out); + GPUUniformBuf *ubo = GPU_uniformbuf_create_ex(buffer_size, NULL, name); /* Data will be update just before binding. */ ubo->data = data; return ubo; } -static void gpu_uniformbuffer_init(GPUUniformBuffer *ubo) +static void gpu_uniformbuffer_init(GPUUniformBuf *ubo) { BLI_assert(ubo->bindcode == 0); ubo->bindcode = GPU_buf_alloc(); if (ubo->bindcode == 0) { - fprintf(stderr, "GPUUniformBuffer: UBO create failed"); + fprintf(stderr, "GPUUniformBuf: UBO create failed"); BLI_assert(0); return; } @@ -229,7 +235,7 @@ static void gpu_uniformbuffer_init(GPUUniformBuffer *ubo) glBufferData(GL_UNIFORM_BUFFER, ubo->size, NULL, GL_DYNAMIC_DRAW); } -void GPU_uniformbuffer_update(GPUUniformBuffer *ubo, const void *data) +void GPU_uniformbuf_update(GPUUniformBuf *ubo, const void *data) { if (ubo->bindcode == 0) { gpu_uniformbuffer_init(ubo); @@ -240,10 +246,10 @@ void GPU_uniformbuffer_update(GPUUniformBuffer *ubo, const void *data) glBindBuffer(GL_UNIFORM_BUFFER, 0); } -void GPU_uniformbuffer_bind(GPUUniformBuffer *ubo, int number) +void GPU_uniformbuf_bind(GPUUniformBuf *ubo, int number) { if (number >= GPU_max_ubo_binds()) { - fprintf(stderr, "Not enough UBO slots.\n"); + fprintf(stderr, "GPUUniformBuf: UBO too big."); return; } @@ -252,7 +258,7 @@ void GPU_uniformbuffer_bind(GPUUniformBuffer *ubo, int number) } if (ubo->data != NULL) { - GPU_uniformbuffer_update(ubo, ubo->data); + GPU_uniformbuf_update(ubo, ubo->data); MEM_SAFE_FREE(ubo->data); } @@ -260,7 +266,7 @@ void GPU_uniformbuffer_bind(GPUUniformBuffer *ubo, int number) ubo->bindpoint = number; } -void GPU_uniformbuffer_unbind(GPUUniformBuffer *ubo) +void GPU_uniformbuf_unbind(GPUUniformBuf *ubo) { #ifndef NDEBUG glBindBufferBase(GL_UNIFORM_BUFFER, ubo->bindpoint, 0); @@ -268,7 +274,7 @@ void GPU_uniformbuffer_unbind(GPUUniformBuffer *ubo) ubo->bindpoint = 0; } -void GPU_uniformbuffer_unbind_all(void) +void GPU_uniformbuf_unbind_all(void) { for (int i = 0; i < GPU_max_ubo_binds(); i++) { glBindBufferBase(GL_UNIFORM_BUFFER, i, 0); diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index ba938349761..fd1265dc2a6 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -41,7 +41,7 @@ #include "GPU_immediate.h" #include "GPU_matrix.h" #include "GPU_texture.h" -#include "GPU_uniformbuffer.h" +#include "GPU_uniform_buffer.h" #include "GPU_viewport.h" #include "DRW_engine.h" @@ -1020,8 +1020,8 @@ void GPU_viewport_free(GPUViewport *viewport) } for (int i = 0; i < viewport->vmempool.ubo_len; i++) { - GPU_uniformbuffer_free(viewport->vmempool.matrices_ubo[i]); - GPU_uniformbuffer_free(viewport->vmempool.obinfos_ubo[i]); + GPU_uniformbuf_free(viewport->vmempool.matrices_ubo[i]); + GPU_uniformbuf_free(viewport->vmempool.obinfos_ubo[i]); } MEM_SAFE_FREE(viewport->vmempool.matrices_ubo); MEM_SAFE_FREE(viewport->vmempool.obinfos_ubo); |