From: Marek Olšák <marek.ol...@amd.com> The slot index is always 0, and is pretty unlikely to change in the future. --- src/gallium/auxiliary/cso_cache/cso_context.c | 52 ++++++++++----------------- src/gallium/auxiliary/cso_cache/cso_context.h | 5 --- src/gallium/auxiliary/hud/hud_context.c | 14 +++----- src/gallium/auxiliary/util/u_blit.c | 5 ++- src/gallium/auxiliary/util/u_vbuf.c | 22 +++++------- src/gallium/auxiliary/util/u_vbuf.h | 7 ++-- src/mesa/state_tracker/st_cb_bitmap.c | 5 +-- src/mesa/state_tracker/st_cb_drawtex.c | 3 +- src/mesa/state_tracker/st_context.c | 15 ++------ src/mesa/state_tracker/st_draw.c | 10 +----- src/mesa/state_tracker/st_pbo.c | 2 +- 11 files changed, 45 insertions(+), 95 deletions(-)
diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c index 3a3a63a..e3d46f3 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.c +++ b/src/gallium/auxiliary/cso_cache/cso_context.c @@ -80,23 +80,22 @@ struct cso_context { unsigned nr_fragment_views_saved; struct sampler_info fragment_samplers_saved; struct sampler_info samplers[PIPE_SHADER_TYPES]; /* Temporary number until cso_single_sampler_done is called. * It tracks the highest sampler seen in cso_single_sampler. */ int max_sampler_seen; - struct pipe_vertex_buffer aux_vertex_buffer_current; - struct pipe_vertex_buffer aux_vertex_buffer_saved; - unsigned aux_vertex_buffer_index; + struct pipe_vertex_buffer vertex_buffer0_current; + struct pipe_vertex_buffer vertex_buffer0_saved; struct pipe_constant_buffer aux_constbuf_current[PIPE_SHADER_TYPES]; struct pipe_constant_buffer aux_constbuf_saved[PIPE_SHADER_TYPES]; struct pipe_image_view fragment_image0_current; struct pipe_image_view fragment_image0_saved; unsigned nr_so_targets; struct pipe_stream_output_target *so_targets[PIPE_MAX_SO_BUFFERS]; @@ -284,44 +283,41 @@ sanitize_hash(struct cso_hash *hash, enum cso_cache_type type, FREE(samplers_to_restore); } } static void cso_init_vbuf(struct cso_context *cso, unsigned flags) { struct u_vbuf_caps caps; /* Install u_vbuf if there is anything unsupported. */ if (u_vbuf_get_caps(cso->pipe->screen, &caps, flags)) { - cso->vbuf = u_vbuf_create(cso->pipe, &caps, - cso->aux_vertex_buffer_index); + cso->vbuf = u_vbuf_create(cso->pipe, &caps); } } struct cso_context * cso_create_context(struct pipe_context *pipe, unsigned u_vbuf_flags) { struct cso_context *ctx = CALLOC_STRUCT(cso_context); if (!ctx) return NULL; ctx->cache = cso_cache_create(); if (ctx->cache == NULL) goto out; cso_cache_set_sanitize_callback(ctx->cache, sanitize_hash, ctx); ctx->pipe = pipe; ctx->sample_mask = ~0; - ctx->aux_vertex_buffer_index = 0; /* 0 for now */ - cso_init_vbuf(ctx, u_vbuf_flags); /* Enable for testing: */ if (0) cso_set_maximum_cache_size( ctx->cache, 4 ); if (pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_GEOMETRY, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { ctx->has_geometry_shader = TRUE; } if (pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_TESS_CTRL, @@ -410,22 +406,22 @@ void cso_destroy_context( struct cso_context *ctx ) for (i = 0; i < ctx->nr_fragment_views; i++) { pipe_sampler_view_reference(&ctx->fragment_views[i], NULL); } for (i = 0; i < ctx->nr_fragment_views_saved; i++) { pipe_sampler_view_reference(&ctx->fragment_views_saved[i], NULL); } util_unreference_framebuffer_state(&ctx->fb); util_unreference_framebuffer_state(&ctx->fb_saved); - pipe_vertex_buffer_unreference(&ctx->aux_vertex_buffer_current); - pipe_vertex_buffer_unreference(&ctx->aux_vertex_buffer_saved); + pipe_vertex_buffer_unreference(&ctx->vertex_buffer0_current); + pipe_vertex_buffer_unreference(&ctx->vertex_buffer0_saved); for (i = 0; i < PIPE_SHADER_TYPES; i++) { pipe_resource_reference(&ctx->aux_constbuf_current[i].buffer, NULL); pipe_resource_reference(&ctx->aux_constbuf_saved[i].buffer, NULL); } pipe_resource_reference(&ctx->fragment_image0_current.resource, NULL); pipe_resource_reference(&ctx->fragment_image0_saved.resource, NULL); for (i = 0; i < PIPE_MAX_SO_BUFFERS; i++) { @@ -1151,71 +1147,61 @@ void cso_set_vertex_buffers(struct cso_context *ctx, { struct u_vbuf *vbuf = ctx->vbuf; if (vbuf) { u_vbuf_set_vertex_buffers(vbuf, start_slot, count, buffers); return; } /* Save what's in the auxiliary slot, so that we can save and restore it * for meta ops. */ - if (start_slot <= ctx->aux_vertex_buffer_index && - start_slot+count > ctx->aux_vertex_buffer_index) { + if (start_slot == 0) { if (buffers) { - const struct pipe_vertex_buffer *vb = - buffers + (ctx->aux_vertex_buffer_index - start_slot); - - pipe_vertex_buffer_reference(&ctx->aux_vertex_buffer_current, vb); + pipe_vertex_buffer_reference(&ctx->vertex_buffer0_current, + buffers); } else { - pipe_vertex_buffer_unreference(&ctx->aux_vertex_buffer_current); + pipe_vertex_buffer_unreference(&ctx->vertex_buffer0_current); } } ctx->pipe->set_vertex_buffers(ctx->pipe, start_slot, count, buffers); } static void -cso_save_aux_vertex_buffer_slot(struct cso_context *ctx) +cso_save_vertex_buffer0(struct cso_context *ctx) { struct u_vbuf *vbuf = ctx->vbuf; if (vbuf) { - u_vbuf_save_aux_vertex_buffer_slot(vbuf); + u_vbuf_save_vertex_buffer0(vbuf); return; } - pipe_vertex_buffer_reference(&ctx->aux_vertex_buffer_saved, - &ctx->aux_vertex_buffer_current); + pipe_vertex_buffer_reference(&ctx->vertex_buffer0_saved, + &ctx->vertex_buffer0_current); } static void -cso_restore_aux_vertex_buffer_slot(struct cso_context *ctx) +cso_restore_vertex_buffer0(struct cso_context *ctx) { struct u_vbuf *vbuf = ctx->vbuf; if (vbuf) { - u_vbuf_restore_aux_vertex_buffer_slot(vbuf); + u_vbuf_restore_vertex_buffer0(vbuf); return; } - cso_set_vertex_buffers(ctx, ctx->aux_vertex_buffer_index, 1, - &ctx->aux_vertex_buffer_saved); - pipe_vertex_buffer_unreference(&ctx->aux_vertex_buffer_saved); -} - -unsigned cso_get_aux_vertex_buffer_slot(struct cso_context *ctx) -{ - return ctx->aux_vertex_buffer_index; + cso_set_vertex_buffers(ctx, 0, 1, &ctx->vertex_buffer0_saved); + pipe_vertex_buffer_unreference(&ctx->vertex_buffer0_saved); } - void cso_single_sampler(struct cso_context *ctx, enum pipe_shader_type shader_stage, unsigned idx, const struct pipe_sampler_state *templ) { if (templ) { unsigned key_size = sizeof(struct pipe_sampler_state); unsigned hash_key = cso_construct_key((void*)templ, key_size); struct cso_sampler *cso; struct cso_hash_iter iter = cso_find_state_template(ctx->cache, @@ -1588,21 +1574,21 @@ cso_restore_constant_buffer_slot0(struct cso_context *cso, * of CSO_BIT_x flags. */ void cso_save_state(struct cso_context *cso, unsigned state_mask) { assert(cso->saved_state == 0); cso->saved_state = state_mask; if (state_mask & CSO_BIT_AUX_VERTEX_BUFFER_SLOT) - cso_save_aux_vertex_buffer_slot(cso); + cso_save_vertex_buffer0(cso); if (state_mask & CSO_BIT_BLEND) cso_save_blend(cso); if (state_mask & CSO_BIT_DEPTH_STENCIL_ALPHA) cso_save_depth_stencil_alpha(cso); if (state_mask & CSO_BIT_FRAGMENT_SAMPLERS) cso_save_fragment_samplers(cso); if (state_mask & CSO_BIT_FRAGMENT_SAMPLER_VIEWS) cso_save_fragment_sampler_views(cso); if (state_mask & CSO_BIT_FRAGMENT_SHADER) cso_save_fragment_shader(cso); @@ -1643,21 +1629,21 @@ cso_save_state(struct cso_context *cso, unsigned state_mask) * Restore the state which was saved by cso_save_state(). */ void cso_restore_state(struct cso_context *cso) { unsigned state_mask = cso->saved_state; assert(state_mask); if (state_mask & CSO_BIT_AUX_VERTEX_BUFFER_SLOT) - cso_restore_aux_vertex_buffer_slot(cso); + cso_restore_vertex_buffer0(cso); if (state_mask & CSO_BIT_BLEND) cso_restore_blend(cso); if (state_mask & CSO_BIT_DEPTH_STENCIL_ALPHA) cso_restore_depth_stencil_alpha(cso); if (state_mask & CSO_BIT_FRAGMENT_SAMPLERS) cso_restore_fragment_samplers(cso); if (state_mask & CSO_BIT_FRAGMENT_SAMPLER_VIEWS) cso_restore_fragment_sampler_views(cso); if (state_mask & CSO_BIT_FRAGMENT_SHADER) cso_restore_fragment_shader(cso); diff --git a/src/gallium/auxiliary/cso_cache/cso_context.h b/src/gallium/auxiliary/cso_cache/cso_context.h index 3a4e808..d3501fb 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.h +++ b/src/gallium/auxiliary/cso_cache/cso_context.h @@ -80,25 +80,20 @@ cso_single_sampler_done(struct cso_context *cso, enum pipe_error cso_set_vertex_elements(struct cso_context *ctx, unsigned count, const struct pipe_vertex_element *states); void cso_set_vertex_buffers(struct cso_context *ctx, unsigned start_slot, unsigned count, const struct pipe_vertex_buffer *buffers); -/* One vertex buffer slot is provided with the save/restore functionality. - * cso_context chooses the slot, it can be non-zero. */ -unsigned cso_get_aux_vertex_buffer_slot(struct cso_context *ctx); - - void cso_set_stream_outputs(struct cso_context *ctx, unsigned num_targets, struct pipe_stream_output_target **targets, const unsigned *offsets); /* * We don't provide shader caching in CSO. Most of the time the api provides * object semantics for shaders anyway, and the cases where it doesn't * (eg mesa's internally-generated texenv programs), it will be up to diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c index 1baaabb..6ed9ccf 100644 --- a/src/gallium/auxiliary/hud/hud_context.c +++ b/src/gallium/auxiliary/hud/hud_context.c @@ -83,22 +83,21 @@ hud_draw_colored_prims(struct hud_context *hud, unsigned prim, hud->constants.color[0] = r; hud->constants.color[1] = g; hud->constants.color[2] = b; hud->constants.color[3] = a; hud->constants.translate[0] = (float) xoffset; hud->constants.translate[1] = (float) yoffset; hud->constants.scale[0] = 1; hud->constants.scale[1] = yscale; cso_set_constant_buffer(cso, PIPE_SHADER_VERTEX, 0, &hud->constbuf); - cso_set_vertex_buffers(cso, cso_get_aux_vertex_buffer_slot(cso), - 1, &hud->color_prims.vbuf); + cso_set_vertex_buffers(cso, 0, 1, &hud->color_prims.vbuf); cso_set_fragment_shader_handle(hud->cso, hud->fs_color); cso_draw_arrays(cso, prim, 0, num_vertices); hud->color_prims.vertices += size / sizeof(float); hud->color_prims.vbuf.buffer_offset += size; hud->color_prims.buffer_size -= size; } static void hud_draw_colored_quad(struct hud_context *hud, unsigned prim, @@ -554,30 +553,28 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex) hud->constants.color[0] = 0; hud->constants.color[1] = 0; hud->constants.color[2] = 0; hud->constants.color[3] = 0.666f; hud->constants.translate[0] = 0; hud->constants.translate[1] = 0; hud->constants.scale[0] = 1; hud->constants.scale[1] = 1; cso_set_constant_buffer(cso, PIPE_SHADER_VERTEX, 0, &hud->constbuf); - cso_set_vertex_buffers(cso, cso_get_aux_vertex_buffer_slot(cso), 1, - &hud->bg.vbuf); + cso_set_vertex_buffers(cso, 0, 1, &hud->bg.vbuf); cso_draw_arrays(cso, PIPE_PRIM_QUADS, 0, hud->bg.num_vertices); } pipe_resource_reference(&hud->bg.vbuf.buffer.resource, NULL); /* draw accumulated vertices for text */ if (hud->text.num_vertices) { - cso_set_vertex_buffers(cso, cso_get_aux_vertex_buffer_slot(cso), 1, - &hud->text.vbuf); + cso_set_vertex_buffers(cso, 0, 1, &hud->text.vbuf); cso_set_fragment_shader_handle(hud->cso, hud->fs_text); cso_draw_arrays(cso, PIPE_PRIM_QUADS, 0, hud->text.num_vertices); } pipe_resource_reference(&hud->text.vbuf.buffer.resource, NULL); if (hud->simple) { cso_restore_state(cso); cso_restore_constant_buffer_slot0(cso, PIPE_SHADER_VERTEX); pipe_surface_reference(&surf, NULL); @@ -591,22 +588,21 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex) hud->constants.color[1] = 1; hud->constants.color[2] = 1; hud->constants.color[3] = 1; hud->constants.translate[0] = 0; hud->constants.translate[1] = 0; hud->constants.scale[0] = 1; hud->constants.scale[1] = 1; cso_set_constant_buffer(cso, PIPE_SHADER_VERTEX, 0, &hud->constbuf); if (hud->whitelines.num_vertices) { - cso_set_vertex_buffers(cso, cso_get_aux_vertex_buffer_slot(cso), 1, - &hud->whitelines.vbuf); + cso_set_vertex_buffers(cso, 0, 1, &hud->whitelines.vbuf); cso_set_fragment_shader_handle(hud->cso, hud->fs_color); cso_draw_arrays(cso, PIPE_PRIM_LINES, 0, hud->whitelines.num_vertices); } pipe_resource_reference(&hud->whitelines.vbuf.buffer.resource, NULL); /* draw the rest */ cso_set_blend(cso, &hud->alpha_blend); cso_set_rasterizer(cso, &hud->rasterizer_aa_lines); LIST_FOR_EACH_ENTRY(pane, &hud->pane_list, head) { if (pane) @@ -1861,21 +1857,21 @@ hud_create(struct cso_context *cso, struct hud_context *share) hud->rasterizer.line_width = 1; hud->rasterizer.line_last_pixel = 1; hud->rasterizer_aa_lines = hud->rasterizer; hud->rasterizer_aa_lines.line_smooth = 1; /* vertex elements */ for (i = 0; i < 2; i++) { hud->velems[i].src_offset = i * 2 * sizeof(float); hud->velems[i].src_format = PIPE_FORMAT_R32G32_FLOAT; - hud->velems[i].vertex_buffer_index = cso_get_aux_vertex_buffer_slot(cso); + hud->velems[i].vertex_buffer_index = 0; } /* sampler state (for font drawing) */ hud->font_sampler_state.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE; hud->font_sampler_state.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE; hud->font_sampler_state.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE; hud->font_sampler_state.normalized_coords = 0; /* constants */ hud->constbuf.buffer_size = sizeof(hud->constants); diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c index d1571cd1f5..9a43c2f 100644 --- a/src/gallium/auxiliary/util/u_blit.c +++ b/src/gallium/auxiliary/util/u_blit.c @@ -105,21 +105,21 @@ util_create_blit(struct pipe_context *pipe, struct cso_context *cso) ctx->sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE; ctx->sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE; ctx->sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE; ctx->sampler.min_img_filter = 0; /* set later */ ctx->sampler.mag_img_filter = 0; /* set later */ /* vertex elements state */ for (i = 0; i < 2; i++) { ctx->velem[i].src_offset = i * 4 * sizeof(float); ctx->velem[i].instance_divisor = 0; - ctx->velem[i].vertex_buffer_index = cso_get_aux_vertex_buffer_slot(cso); + ctx->velem[i].vertex_buffer_index = 0; ctx->velem[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; } ctx->vbuf = NULL; /* init vertex data that doesn't change */ for (i = 0; i < 4; i++) { ctx->vertices[i][0][3] = 1.0f; /* w */ ctx->vertices[i][1][3] = 1.0f; /* q */ } @@ -624,20 +624,19 @@ util_blit_pixels_tex(struct blit_state *ctx, offset = setup_vertex_data_tex(ctx, src_sampler_view->texture->target, src_face, (float) dstX0 / dst->width * 2.0f - 1.0f, (float) dstY0 / dst->height * 2.0f - 1.0f, (float) dstX1 / dst->width * 2.0f - 1.0f, (float) dstY1 / dst->height * 2.0f - 1.0f, s0, t0, s1, t1, z); - util_draw_vertex_buffer(ctx->pipe, ctx->cso, ctx->vbuf, - cso_get_aux_vertex_buffer_slot(ctx->cso), + util_draw_vertex_buffer(ctx->pipe, ctx->cso, ctx->vbuf, 0, offset, PIPE_PRIM_TRIANGLE_FAN, 4, /* verts */ 2); /* attribs/vert */ /* restore state we changed */ cso_restore_state(ctx->cso); } diff --git a/src/gallium/auxiliary/util/u_vbuf.c b/src/gallium/auxiliary/util/u_vbuf.c index 8a680d6..42f37c7 100644 --- a/src/gallium/auxiliary/util/u_vbuf.c +++ b/src/gallium/auxiliary/util/u_vbuf.c @@ -147,22 +147,21 @@ struct u_vbuf { struct pipe_context *pipe; struct translate_cache *translate_cache; struct cso_cache *cso_cache; /* This is what was set in set_vertex_buffers. * May contain user buffers. */ struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS]; uint32_t enabled_vb_mask; /* Saved vertex buffer. */ - unsigned aux_vertex_buffer_slot; - struct pipe_vertex_buffer aux_vertex_buffer_saved; + struct pipe_vertex_buffer vertex_buffer0_saved; /* Vertex buffers for the driver. * There are usually no user buffers. */ struct pipe_vertex_buffer real_vertex_buffer[PIPE_MAX_ATTRIBS]; uint32_t dirty_real_vb_mask; /* which buffers are dirty since the last call of set_vertex_buffers */ /* Vertex elements. */ struct u_vbuf_elements *ve, *ve_saved; @@ -293,27 +292,25 @@ boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps, !caps->buffer_stride_unaligned || !caps->velem_src_offset_unaligned || (!(flags & U_VBUF_FLAG_NO_USER_VBOS) && !caps->user_vertex_buffers)) { fallback = TRUE; } return fallback; } struct u_vbuf * -u_vbuf_create(struct pipe_context *pipe, - struct u_vbuf_caps *caps, unsigned aux_vertex_buffer_index) +u_vbuf_create(struct pipe_context *pipe, struct u_vbuf_caps *caps) { struct u_vbuf *mgr = CALLOC_STRUCT(u_vbuf); mgr->caps = *caps; - mgr->aux_vertex_buffer_slot = aux_vertex_buffer_index; mgr->pipe = pipe; mgr->cso_cache = cso_cache_create(); mgr->translate_cache = translate_cache_create(); memset(mgr->fallback_vbs, ~0, sizeof(mgr->fallback_vbs)); mgr->has_signed_vb_offset = pipe->screen->get_param(pipe->screen, PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET); return mgr; @@ -374,21 +371,21 @@ void u_vbuf_destroy(struct u_vbuf *mgr) const unsigned num_vb = screen->get_shader_param(screen, PIPE_SHADER_VERTEX, PIPE_SHADER_CAP_MAX_INPUTS); mgr->pipe->set_vertex_buffers(mgr->pipe, 0, num_vb, NULL); for (i = 0; i < PIPE_MAX_ATTRIBS; i++) pipe_vertex_buffer_unreference(&mgr->vertex_buffer[i]); for (i = 0; i < PIPE_MAX_ATTRIBS; i++) pipe_vertex_buffer_unreference(&mgr->real_vertex_buffer[i]); - pipe_vertex_buffer_unreference(&mgr->aux_vertex_buffer_saved); + pipe_vertex_buffer_unreference(&mgr->vertex_buffer0_saved); translate_cache_destroy(mgr->translate_cache); cso_cache_delete(mgr->cso_cache); FREE(mgr); } static enum pipe_error u_vbuf_translate_buffers(struct u_vbuf *mgr, struct translate_key *key, const struct pipe_draw_info *info, unsigned vb_mask, unsigned out_vb, @@ -1306,22 +1303,21 @@ void u_vbuf_restore_vertex_elements(struct u_vbuf *mgr) if (mgr->ve != mgr->ve_saved) { struct pipe_context *pipe = mgr->pipe; mgr->ve = mgr->ve_saved; pipe->bind_vertex_elements_state(pipe, mgr->ve ? mgr->ve->driver_cso : NULL); } mgr->ve_saved = NULL; } -void u_vbuf_save_aux_vertex_buffer_slot(struct u_vbuf *mgr) +void u_vbuf_save_vertex_buffer0(struct u_vbuf *mgr) { - pipe_vertex_buffer_reference(&mgr->aux_vertex_buffer_saved, - &mgr->vertex_buffer[mgr->aux_vertex_buffer_slot]); + pipe_vertex_buffer_reference(&mgr->vertex_buffer0_saved, + &mgr->vertex_buffer[0]); } -void u_vbuf_restore_aux_vertex_buffer_slot(struct u_vbuf *mgr) +void u_vbuf_restore_vertex_buffer0(struct u_vbuf *mgr) { - u_vbuf_set_vertex_buffers(mgr, mgr->aux_vertex_buffer_slot, 1, - &mgr->aux_vertex_buffer_saved); - pipe_vertex_buffer_unreference(&mgr->aux_vertex_buffer_saved); + u_vbuf_set_vertex_buffers(mgr, 0, 1, &mgr->vertex_buffer0_saved); + pipe_vertex_buffer_unreference(&mgr->vertex_buffer0_saved); } diff --git a/src/gallium/auxiliary/util/u_vbuf.h b/src/gallium/auxiliary/util/u_vbuf.h index d070452..a613983 100644 --- a/src/gallium/auxiliary/util/u_vbuf.h +++ b/src/gallium/auxiliary/util/u_vbuf.h @@ -54,30 +54,29 @@ struct u_vbuf_caps { /* Whether the driver supports user vertex buffers. */ unsigned user_vertex_buffers:1; }; boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps, unsigned flags); struct u_vbuf * -u_vbuf_create(struct pipe_context *pipe, - struct u_vbuf_caps *caps, unsigned aux_vertex_buffer_index); +u_vbuf_create(struct pipe_context *pipe, struct u_vbuf_caps *caps); void u_vbuf_destroy(struct u_vbuf *mgr); /* State and draw functions. */ void u_vbuf_set_vertex_elements(struct u_vbuf *mgr, unsigned count, const struct pipe_vertex_element *states); void u_vbuf_set_vertex_buffers(struct u_vbuf *mgr, unsigned start_slot, unsigned count, const struct pipe_vertex_buffer *bufs); void u_vbuf_draw_vbo(struct u_vbuf *mgr, const struct pipe_draw_info *info); /* Save/restore functionality. */ void u_vbuf_save_vertex_elements(struct u_vbuf *mgr); void u_vbuf_restore_vertex_elements(struct u_vbuf *mgr); -void u_vbuf_save_aux_vertex_buffer_slot(struct u_vbuf *mgr); -void u_vbuf_restore_aux_vertex_buffer_slot(struct u_vbuf *mgr); +void u_vbuf_save_vertex_buffer0(struct u_vbuf *mgr); +void u_vbuf_restore_vertex_buffer0(struct u_vbuf *mgr); #endif diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index b25ae5f..1bfc82d 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -767,24 +767,21 @@ st_DrawAtlasBitmaps(struct gl_context *ctx, verts->t = t1; verts++; /* Update the raster position */ ctx->Current.RasterPos[0] += xmove; ctx->Current.RasterPos[1] += ymove; } u_upload_unmap(pipe->stream_uploader); - cso_set_vertex_buffers(st->cso_context, - cso_get_aux_vertex_buffer_slot(st->cso_context), - 1, &vb); - + cso_set_vertex_buffers(st->cso_context, 0, 1, &vb); cso_draw_arrays(st->cso_context, PIPE_PRIM_QUADS, 0, num_verts); out: restore_render_state(ctx); pipe_resource_reference(&vb.buffer.resource, NULL); pipe_sampler_view_reference(&sv, NULL); /* We uploaded modified constants, need to invalidate them. */ diff --git a/src/mesa/state_tracker/st_cb_drawtex.c b/src/mesa/state_tracker/st_cb_drawtex.c index f18925e..b6bf71d 100644 --- a/src/mesa/state_tracker/st_cb_drawtex.c +++ b/src/mesa/state_tracker/st_cb_drawtex.c @@ -269,22 +269,21 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, struct pipe_viewport_state vp; vp.scale[0] = 0.5f * width; vp.scale[1] = height * (invert ? -0.5f : 0.5f); vp.scale[2] = 1.0f; vp.translate[0] = 0.5f * width; vp.translate[1] = 0.5f * height; vp.translate[2] = 0.0f; cso_set_viewport(cso, &vp); } - util_draw_vertex_buffer(pipe, cso, vbuffer, - cso_get_aux_vertex_buffer_slot(cso), + util_draw_vertex_buffer(pipe, cso, vbuffer, 0, offset, /* offset */ PIPE_PRIM_TRIANGLE_FAN, 4, /* verts */ numAttribs); /* attribs/vert */ pipe_resource_reference(&vbuffer, NULL); /* restore state */ cso_restore_state(cso); } diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index ee76e07..8bffcba 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -388,40 +388,31 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe, /* Choose texture target for glDrawPixels, glBitmap, renderbuffers */ if (pipe->screen->get_param(pipe->screen, PIPE_CAP_NPOT_TEXTURES)) st->internal_target = PIPE_TEXTURE_2D; else st->internal_target = PIPE_TEXTURE_RECT; /* Setup vertex element info for 'struct st_util_vertex'. */ { - const unsigned slot = cso_get_aux_vertex_buffer_slot(st->cso_context); - - /* If this assertion ever fails all state tracker calls to - * cso_get_aux_vertex_buffer_slot() should be audited. This - * particular call would have to be moved to just before each - * drawing call. - */ - assert(slot == 0); - STATIC_ASSERT(sizeof(struct st_util_vertex) == 9 * sizeof(float)); memset(&st->util_velems, 0, sizeof(st->util_velems)); st->util_velems[0].src_offset = 0; - st->util_velems[0].vertex_buffer_index = slot; + st->util_velems[0].vertex_buffer_index = 0; st->util_velems[0].src_format = PIPE_FORMAT_R32G32B32_FLOAT; st->util_velems[1].src_offset = 3 * sizeof(float); - st->util_velems[1].vertex_buffer_index = slot; + st->util_velems[1].vertex_buffer_index = 0; st->util_velems[1].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; st->util_velems[2].src_offset = 7 * sizeof(float); - st->util_velems[2].vertex_buffer_index = slot; + st->util_velems[2].vertex_buffer_index = 0; st->util_velems[2].src_format = PIPE_FORMAT_R32G32_FLOAT; } /* we want all vertex data to be placed in buffer objects */ vbo_use_buffer_objects(ctx); /* make sure that no VBOs are left mapped when we're drawing. */ vbo_always_unmap_buffers(ctx); diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 6243659..86dbf5f 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -420,29 +420,21 @@ st_draw_quad(struct st_context *st, verts[3].z = z; verts[3].r = color[0]; verts[3].g = color[1]; verts[3].b = color[2]; verts[3].a = color[3]; verts[3].s = s0; verts[3].t = t1; u_upload_unmap(st->pipe->stream_uploader); - /* At the time of writing, cso_get_aux_vertex_buffer_slot() always returns - * zero. If that ever changes we need to audit the calls to that function - * and make sure the slot number is used consistently everywhere. - */ - assert(cso_get_aux_vertex_buffer_slot(st->cso_context) == 0); - - cso_set_vertex_buffers(st->cso_context, - cso_get_aux_vertex_buffer_slot(st->cso_context), - 1, &vb); + cso_set_vertex_buffers(st->cso_context, 0, 1, &vb); if (num_instances > 1) { cso_draw_arrays_instanced(st->cso_context, PIPE_PRIM_TRIANGLE_FAN, 0, 4, 0, num_instances); } else { cso_draw_arrays(st->cso_context, PIPE_PRIM_TRIANGLE_FAN, 0, 4); } pipe_resource_reference(&vb.buffer.resource, NULL); diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c index 628e3ca..6c55e85 100644 --- a/src/mesa/state_tracker/st_pbo.c +++ b/src/mesa/state_tracker/st_pbo.c @@ -238,21 +238,21 @@ st_pbo_draw(struct st_context *st, const struct st_pbo_addresses *addr, verts[3] = y1; verts[4] = x1; verts[5] = y0; verts[6] = x1; verts[7] = y1; u_upload_unmap(st->pipe->stream_uploader); velem.src_offset = 0; velem.instance_divisor = 0; - velem.vertex_buffer_index = cso_get_aux_vertex_buffer_slot(cso); + velem.vertex_buffer_index = 0; velem.src_format = PIPE_FORMAT_R32G32_FLOAT; cso_set_vertex_elements(cso, 1, &velem); cso_set_vertex_buffers(cso, velem.vertex_buffer_index, 1, &vbo); pipe_resource_reference(&vbo.buffer.resource, NULL); } /* Upload constants */ -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev