[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