[Bf-blender-cvs] [c255161] temp_display_optimization: Cleanup: Use GPU material counter instead of allocating new counter array every time.
Antony Riakiotakis
noreply at git.blender.org
Tue Jun 30 18:51:32 CEST 2015
Commit: c2551614685c2b12b2d660b9594b28d67ba3cd15
Author: Antony Riakiotakis
Date: Tue Jun 30 18:51:15 2015 +0200
Branches: temp_display_optimization
https://developer.blender.org/rBc2551614685c2b12b2d660b9594b28d67ba3cd15
Cleanup: Use GPU material counter instead of allocating new counter
array every time.
===================================================================
M source/blender/blenkernel/BKE_DerivedMesh.h
M source/blender/blenkernel/intern/cdderivedmesh.c
M source/blender/blenkernel/intern/subsurf_ccg.c
M source/blender/gpu/intern/gpu_buffers.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 79d0491..74f13ceb 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -465,8 +465,7 @@ struct DerivedMesh {
bool (*setFace)(void *userData, int index), void *userData);
struct GPUDrawObject *(*gpuObjectNew)(DerivedMesh *dm);
- void (*copy_gpu_data)(DerivedMesh *dm, int type, float *varray, int *index,
- int *mat_orig_to_new, void *user_data);
+ void (*copy_gpu_data)(DerivedMesh *dm, int type, float *varray, int *mat_orig_to_new, void *user_data);
/** Release reference to the DerivedMesh. This function decides internally
* if the DerivedMesh will be freed, or cached for later use. */
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index a378fad..4397c51 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1322,8 +1322,9 @@ static void cdDM_drawMappedEdges(DerivedMesh *dm, DMSetDrawOptions setDrawOption
glEnd();
}
-static void cdDM_buffer_copy_triangles(DerivedMesh *dm, float *varray_, int *index, int *mat_orig_to_new, void *UNUSED(user))
+static void cdDM_buffer_copy_triangles(DerivedMesh *dm, float *varray_, int *mat_orig_to_new, void *UNUSED(user))
{
+ GPUBufferMaterial *gpumat;
MFace *f;
int i, start, totface, findex = 0;
unsigned int *varray = (unsigned int *)varray_;
@@ -1332,7 +1333,8 @@ static void cdDM_buffer_copy_triangles(DerivedMesh *dm, float *varray_, int *ind
totface = dm->getNumTessFaces(dm);
for (i = 0; i < totface; i++, f++) {
- start = index[mat_orig_to_new[f->mat_nr]];
+ gpumat = dm->drawObject->materials + mat_orig_to_new[f->mat_nr];
+ start = gpumat->counter;
/* v1 v2 v3 */
varray[start++] = findex;
@@ -1345,17 +1347,17 @@ static void cdDM_buffer_copy_triangles(DerivedMesh *dm, float *varray_, int *ind
varray[start++] = findex + 3;
varray[start++] = findex;
- index[mat_orig_to_new[f->mat_nr]] += 6;
+ gpumat->counter += 6;
findex += 4;
}
else {
- index[mat_orig_to_new[f->mat_nr]] += 3;
+ gpumat->counter += 3;
findex += 3;
}
}
}
-static void cdDM_buffer_copy_vertex(DerivedMesh *dm, float *varray, int *UNUSED(index), int *UNUSED(mat_orig_to_new), void *UNUSED(user))
+static void cdDM_buffer_copy_vertex(DerivedMesh *dm, float *varray, int *UNUSED(mat_orig_to_new), void *UNUSED(user))
{
MVert *mvert;
MFace *f;
@@ -1390,7 +1392,7 @@ static void cdDM_buffer_copy_vertex(DerivedMesh *dm, float *varray, int *UNUSED(
}
}
-static void cdDM_buffer_copy_normal(DerivedMesh *dm, float *varray, int *UNUSED(index), int *UNUSED(mat_orig_to_new), void *UNUSED(user))
+static void cdDM_buffer_copy_normal(DerivedMesh *dm, float *varray, int *UNUSED(mat_orig_to_new), void *UNUSED(user))
{
int i, totface;
int start;
@@ -1463,7 +1465,7 @@ static void cdDM_buffer_copy_normal(DerivedMesh *dm, float *varray, int *UNUSED(
}
}
-static void cdDM_buffer_copy_uv(DerivedMesh *dm, float *varray, int *UNUSED(index), int *UNUSED(mat_orig_to_new), void *UNUSED(user))
+static void cdDM_buffer_copy_uv(DerivedMesh *dm, float *varray, int *UNUSED(mat_orig_to_new), void *UNUSED(user))
{
int start;
int i, totface;
@@ -1493,7 +1495,7 @@ static void cdDM_buffer_copy_uv(DerivedMesh *dm, float *varray, int *UNUSED(inde
}
-static void cdDM_buffer_copy_uv_texpaint(DerivedMesh *dm, float *varray, int *UNUSED(index), int *UNUSED(mat_orig_to_new), void *UNUSED(user))
+static void cdDM_buffer_copy_uv_texpaint(DerivedMesh *dm, float *varray, int *UNUSED(mat_orig_to_new), void *UNUSED(user))
{
int start;
int i, totface;
@@ -1551,7 +1553,7 @@ static void copy_mcol_uc3(unsigned char *v, unsigned char *col)
}
/* treat varray_ as an array of MCol, four MCol's per face */
-static void cdDM_buffer_copy_mcol(DerivedMesh *dm, float *varray_, int *UNUSED(index), int *UNUSED(mat_orig_to_new), void *user)
+static void cdDM_buffer_copy_mcol(DerivedMesh *dm, float *varray_, int *UNUSED(mat_orig_to_new), void *user)
{
int i, totface, start;
unsigned char *varray = (unsigned char *)varray_;
@@ -1575,7 +1577,7 @@ static void cdDM_buffer_copy_mcol(DerivedMesh *dm, float *varray_, int *UNUSED(i
}
}
-static void cdDM_buffer_copy_edge(DerivedMesh *dm, float *varray_, int *UNUSED(index), int *UNUSED(mat_orig_to_new), void *UNUSED(user))
+static void cdDM_buffer_copy_edge(DerivedMesh *dm, float *varray_, int *UNUSED(mat_orig_to_new), void *UNUSED(user))
{
MEdge *medge, *medge_base;
unsigned int *varray = (unsigned int *)varray_;
@@ -1635,7 +1637,7 @@ static void cdDM_buffer_copy_edge(DerivedMesh *dm, float *varray_, int *UNUSED(i
dm->drawObject->tot_edge_drawn = tot;
}
-static void cdDM_buffer_copy_uvedge(DerivedMesh *dm, float *varray, int *UNUSED(index), int *UNUSED(mat_orig_to_new), void *UNUSED(user))
+static void cdDM_buffer_copy_uvedge(DerivedMesh *dm, float *varray, int *UNUSED(mat_orig_to_new), void *UNUSED(user))
{
MTFace *tf = DM_get_tessface_data_layer(dm, CD_MTFACE);
int i, j = 0;
@@ -1669,33 +1671,33 @@ static void cdDM_buffer_copy_uvedge(DerivedMesh *dm, float *varray, int *UNUSED(
}
}
-static void cdDM_copy_gpu_data(DerivedMesh *dm, int type, float *varray, int *index,
+static void cdDM_copy_gpu_data(DerivedMesh *dm, int type, float *varray,
int *mat_orig_to_new, void *user_data)
{
switch(type) {
case GPU_BUFFER_VERTEX:
- cdDM_buffer_copy_vertex(dm, varray, index, mat_orig_to_new, user_data);
+ cdDM_buffer_copy_vertex(dm, varray, mat_orig_to_new, user_data);
break;
case GPU_BUFFER_NORMAL:
- cdDM_buffer_copy_normal(dm, varray, index, mat_orig_to_new, user_data);
+ cdDM_buffer_copy_normal(dm, varray, mat_orig_to_new, user_data);
break;
case GPU_BUFFER_COLOR:
- cdDM_buffer_copy_mcol(dm, varray, index, mat_orig_to_new, user_data);
+ cdDM_buffer_copy_mcol(dm, varray, mat_orig_to_new, user_data);
break;
case GPU_BUFFER_UV:
- cdDM_buffer_copy_uv(dm, varray, index, mat_orig_to_new, user_data);
+ cdDM_buffer_copy_uv(dm, varray, mat_orig_to_new, user_data);
break;
case GPU_BUFFER_UV_TEXPAINT:
- cdDM_buffer_copy_uv_texpaint(dm, varray, index, mat_orig_to_new, user_data);
+ cdDM_buffer_copy_uv_texpaint(dm, varray, mat_orig_to_new, user_data);
break;
case GPU_BUFFER_EDGE:
- cdDM_buffer_copy_edge(dm, varray, index, mat_orig_to_new, user_data);
+ cdDM_buffer_copy_edge(dm, varray, mat_orig_to_new, user_data);
break;
case GPU_BUFFER_UVEDGE:
- cdDM_buffer_copy_uvedge(dm, varray, index, mat_orig_to_new, user_data);
+ cdDM_buffer_copy_uvedge(dm, varray, mat_orig_to_new, user_data);
break;
case GPU_BUFFER_TRIANGLES:
- cdDM_buffer_copy_triangles(dm, varray, index, mat_orig_to_new, user_data);
+ cdDM_buffer_copy_triangles(dm, varray, mat_orig_to_new, user_data);
break;
case GPU_BUFFER_TRIANGLES_FAST:
/* only supported in subsurf */
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 9202fb6..efe11ac 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1763,7 +1763,7 @@ static void ccgDM_glNormalFast(float *a, float *b, float *c, float *d)
}
/* Only used by non-editmesh types */
-static void ccgDM_prepare_normal_data(DerivedMesh *dm, float *varray, int *UNUSED(vindex),
+static void ccgDM_prepare_normal_data(DerivedMesh *dm, float *varray,
int *UNUSED(mat_orig_to_new), void *UNUSED(user_data))
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
@@ -1857,9 +1857,10 @@ static void ccgDM_prepare_normal_data(DerivedMesh *dm, float *varray, int *UNUSE
}
/* Only used by non-editmesh types */
-static void ccgDM_prepare_triangle_data(DerivedMesh *dm, float *varray_, int *vindex,
+static void ccgDM_prepare_triangle_data(DerivedMesh *dm, float *varray_,
int *mat_orig_to_new, void *UNUSED(user_data))
{
+ GPUBufferMaterial *gpumat;
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGKey key;
@@ -1888,7 +1889,8 @@ static void ccgDM_prepare_triangle_data(DerivedMesh *dm, float *varray_, int *vi
for (S = 0; S < numVerts; S++) {
for (y = 0; y < gridFaces; y++) {
for (x = 0; x < gridFaces; x++) {
- start = vindex[mat_orig_to_new[matnr]];
+ gpumat = dm->drawObject->materials + mat_orig_to_new[matnr];
+ start = gpumat->counter;
varray[start] = totloops + 3;
varray[start + 1] = totloops + 2;
@@ -1898,7 +1900,7 @@ static void ccgDM_prepare_triangle_data(DerivedMesh *dm, float *varray_, int *vi
varray[start + 4] = totloops + 1;
varray[start + 5] = totloops;
- vindex[mat_orig_to_new[matnr]] += 6;
+ gpumat->counter += 6;
totloops += 4;
}
}
@@ -1908,7 +1910,7 @@ static void ccgDM_prepare_triangle_data(DerivedMesh *dm, float *varray_, int *vi
/* Only used by non-editmesh types */
-static void ccgDM_prepare_vertex_data(DerivedMesh *dm, float *varray, int *UNUSED(vindex),
+static void ccgDM_prepare_vertex_data(DerivedMesh *dm, float *varray,
int *UNUSED(mat_orig_to_new), void *UNUSED(user_data))
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
@@ -1955,7 +1957,7 @@ static void copy_mcol_uc3(unsigned char *v, unsigned char *col)
}
/* Only used by non-editmesh types */
-static void ccgDM_prepare_color_data(DerivedMesh *dm, float *varray_, int *UNUSED(vindex),
+static void ccgDM_prepare_color_data(DerivedMesh *dm, float *varray_,
int *UNUSED(mat_orig_to_new), void *user_data)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
@@ -1992,7 +1994,7 @@ static void ccgDM_prepare_color_data(DerivedMesh *dm, float *varray_, int *UNUSE
}
}
-static void ccgDM_prepare_uv_data(DerivedMesh *dm, float *varray, int *UNUSED(vindex),
+static void ccgDM_prepare_uv_data(DerivedMesh *dm, float *varray,
i
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list