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>2019-06-22 02:01:02 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-08-17 15:48:48 +0300
commit2b2e120126b64e9dfec914074edf29bd4752b50a (patch)
tree7b91488612cfd767cb1eabd95ff782a6001c3e60
parentaf48712d88dfe2a499a746b35d7bec29f9deeda2 (diff)
DRW: Put Transform Feedback buffer into DRWUniform
Since the transform feedback must be the same for the whole SHgroup, and since it is optional, put it in DRWUniform to make things cleaner.
-rw-r--r--source/blender/draw/intern/draw_manager.h8
-rw-r--r--source/blender/draw/intern/draw_manager_data.c3
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c16
3 files changed, 13 insertions, 14 deletions
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index 9ab8daa1b09..60d9ad3c064 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -180,6 +180,7 @@ typedef enum {
DRW_UNIFORM_TEXTURE_REF,
DRW_UNIFORM_BLOCK,
DRW_UNIFORM_BLOCK_PERSIST,
+ DRW_UNIFORM_TFEEDBACK_TARGET,
/** Per drawcall uniforms/UBO */
DRW_UNIFORM_BLOCK_OBMATS,
DRW_UNIFORM_BLOCK_OBINFOS,
@@ -202,10 +203,10 @@ struct DRWUniform {
int ivalue[4];
};
int location;
- uint32_t type : 4; /* DRWUniformType */
+ uint32_t type : 5; /* DRWUniformType */
uint32_t length : 5; /* cannot be more than 16 */
uint32_t arraysize : 5; /* cannot be more than 16 too */
- uint32_t name_ofs : 18; /* name offset in name buffer. */
+ uint32_t name_ofs : 17; /* name offset in name buffer. */
};
struct DRWShadingGroup {
@@ -220,9 +221,6 @@ struct DRWShadingGroup {
struct DRWCallChunk *first, *last;
} calls;
- /** TODO Maybe remove from here */
- struct GPUVertBuf *tfeedback_target;
-
/** State changes for this batch only (or'd with the pass's state) */
DRWState state_extra;
/** State changes for this batch only (and'd with the pass's state) */
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index 92588e4dd5c..df89ed00c55 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -1031,7 +1031,6 @@ static DRWShadingGroup *drw_shgroup_create_ex(struct GPUShader *shader, DRWPass
shgroup->stencil_mask = 0;
shgroup->calls.first = NULL;
shgroup->calls.last = NULL;
- shgroup->tfeedback_target = NULL;
shgroup->pass_parent = pass;
return shgroup;
@@ -1133,7 +1132,7 @@ DRWShadingGroup *DRW_shgroup_transform_feedback_create(struct GPUShader *shader,
BLI_assert(tf_target != NULL);
DRWShadingGroup *shgroup = drw_shgroup_create_ex(shader, pass);
drw_shgroup_init(shgroup, shader);
- shgroup->tfeedback_target = tf_target;
+ drw_shgroup_uniform_create_ex(shgroup, 0, DRW_UNIFORM_TFEEDBACK_TARGET, tf_target, 0, 1);
return shgroup;
}
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index d61eef3e728..fde1a0e601b 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -847,7 +847,8 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup,
int *chunkid_loc,
int *obmat_loc,
int *obinv_loc,
- int *mvp_loc)
+ int *mvp_loc,
+ bool *use_tfeedback)
{
for (DRWUniformChunk *unichunk = shgroup->uniforms; unichunk; unichunk = unichunk->next) {
DRWUniform *uni = unichunk->uniforms;
@@ -924,6 +925,11 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup,
*chunkid_loc = uni->location;
GPU_shader_uniform_int(shgroup->shader, uni->location, 0);
break;
+ case DRW_UNIFORM_TFEEDBACK_TARGET:
+ BLI_assert(data && (*use_tfeedback == false));
+ *use_tfeedback = GPU_shader_transform_feedback_enable(shgroup->shader,
+ ((GPUVertBuf *)data)->vbo_id);
+ break;
/* Legacy/Fallback support. */
case DRW_UNIFORM_BASE_INSTANCE:
*baseinst_loc = uni->location;
@@ -1226,11 +1232,6 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
DST.batch = NULL;
}
- if (shgroup->tfeedback_target != NULL) {
- use_tfeedback = GPU_shader_transform_feedback_enable(shgroup->shader,
- shgroup->tfeedback_target->vbo_id);
- }
-
release_ubo_slots(shader_changed);
release_texture_slots(shader_changed);
@@ -1244,7 +1245,8 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
&chunkid_loc,
&obmat_loc,
&obinv_loc,
- &mvp_loc);
+ &mvp_loc,
+ &use_tfeedback);
/* Rendering Calls */
{