Lines Matching refs:save
153 struct vbo_save_context *save = &vbo_context(ctx)->save;
155 GLuint sz = save->vertex_size;
161 assert(save->copied.buffer == NULL);
162 save->copied.buffer = malloc(sizeof(fi_type) * sz * prim->count);
165 prim->begin, sz, true, save->copied.buffer, src);
167 free(save->copied.buffer);
168 save->copied.buffer = NULL;
193 struct vbo_save_context *save = &vbo_context(ctx)->save;
195 save->vertex_store->used = 0;
196 save->prim_store->used = 0;
197 save->dangling_attr_ref = GL_FALSE;
247 convert_line_loop_to_strip(struct vbo_save_context *save,
258 const GLuint sz = save->vertex_size;
260 const fi_type *src = save->vertex_store->buffer_in_ram + prim->start * sz;
262 fi_type *dst = save->vertex_store->buffer_in_ram + (prim->start + prim->count) * sz;
268 save->vertex_store->used += sz;
401 struct vbo_save_context *save = &vbo_context(ctx)->save;
402 assert (save->vertex_store);
404 int new_size = (save->vertex_store->used +
405 vertex_count * save->vertex_size) * sizeof(GLfloat);
408 if (save->prim_store->used > 0 &&
415 if (new_size > save->vertex_store->buffer_in_ram_size) {
416 save->vertex_store->buffer_in_ram_size = new_size;
417 save->vertex_store->buffer_in_ram = realloc(save->vertex_store->buffer_in_ram,
418 save->vertex_store->buffer_in_ram_size);
419 if (save->vertex_store->buffer_in_ram == NULL)
420 save->out_of_memory = true;
458 add_vertex(struct vbo_save_context *save, struct hash_table *hash_to_index,
465 fi_type *vert = save->vertex_store->buffer_in_ram + save->vertex_size * index;
468 key->vertex_size = save->vertex_size;
484 memcpy(&new_buffer[save->vertex_size * n],
486 save->vertex_size * sizeof(fi_type));
499 get_vertex_count(struct vbo_save_context *save)
501 if (!save->vertex_size)
503 return save->vertex_store->used / save->vertex_size;
514 struct vbo_save_context *save = &vbo_context(ctx)->save;
521 _mesa_dlist_alloc_vertex_list(ctx, !save->dangling_attr_ref && !save->no_current_update);
531 const GLsizei stride = save->vertex_size*sizeof(GLfloat);
533 node->cold->vertex_count = get_vertex_count(save);
534 node->cold->wrap_count = save->copied.nr;
535 node->cold->prims = malloc(sizeof(struct _mesa_prim) * save->prim_store->used);
536 memcpy(node->cold->prims, save->prim_store->prims, sizeof(struct _mesa_prim) * save->prim_store->used);
538 node->cold->prim_count = save->prim_store->used;
540 if (save->no_current_update) {
544 GLuint current_size = save->vertex_size - save->attrsz[0];
550 const char *buffer = (const char *)save->vertex_store->buffer_in_ram;
551 unsigned attr_offset = save->attrsz[0] * sizeof(GLfloat);
561 save->out_of_memory = true;
566 assert(save->attrsz[VBO_ATTRIB_POS] != 0 || node->cold->vertex_count == 0);
568 if (save->dangling_attr_ref)
573 save->copied.nr = copy_vertices(ctx, node, save->vertex_store->buffer_in_ram);
576 convert_line_loop_to_strip(save, node);
616 temp_vertices_buffer = malloc(save->vertex_store->buffer_in_ram_size);
680 indices[idx + 1] = add_vertex(save, vertex_to_index,
688 indices[idx++] = add_vertex(save, vertex_to_index,
707 indices[idx++] = add_vertex(save, vertex_to_index,
712 indices[idx++] = add_vertex(save, vertex_to_index,
723 indices[idx++] = add_vertex(save, vertex_to_index,
733 indices[idx++] = add_vertex(save, vertex_to_index,
767 total_vert_count * save->vertex_size * sizeof(fi_type);
769 const GLintptr old_offset = save->VAO[0] ?
770 save->VAO[0]->BufferBinding[0].Offset + save->VAO[0]->VertexAttrib[VERT_ATTRIB_POS].RelativeOffset : 0;
771 if (old_offset != save->current_bo_bytes_used && stride > 0) {
772 GLintptr offset_diff = save->current_bo_bytes_used - old_offset;
774 save->current_bo_bytes_used < save->current_bo->Size &&
776 save->current_bo_bytes_used++;
777 offset_diff = save->current_bo_bytes_used - old_offset;
780 buffer_offset = save->current_bo_bytes_used;
783 int available_bytes = save->current_bo ? save->current_bo->Size - save->current_bo_bytes_used : 0;
785 if (save->current_bo)
786 _mesa_reference_buffer_object(ctx, &save->current_bo, NULL);
787 save->current_bo = _mesa_bufferobj_alloc(ctx, VBO_BUF_ID + 1);
794 save->current_bo);
796 _mesa_reference_buffer_object(ctx, &save->current_bo, NULL);
798 save->out_of_memory = true;
800 save->current_bo_bytes_used = 0;
801 available_bytes = save->current_bo->Size;
840 _mesa_reference_buffer_object(ctx, &node->cold->ib.obj, save->current_bo);
844 save->current_bo_bytes_used,
845 total_vert_count * save->vertex_size * sizeof(fi_type),
846 vertex_to_index ? temp_vertices_buffer : save->vertex_store->buffer_in_ram,
848 save->current_bo_bytes_used += total_vert_count * save->vertex_size * sizeof(fi_type);
858 save->current_bo_bytes_used += align(save->current_bo_bytes_used, 4) - save->current_bo_bytes_used;
859 int indices_offset = save->current_bo_bytes_used / 4;
868 save->current_bo_bytes_used,
872 save->current_bo_bytes_used += idx * sizeof(uint32_t);
921 if (!save->current_bo) {
922 save->current_bo = _mesa_bufferobj_alloc(ctx, VBO_BUF_ID + 1);
929 save->current_bo);
931 save->out_of_memory = true;
937 offset += save->attrsz[i] * sizeof(GLfloat);
944 update_vao(ctx, vpm, &save->VAO[vpm],
945 save->current_bo, buffer_offset, stride,
946 save->enabled, save->attrsz, save->attrtype, offsets);
949 _mesa_reference_vao(ctx, &node->cold->VAO[vpm], save->VAO[vpm]);
989 _vbo_loopback_vertex_list(ctx, node, save->vertex_store->buffer_in_ram);
1009 struct vbo_save_context *save = &vbo_context(ctx)->save;
1010 GLint i = save->prim_store->used - 1;
1013 assert(i < (GLint) save->prim_store->size);
1018 save->prim_store->prims[i].count = (get_vertex_count(save) - save->prim_store->prims[i].start);
1019 mode = save->prim_store->prims[i].mode;
1027 save->prim_store->prims[0].mode = mode;
1028 save->prim_store->prims[0].begin = 0;
1029 save->prim_store->prims[0].end = 0;
1030 save->prim_store->prims[0].start = 0;
1031 save->prim_store->prims[0].count = 0;
1032 save->prim_store->used = 1;
1043 struct vbo_save_context *save = &vbo_context(ctx)->save;
1050 assert(save->vertex_store->used == 0 && save->vertex_store->used == 0);
1054 numComponents = save->copied.nr * save->vertex_size;
1056 fi_type *buffer_ptr = save->vertex_store->buffer_in_ram;
1058 assert(save->copied.buffer);
1060 save->copied.buffer,
1062 free(save->copied.buffer);
1063 save->copied.buffer = NULL;
1065 save->vertex_store->used = numComponents;
1072 struct vbo_save_context *save = &vbo_context(ctx)->save;
1073 GLbitfield64 enabled = save->enabled & (~BITFIELD64_BIT(VBO_ATTRIB_POS));
1077 assert(save->attrsz[i]);
1079 if (save->attrtype[i] == GL_DOUBLE ||
1080 save->attrtype[i] == GL_UNSIGNED_INT64_ARB)
1081 memcpy(save->current[i], save->attrptr[i], save->attrsz[i] * sizeof(GLfloat));
1083 COPY_CLEAN_4V_TYPE_AS_UNION(save->current[i], save->attrsz[i],
1084 save->attrptr[i], save->attrtype[i]);
1092 struct vbo_save_context *save = &vbo_context(ctx)->save;
1093 GLbitfield64 enabled = save->enabled & (~BITFIELD64_BIT(VBO_ATTRIB_POS));
1098 switch (save->attrsz[i]) {
1100 save->attrptr[i][3] = save->current[i][3];
1103 save->attrptr[i][2] = save->current[i][2];
1106 save->attrptr[i][1] = save->current[i][1];
1109 save->attrptr[i][0] = save->current[i][0];
1127 struct vbo_save_context *save = &vbo_context(ctx)->save;
1135 if (save->vertex_store->used)
1138 assert(save->copied.nr == 0);
1148 oldsz = save->attrsz[attr];
1149 save->attrsz[attr] = newsz;
1150 save->enabled |= BITFIELD64_BIT(attr);
1152 save->vertex_size += newsz - oldsz;
1156 tmp = save->vertex;
1158 if (save->attrsz[i]) {
1159 save->attrptr[i] = tmp;
1160 tmp += save->attrsz[i];
1163 save->attrptr[i] = NULL; /* will not be dereferenced. */
1177 if (save->copied.nr) {
1178 assert(save->copied.buffer);
1179 const fi_type *data = save->copied.buffer;
1180 grow_vertex_storage(ctx, save->copied.nr);
1181 fi_type *dest = save->vertex_store->buffer_in_ram;
1185 if (attr != VBO_ATTRIB_POS && save->currentsz[attr][0] == 0) {
1187 save->dangling_attr_ref = GL_TRUE;
1190 for (i = 0; i < save->copied.nr; i++) {
1191 GLbitfield64 enabled = save->enabled;
1194 assert(save->attrsz[j]);
1197 const fi_type *src = oldsz ? data : save->current[attr];
1202 switch (save->attrtype[j]) {
1221 GLint sz = save->attrsz[j];
1230 save->vertex_store->used += save->vertex_size * save->copied.nr;
1231 free(save->copied.buffer);
1232 save->copied.buffer = NULL;
1246 struct vbo_save_context *save = &vbo_context(ctx)->save;
1248 if (sz > save->attrsz[attr] ||
1249 newType != save->attrtype[attr]) {
1255 else if (sz < save->active_sz[attr]) {
1257 const fi_type *id = vbo_get_default_vals_as_union(save->attrtype[attr]);
1262 for (i = sz; i <= save->attrsz[attr]; i++)
1263 save->attrptr[attr][i - 1] = id[i - 1];
1266 save->active_sz[attr] = sz;
1280 struct vbo_save_context *save = &vbo_context(ctx)->save;
1282 while (save->enabled) {
1283 const int i = u_bit_scan64(&save->enabled);
1284 assert(save->attrsz[i]);
1285 save->attrsz[i] = 0;
1286 save->active_sz[i] = 0;
1289 save->vertex_size = 0;
1319 struct vbo_save_context *save = &vbo_context(ctx)->save; \
1322 if (save->active_sz[A] != N) \
1326 C *dest = (C *)save->attrptr[A]; \
1331 save->attrtype[A] = T; \
1335 fi_type *buffer_ptr = save->vertex_store->buffer_in_ram + \
1336 save->vertex_store->used; \
1338 for (int i = 0; i < save->vertex_size; i++) \
1339 buffer_ptr[i] = save->vertex[i]; \
1341 save->vertex_store->used += save->vertex_size; \
1342 unsigned used_next = (save->vertex_store->used + \
1343 save->vertex_size) * sizeof(float); \
1344 if (used_next > save->vertex_store->buffer_in_ram_size) { \
1345 grow_vertex_storage(ctx, get_vertex_count(save)); \
1347 save->vertex_store->buffer_in_ram_size); \
1426 struct vbo_save_context *save = &vbo_context(ctx)->save;
1428 if (save->vertex_store->used || save->prim_store->used) {
1429 if (save->prim_store->used > 0 && save->vertex_store->used > 0) {
1430 assert(save->vertex_size);
1432 GLint i = save->prim_store->used - 1;
1433 save->prim_store->prims[i].count =
1434 get_vertex_count(save) -
1435 save->prim_store->prims[i].start;
1442 save->dangling_attr_ref = GL_TRUE;
1449 if (save->out_of_memory) {
1533 struct vbo_save_context *save = &vbo_context(ctx)->save;
1534 const GLuint i = save->prim_store->used++;
1538 if (!save->prim_store || i >= save->prim_store->size) {
1539 save->prim_store = realloc_prim_store(save->prim_store, i * 2);
1541 save->prim_store->prims[i].mode = mode & VBO_SAVE_PRIM_MODE_MASK;
1542 save->prim_store->prims[i].begin = 1;
1543 save->prim_store->prims[i].end = 0;
1544 save->prim_store->prims[i].start = get_vertex_count(save);
1545 save->prim_store->prims[i].count = 0;
1547 save->no_current_update = no_current_update;
1560 struct vbo_save_context *save = &vbo_context(ctx)->save;
1561 const GLint i = save->prim_store->used - 1;
1564 save->prim_store->prims[i].end = 1;
1565 save->prim_store->prims[i].count = (get_vertex_count(save) - save->prim_store->prims[i].start);
1571 if (save->out_of_memory) {
1593 struct vbo_save_context *save = &vbo_context(ctx)->save;
1595 if (save->prim_store->used == 0) {
1603 GLenum curPrim = save->prim_store->prims[save->prim_store->used - 1].mode;
1604 bool no_current_update = save->no_current_update;
1674 struct vbo_save_context *save = &vbo_context(ctx)->save;
1686 if (save->out_of_memory)
1775 struct vbo_save_context *save = &vbo_context(ctx)->save;
1795 if (save->out_of_memory)
1848 struct vbo_save_context *save = &vbo_context(ctx)->save;
1871 if (save->out_of_memory)
1943 struct vbo_save_context *save = &vbo_context(ctx)->save;
1950 if (save->vertex_store->used || save->prim_store->used)
1965 struct vbo_save_context *save = &vbo_context(ctx)->save;
1970 if (!save->prim_store)
1971 save->prim_store = realloc_prim_store(NULL, 8);
1973 if (!save->vertex_store)
1974 save->vertex_store = CALLOC_STRUCT(vbo_save_vertex_store);
1987 struct vbo_save_context *save = &vbo_context(ctx)->save;
1992 if (save->prim_store->used > 0) {
1993 GLint i = save->prim_store->used - 1;
1995 save->prim_store->prims[i].end = 0;
1996 save->prim_store->prims[i].count = get_vertex_count(save) - save->prim_store->prims[i].start;
2002 save->dangling_attr_ref = GL_TRUE;
2012 assert(save->vertex_size == 0);
2021 struct vbo_save_context *save = &vbo_context(ctx)->save;
2027 save->currentsz[i] = &ctx->ListState.ActiveAttribSize[j];
2028 save->current[i] = (fi_type *) ctx->ListState.CurrentAttrib[j];
2034 save->currentsz[i] = &ctx->ListState.ActiveMaterialSize[j];
2035 save->current[i] = (fi_type *) ctx->ListState.CurrentMaterial[j];
2044 vbo_save_api_init(struct vbo_save_context *save)
2046 struct gl_context *ctx = gl_context_from_vbo_save(save);