Lines Matching +full:vmware +full:- +full:rules
2 * Mesa 3-D graphics library
4 * Copyright (C) 2010 VMware, Inc. All Rights Reserved.
64 if (obj->Active && obj->program == callback_data->prog) in active_xfb_object_references_program()
65 callback_data->found = true; in active_xfb_object_references_program()
75 if (!shProg->last_vert_prog) in _mesa_transform_feedback_is_using_program()
80 callback_data.prog = shProg->last_vert_prog; in _mesa_transform_feedback_is_using_program()
82 _mesa_HashWalkLocked(&ctx->TransformFeedback.Objects, in _mesa_transform_feedback_is_using_program()
86 active_xfb_object_references_program(ctx->TransformFeedback.DefaultObject, in _mesa_transform_feedback_is_using_program()
101 obj->Name = name; in new_transform_feedback()
102 obj->RefCount = 1; in new_transform_feedback()
103 obj->EverBound = GL_FALSE; in new_transform_feedback()
114 for (i = 0; i < ARRAY_SIZE(obj->draw_count); i++) in delete_transform_feedback()
115 pipe_so_target_reference(&obj->draw_count[i], NULL); in delete_transform_feedback()
118 for (i = 0; i < obj->num_targets; i++) { in delete_transform_feedback()
119 pipe_so_target_reference(&obj->targets[i], NULL); in delete_transform_feedback()
122 for (unsigned i = 0; i < ARRAY_SIZE(obj->Buffers); i++) { in delete_transform_feedback()
123 _mesa_reference_buffer_object(ctx, &obj->Buffers[i], NULL); in delete_transform_feedback()
126 free(obj->Label); in delete_transform_feedback()
144 assert(oldObj->RefCount > 0); in reference_transform_feedback_object()
145 oldObj->RefCount--; in reference_transform_feedback_object()
147 if (oldObj->RefCount == 0) { in reference_transform_feedback_object()
158 assert(obj->RefCount > 0); in reference_transform_feedback_object()
161 obj->RefCount++; in reference_transform_feedback_object()
162 obj->EverBound = GL_TRUE; in reference_transform_feedback_object()
169 * Per-context init for transform feedback.
175 ctx->TransformFeedback.DefaultObject = in _mesa_init_transform_feedback()
178 assert(ctx->TransformFeedback.DefaultObject->RefCount == 1); in _mesa_init_transform_feedback()
180 reference_transform_feedback_object(&ctx->TransformFeedback.CurrentObject, in _mesa_init_transform_feedback()
181 ctx->TransformFeedback.DefaultObject); in _mesa_init_transform_feedback()
183 assert(ctx->TransformFeedback.DefaultObject->RefCount == 2); in _mesa_init_transform_feedback()
185 _mesa_InitHashTable(&ctx->TransformFeedback.Objects, ctx->Shared->ReuseGLNames); in _mesa_init_transform_feedback()
188 &ctx->TransformFeedback.CurrentBuffer, NULL); in _mesa_init_transform_feedback()
208 * Per-context free/clean-up for transform feedback.
215 &ctx->TransformFeedback.CurrentBuffer, in _mesa_free_transform_feedback()
219 _mesa_DeinitHashTable(&ctx->TransformFeedback.Objects, delete_cb, ctx); in _mesa_free_transform_feedback()
223 ctx->TransformFeedback.DefaultObject); in _mesa_free_transform_feedback()
225 ctx->TransformFeedback.CurrentObject = NULL; in _mesa_free_transform_feedback()
251 GLintptr offset = obj->Offset[i]; in compute_transform_feedback_buffer_sizes()
253 = obj->Buffers[i] == NULL ? 0 : obj->Buffers[i]->Size; in compute_transform_feedback_buffer_sizes()
255 = buffer_size <= offset ? 0 : buffer_size - offset; in compute_transform_feedback_buffer_sizes()
257 if (obj->RequestedSize[i] == 0) { in compute_transform_feedback_buffer_sizes()
268 computed_size = MIN2(available_space, obj->RequestedSize[i]); in compute_transform_feedback_buffer_sizes()
272 obj->Size[i] = computed_size & ~0x3; in compute_transform_feedback_buffer_sizes()
289 for (i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) { in _mesa_compute_max_transform_feedback_vertices()
290 if ((info->ActiveBuffers >> i) & 1) { in _mesa_compute_max_transform_feedback_vertices()
291 unsigned stride = info->Buffers[i].Stride; in _mesa_compute_max_transform_feedback_vertices()
298 max_for_this_buffer = obj->Size[i] / (4 * stride); in _mesa_compute_max_transform_feedback_vertices()
323 for (i = MESA_SHADER_GEOMETRY; i >= MESA_SHADER_VERTEX; i--) { in get_xfb_source()
324 if (ctx->_Shader->CurrentProgram[i] != NULL) in get_xfb_source()
325 return ctx->_Shader->CurrentProgram[i]; in get_xfb_source()
340 obj = ctx->TransformFeedback.CurrentObject; in begin_transform_feedback()
352 info = source->sh.LinkedTransformFeedback; in begin_transform_feedback()
354 if (!no_error && info->NumOutputs == 0) { in begin_transform_feedback()
381 if (obj->Active) { in begin_transform_feedback()
387 for (i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) { in begin_transform_feedback()
388 if ((info->ActiveBuffers >> i) & 1) { in begin_transform_feedback()
389 if (obj->BufferNames[i] == 0) { in begin_transform_feedback()
401 obj->Active = GL_TRUE; in begin_transform_feedback()
402 obj->Mode = mode; in begin_transform_feedback()
403 ctx->TransformFeedback.Mode = mode; in begin_transform_feedback()
416 obj->GlesRemainingPrims = max_vertices / vertices_per_prim; in begin_transform_feedback()
419 if (obj->program != source) { in begin_transform_feedback()
420 _mesa_reference_program_(ctx, &obj->program, source); in begin_transform_feedback()
421 obj->program = source; in begin_transform_feedback()
424 struct pipe_context *pipe = ctx->pipe; in begin_transform_feedback()
428 max_num_targets = MIN2(ARRAY_SIZE(obj->Buffers), in begin_transform_feedback()
429 ARRAY_SIZE(obj->targets)); in begin_transform_feedback()
433 struct gl_buffer_object *bo = obj->Buffers[i]; in begin_transform_feedback()
435 if (bo && bo->buffer) { in begin_transform_feedback()
436 unsigned stream = obj->program->sh.LinkedTransformFeedback-> in begin_transform_feedback()
440 if (!obj->targets[i] || in begin_transform_feedback()
441 obj->targets[i] == obj->draw_count[stream] || in begin_transform_feedback()
442 obj->targets[i]->buffer != bo->buffer || in begin_transform_feedback()
443 obj->targets[i]->buffer_offset != obj->Offset[i] || in begin_transform_feedback()
444 obj->targets[i]->buffer_size != obj->Size[i]) { in begin_transform_feedback()
447 pipe->create_stream_output_target(pipe, bo->buffer, in begin_transform_feedback()
448 obj->Offset[i], in begin_transform_feedback()
449 obj->Size[i]); in begin_transform_feedback()
451 pipe_so_target_reference(&obj->targets[i], NULL); in begin_transform_feedback()
452 obj->targets[i] = so_target; in begin_transform_feedback()
455 obj->num_targets = i+1; in begin_transform_feedback()
457 pipe_so_target_reference(&obj->targets[i], NULL); in begin_transform_feedback()
462 cso_set_stream_outputs(ctx->cso_context, obj->num_targets, in begin_transform_feedback()
463 obj->targets, offsets, mode); in begin_transform_feedback()
491 cso_set_stream_outputs(ctx->cso_context, 0, NULL, NULL, 0); in end_transform_feedback()
499 for (i = 0; i < ARRAY_SIZE(obj->draw_count); i++) in end_transform_feedback()
500 pipe_so_target_reference(&obj->draw_count[i], NULL); in end_transform_feedback()
502 for (i = 0; i < ARRAY_SIZE(obj->targets); i++) { in end_transform_feedback()
503 unsigned stream = obj->program->sh.LinkedTransformFeedback-> in end_transform_feedback()
507 if (!obj->targets[i] || obj->draw_count[stream]) in end_transform_feedback()
510 pipe_so_target_reference(&obj->draw_count[stream], obj->targets[i]); in end_transform_feedback()
513 _mesa_reference_program_(ctx, &obj->program, NULL); in end_transform_feedback()
514 ctx->TransformFeedback.CurrentObject->Active = GL_FALSE; in end_transform_feedback()
515 ctx->TransformFeedback.CurrentObject->Paused = GL_FALSE; in end_transform_feedback()
516 ctx->TransformFeedback.CurrentObject->EndedAnytime = GL_TRUE; in end_transform_feedback()
525 end_transform_feedback(ctx, ctx->TransformFeedback.CurrentObject); in _mesa_EndTransformFeedback_no_error()
535 obj = ctx->TransformFeedback.CurrentObject; in _mesa_EndTransformFeedback()
537 if (!obj->Active) { in _mesa_EndTransformFeedback()
566 &ctx->TransformFeedback.CurrentBuffer, in bind_buffer_range()
570 /* The per-attribute binding point */ in bind_buffer_range()
594 if (obj->Active) { in _mesa_validate_buffer_range_xfb()
600 if (index >= ctx->Const.MaxTransformFeedbackBuffers) { in _mesa_validate_buffer_range_xfb()
639 * generated by BindBufferRange if buffer is non-zero and size is less in _mesa_validate_buffer_range_xfb()
668 if (obj->Active) { in _mesa_bind_buffer_base_transform_feedback()
675 if (index >= ctx->Const.MaxTransformFeedbackBuffers) { in _mesa_bind_buffer_base_transform_feedback()
699 "%s(xfb=%u: non-generated object name)", func, xfb); in lookup_transform_feedback_object_err()
708 * transform-feedback-related functions. After calling _mesa_error, it
785 /* The per-attribute binding point */ in _mesa_TransformFeedbackBufferRange()
822 bind_buffer_offset(ctx, ctx->TransformFeedback.CurrentObject, index, buffer, in _mesa_BindBufferOffsetEXT_no_error()
839 obj = ctx->TransformFeedback.CurrentObject; in _mesa_BindBufferOffsetEXT()
841 if (obj->Active) { in _mesa_BindBufferOffsetEXT()
847 if (index >= ctx->Const.MaxTransformFeedbackBuffers) { in _mesa_BindBufferOffsetEXT()
876 for (i = 0; i < (GLint) shProg->TransformFeedback.NumVarying; i++) { in transform_feedback_varyings()
877 free(shProg->TransformFeedback.VaryingNames[i]); in transform_feedback_varyings()
879 free(shProg->TransformFeedback.VaryingNames); in transform_feedback_varyings()
882 shProg->TransformFeedback.VaryingNames = in transform_feedback_varyings()
885 if (!shProg->TransformFeedback.VaryingNames) { in transform_feedback_varyings()
892 shProg->TransformFeedback.VaryingNames[i] = strdup(varyings[i]); in transform_feedback_varyings()
894 shProg->TransformFeedback.NumVarying = count; in transform_feedback_varyings()
896 shProg->TransformFeedback.BufferMode = bufferMode; in transform_feedback_varyings()
928 if (ctx->TransformFeedback.CurrentObject->Active) { in _mesa_TransformFeedbackVaryings()
947 (GLuint) count > ctx->Const.MaxTransformFeedbackBuffers)) { in _mesa_TransformFeedbackVaryings()
958 if (ctx->Extensions.ARB_transform_feedback3) { in _mesa_TransformFeedbackVaryings()
967 if (buffers > ctx->Const.MaxTransformFeedbackBuffers) { in _mesa_TransformFeedbackVaryings()
1045 return ctx->TransformFeedback.DefaultObject; in _mesa_lookup_transform_feedback_object()
1049 _mesa_HashLookupLocked(&ctx->TransformFeedback.Objects, name); in _mesa_lookup_transform_feedback_object()
1071 if (_mesa_HashFindFreeKeys(&ctx->TransformFeedback.Objects, ids, n)) { in create_transform_feedbacks()
1080 _mesa_HashInsertLocked(&ctx->TransformFeedback.Objects, ids[i], obj); in create_transform_feedbacks()
1082 /* this is normally done at bind time in the non-dsa case */ in create_transform_feedbacks()
1083 obj->EverBound = GL_TRUE; in create_transform_feedbacks()
1146 return obj->EverBound; in _mesa_IsTransformFeedback()
1166 reference_transform_feedback_object(&ctx->TransformFeedback.CurrentObject, in bind_transform_feedback()
1222 if (obj->Active) { in _mesa_DeleteTransformFeedbacks()
1228 _mesa_HashRemoveLocked(&ctx->TransformFeedback.Objects, names[i]); in _mesa_DeleteTransformFeedbacks()
1230 if (obj == ctx->TransformFeedback.CurrentObject) { in _mesa_DeleteTransformFeedbacks()
1232 &ctx->TransformFeedback.CurrentObject, in _mesa_DeleteTransformFeedbacks()
1233 ctx->TransformFeedback.DefaultObject); in _mesa_DeleteTransformFeedbacks()
1252 cso_set_stream_outputs(ctx->cso_context, 0, NULL, NULL, 0); in pause_transform_feedback()
1254 obj->Paused = GL_TRUE; in pause_transform_feedback()
1263 pause_transform_feedback(ctx, ctx->TransformFeedback.CurrentObject); in _mesa_PauseTransformFeedback_no_error()
1273 obj = ctx->TransformFeedback.CurrentObject; in _mesa_PauseTransformFeedback()
1295 ctx->TransformFeedback.Mode = obj->Mode; in resume_transform_feedback()
1296 obj->Paused = GL_FALSE; in resume_transform_feedback()
1302 offsets[i] = (unsigned)-1; in resume_transform_feedback()
1304 cso_set_stream_outputs(ctx->cso_context, obj->num_targets, in resume_transform_feedback()
1305 obj->targets, offsets, obj->Mode); in resume_transform_feedback()
1314 resume_transform_feedback(ctx, ctx->TransformFeedback.CurrentObject); in _mesa_ResumeTransformFeedback_no_error()
1324 obj = ctx->TransformFeedback.CurrentObject; in _mesa_ResumeTransformFeedback()
1326 if (!obj->Active || !obj->Paused) { in _mesa_ResumeTransformFeedback()
1337 if (obj->program != get_xfb_source(ctx)) { in _mesa_ResumeTransformFeedback()
1360 *param = obj->Paused; in _mesa_GetTransformFeedbackiv()
1363 *param = obj->Active; in _mesa_GetTransformFeedbackiv()
1384 if (index >= ctx->Const.MaxTransformFeedbackBuffers) { in _mesa_GetTransformFeedbacki_v()
1392 *param = obj->BufferNames[index]; in _mesa_GetTransformFeedbacki_v()
1413 if (index >= ctx->Const.MaxTransformFeedbackBuffers) { in _mesa_GetTransformFeedbacki64_v()
1420 * This follows the same general rules used for BindBufferBase: in _mesa_GetTransformFeedbacki64_v()
1432 if (obj->RequestedSize[index] == 0 && in _mesa_GetTransformFeedbacki64_v()
1442 assert(obj->RequestedSize[index] > 0); in _mesa_GetTransformFeedbacki64_v()
1443 *param = obj->Offset[index]; in _mesa_GetTransformFeedbacki64_v()
1446 assert(obj->RequestedSize[index] > 0); in _mesa_GetTransformFeedbacki64_v()
1447 *param = obj->Size[index]; in _mesa_GetTransformFeedbacki64_v()