diff options
Diffstat (limited to 'mesalib/src/mesa/state_tracker')
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_cb_queryobj.c | 4 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_draw.c | 20 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 6 |
3 files changed, 25 insertions, 5 deletions
diff --git a/mesalib/src/mesa/state_tracker/st_cb_queryobj.c b/mesalib/src/mesa/state_tracker/st_cb_queryobj.c index 057499615..b6a236e8d 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_queryobj.c +++ b/mesalib/src/mesa/state_tracker/st_cb_queryobj.c @@ -150,7 +150,7 @@ st_WaitQuery(struct gl_context *ctx, struct gl_query_object *q) !pipe->get_query_result(pipe, stq->pq, TRUE, - &q->Result)) + (void*)&q->Result)) { /* nothing */ } @@ -165,7 +165,7 @@ st_CheckQuery(struct gl_context *ctx, struct gl_query_object *q) struct pipe_context *pipe = st_context(ctx)->pipe; struct st_query_object *stq = st_query_object(q); assert(!q->Ready); /* we should not get called if Ready is TRUE */ - q->Ready = pipe->get_query_result(pipe, stq->pq, FALSE, &q->Result); + q->Ready = pipe->get_query_result(pipe, stq->pq, FALSE, (void*)&q->Result); } diff --git a/mesalib/src/mesa/state_tracker/st_draw.c b/mesalib/src/mesa/state_tracker/st_draw.c index eb187519f..0a35ab2be 100644 --- a/mesalib/src/mesa/state_tracker/st_draw.c +++ b/mesalib/src/mesa/state_tracker/st_draw.c @@ -979,6 +979,7 @@ st_draw_vbo(struct gl_context *ctx, struct pipe_index_buffer ibuffer; struct pipe_draw_info info; unsigned i, num_instances = 1; + unsigned max_index_plus_base; GLboolean new_array = st->dirty.st && (st->dirty.mesa & (_NEW_ARRAY | _NEW_PROGRAM | _NEW_BUFFER_OBJECT)) != 0; @@ -987,6 +988,8 @@ st_draw_vbo(struct gl_context *ctx, assert(ctx->NewState == 0x0); if (ib) { + int max_base_vertex = 0; + /* Gallium probably doesn't want this in some cases. */ if (!index_bounds_valid) if (!all_varyings_in_vbos(arrays)) @@ -995,7 +998,16 @@ st_draw_vbo(struct gl_context *ctx, for (i = 0; i < nr_prims; i++) { num_instances = MAX2(num_instances, prims[i].num_instances); + max_base_vertex = MAX2(max_base_vertex, prims[i].basevertex); } + + /* Compute the sum of max_index and max_base_vertex. That's the value + * we need to use when creating buffers. + */ + if (max_index == ~0) + max_index_plus_base = max_index; + else + max_index_plus_base = max_index + max_base_vertex; } else { /* Get min/max index for non-indexed drawing. */ @@ -1007,6 +1019,9 @@ st_draw_vbo(struct gl_context *ctx, max_index = MAX2(max_index, prims[i].start + prims[i].count - 1); num_instances = MAX2(num_instances, prims[i].num_instances); } + + /* The base vertex offset only applies to indexed drawing */ + max_index_plus_base = max_index; } /* Validate state. */ @@ -1023,7 +1038,8 @@ st_draw_vbo(struct gl_context *ctx, st_validate_state(st); if (new_array) { - if (!st_validate_varrays(ctx, arrays, max_index, num_instances)) { + if (!st_validate_varrays(ctx, arrays, max_index_plus_base, + num_instances)) { /* probably out of memory, no-op the draw call */ return; } @@ -1047,7 +1063,7 @@ st_draw_vbo(struct gl_context *ctx, unsigned element_size = st->user_attrib[i].element_size; unsigned stride = st->user_attrib[i].stride; unsigned min_offset = min_index * stride; - unsigned max_offset = max_index * stride + element_size; + unsigned max_offset = max_index_plus_base * stride + element_size; assert(max_offset > min_offset); diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index b0227855c..ae8533e18 100644 --- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -2439,7 +2439,7 @@ void glsl_to_tgsi_visitor::visit(ir_call *ir) { glsl_to_tgsi_instruction *call_inst; - ir_function_signature *sig = ir->get_callee(); + ir_function_signature *sig = ir->callee; function_entry *entry = get_function_signature(sig); int i; @@ -2815,6 +2815,10 @@ glsl_to_tgsi_visitor::glsl_to_tgsi_visitor() indirect_addr_temps = false; indirect_addr_consts = false; mem_ctx = ralloc_context(NULL); + ctx = NULL; + prog = NULL; + shader_program = NULL; + options = NULL; } glsl_to_tgsi_visitor::~glsl_to_tgsi_visitor() |