gallium/hud: don't use cso_context to restore VBs, constbuf 0 and sampler views
These cso_context capabilities will be removed. Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com> Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8180>
This commit is contained in:
@@ -40,6 +40,7 @@
|
||||
#include "hud/hud_context.h"
|
||||
#include "hud/hud_private.h"
|
||||
|
||||
#include "frontend/api.h"
|
||||
#include "cso_cache/cso_context.h"
|
||||
#include "util/u_draw_quad.h"
|
||||
#include "util/format/u_format.h"
|
||||
@@ -73,6 +74,7 @@ hud_draw_colored_prims(struct hud_context *hud, unsigned prim,
|
||||
int xoffset, int yoffset, float yscale)
|
||||
{
|
||||
struct cso_context *cso = hud->cso;
|
||||
struct pipe_context *pipe = hud->pipe;
|
||||
struct pipe_vertex_buffer vbuffer = {0};
|
||||
|
||||
hud->constants.color[0] = r;
|
||||
@@ -83,7 +85,7 @@ hud_draw_colored_prims(struct hud_context *hud, unsigned prim,
|
||||
hud->constants.translate[1] = (float) (yoffset * hud_scale);
|
||||
hud->constants.scale[0] = hud_scale;
|
||||
hud->constants.scale[1] = yscale * hud_scale;
|
||||
cso_set_constant_buffer(cso, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
|
||||
pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
|
||||
|
||||
u_upload_data(hud->pipe->stream_uploader, 0,
|
||||
num_vertices * 2 * sizeof(float), 16, buffer,
|
||||
@@ -479,7 +481,6 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex)
|
||||
CSO_BIT_BLEND |
|
||||
CSO_BIT_DEPTH_STENCIL_ALPHA |
|
||||
CSO_BIT_FRAGMENT_SHADER |
|
||||
CSO_BIT_FRAGMENT_SAMPLER_VIEWS |
|
||||
CSO_BIT_FRAGMENT_SAMPLERS |
|
||||
CSO_BIT_RASTERIZER |
|
||||
CSO_BIT_VIEWPORT |
|
||||
@@ -489,10 +490,8 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex)
|
||||
CSO_BIT_TESSEVAL_SHADER |
|
||||
CSO_BIT_VERTEX_SHADER |
|
||||
CSO_BIT_VERTEX_ELEMENTS |
|
||||
CSO_BIT_AUX_VERTEX_BUFFER_SLOT |
|
||||
CSO_BIT_PAUSE_QUERIES |
|
||||
CSO_BIT_RENDER_CONDITION));
|
||||
cso_save_constant_buffer_slot0(cso, PIPE_SHADER_VERTEX);
|
||||
|
||||
/* set states */
|
||||
memset(&surf_templ, 0, sizeof(surf_templ));
|
||||
@@ -538,10 +537,10 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex)
|
||||
cso_set_vertex_shader_handle(cso, hud->vs);
|
||||
cso_set_vertex_elements(cso, &hud->velems);
|
||||
cso_set_render_condition(cso, NULL, FALSE, 0);
|
||||
cso_set_sampler_views(cso, PIPE_SHADER_FRAGMENT, 1,
|
||||
&hud->font_sampler_view);
|
||||
pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 1,
|
||||
&hud->font_sampler_view);
|
||||
cso_set_samplers(cso, PIPE_SHADER_FRAGMENT, 1, sampler_states);
|
||||
cso_set_constant_buffer(cso, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
|
||||
pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
|
||||
|
||||
/* draw accumulated vertices for background quads */
|
||||
cso_set_blend(cso, &hud->alpha_blend);
|
||||
@@ -557,7 +556,7 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex)
|
||||
hud->constants.scale[0] = hud_scale;
|
||||
hud->constants.scale[1] = hud_scale;
|
||||
|
||||
cso_set_constant_buffer(cso, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
|
||||
pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
|
||||
|
||||
cso_set_vertex_buffers(cso, 0, 1, &hud->bg.vbuf);
|
||||
cso_draw_arrays(cso, PIPE_PRIM_QUADS, 0, hud->bg.num_vertices);
|
||||
@@ -572,13 +571,8 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex)
|
||||
}
|
||||
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);
|
||||
return;
|
||||
}
|
||||
if (hud->simple)
|
||||
goto done;
|
||||
|
||||
/* draw accumulated vertices for white lines */
|
||||
cso_set_blend(cso, &hud->no_blend);
|
||||
@@ -591,7 +585,7 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex)
|
||||
hud->constants.translate[1] = 0;
|
||||
hud->constants.scale[0] = hud_scale;
|
||||
hud->constants.scale[1] = hud_scale;
|
||||
cso_set_constant_buffer(cso, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
|
||||
pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, &hud->constbuf);
|
||||
|
||||
if (hud->whitelines.num_vertices) {
|
||||
cso_set_vertex_buffers(cso, 0, 1, &hud->whitelines.vbuf);
|
||||
@@ -608,8 +602,21 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex)
|
||||
hud_pane_draw_colored_objects(hud, pane);
|
||||
}
|
||||
|
||||
done:
|
||||
cso_restore_state(cso);
|
||||
cso_restore_constant_buffer_slot0(cso, PIPE_SHADER_VERTEX);
|
||||
|
||||
/* Unbind resources that we have bound. */
|
||||
pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, NULL);
|
||||
pipe->set_vertex_buffers(pipe, 0, 1, NULL);
|
||||
pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 1, NULL);
|
||||
|
||||
/* restore states not restored by cso */
|
||||
if (hud->st) {
|
||||
hud->st->invalidate_state(hud->st,
|
||||
ST_INVALIDATE_FS_SAMPLER_VIEWS |
|
||||
ST_INVALIDATE_VS_CONSTBUF0 |
|
||||
ST_INVALIDATE_VERTEX_BUFFERS);
|
||||
}
|
||||
|
||||
pipe_surface_reference(&surf, NULL);
|
||||
}
|
||||
@@ -1638,13 +1645,15 @@ hud_unset_draw_context(struct hud_context *hud)
|
||||
}
|
||||
|
||||
static bool
|
||||
hud_set_draw_context(struct hud_context *hud, struct cso_context *cso)
|
||||
hud_set_draw_context(struct hud_context *hud, struct cso_context *cso,
|
||||
struct st_context_iface *st)
|
||||
{
|
||||
struct pipe_context *pipe = cso_get_pipe_context(cso);
|
||||
|
||||
assert(!hud->pipe);
|
||||
hud->pipe = pipe;
|
||||
hud->cso = cso;
|
||||
hud->st = st;
|
||||
|
||||
struct pipe_sampler_view view_templ;
|
||||
u_sampler_view_default_template(
|
||||
@@ -1770,7 +1779,8 @@ hud_set_record_context(struct hud_context *hud, struct pipe_context *pipe)
|
||||
* record queries in one context and draw them in another.
|
||||
*/
|
||||
struct hud_context *
|
||||
hud_create(struct cso_context *cso, struct hud_context *share)
|
||||
hud_create(struct cso_context *cso, struct st_context_iface *st,
|
||||
struct hud_context *share)
|
||||
{
|
||||
const char *share_env = debug_get_option("GALLIUM_HUD_SHARE", NULL);
|
||||
unsigned record_ctx = 0, draw_ctx = 0;
|
||||
@@ -1794,7 +1804,7 @@ hud_create(struct cso_context *cso, struct hud_context *share)
|
||||
|
||||
if (context_id == draw_ctx) {
|
||||
assert(!share->pipe);
|
||||
hud_set_draw_context(share, cso);
|
||||
hud_set_draw_context(share, cso, st);
|
||||
}
|
||||
|
||||
return share;
|
||||
@@ -1901,7 +1911,7 @@ hud_create(struct cso_context *cso, struct hud_context *share)
|
||||
if (record_ctx == 0)
|
||||
hud_set_record_context(hud, cso_get_pipe_context(cso));
|
||||
if (draw_ctx == 0)
|
||||
hud_set_draw_context(hud, cso);
|
||||
hud_set_draw_context(hud, cso, st);
|
||||
|
||||
hud_parse_env_var(hud, screen, env);
|
||||
return hud;
|
||||
|
@@ -33,9 +33,11 @@ struct cso_context;
|
||||
struct pipe_context;
|
||||
struct pipe_resource;
|
||||
struct util_queue_monitoring;
|
||||
struct st_context_iface;
|
||||
|
||||
struct hud_context *
|
||||
hud_create(struct cso_context *cso, struct hud_context *share);
|
||||
hud_create(struct cso_context *cso, struct st_context_iface *st,
|
||||
struct hud_context *share);
|
||||
|
||||
void
|
||||
hud_destroy(struct hud_context *hud, struct cso_context *cso);
|
||||
|
@@ -50,6 +50,7 @@ struct hud_context {
|
||||
/* Context where the HUD is drawn: */
|
||||
struct pipe_context *pipe;
|
||||
struct cso_context *cso;
|
||||
struct st_context_iface *st;
|
||||
|
||||
struct hud_batch_query_context *batch_query;
|
||||
struct list_head pane_list;
|
||||
|
@@ -193,7 +193,7 @@ dri_create_context(gl_api api, const struct gl_config * visual,
|
||||
|
||||
if (ctx->st->cso_context) {
|
||||
ctx->pp = pp_init(ctx->st->pipe, screen->pp_enabled, ctx->st->cso_context);
|
||||
ctx->hud = hud_create(ctx->st->cso_context,
|
||||
ctx->hud = hud_create(ctx->st->cso_context, ctx->st,
|
||||
share_ctx ? share_ctx->hud : NULL);
|
||||
}
|
||||
|
||||
|
@@ -1029,7 +1029,7 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list,
|
||||
|
||||
c->st->st_manager_private = (void *) c;
|
||||
|
||||
c->hud = hud_create(c->st->cso_context, NULL);
|
||||
c->hud = hud_create(c->st->cso_context, c->st, NULL);
|
||||
|
||||
return c;
|
||||
|
||||
|
@@ -233,7 +233,7 @@ NineDevice9_ctor( struct NineDevice9 *This,
|
||||
if (!This->cso_sw) { return E_OUTOFMEMORY; }
|
||||
|
||||
/* Create first, it messes up our state. */
|
||||
This->hud = hud_create(This->context.cso, NULL); /* NULL result is fine */
|
||||
This->hud = hud_create(This->context.cso, NULL, NULL); /* NULL result is fine */
|
||||
|
||||
/* Available memory counter. Updated only for allocations with this device
|
||||
* instance. This is the Win 7 behavior.
|
||||
|
@@ -278,7 +278,7 @@ stw_create_context_attribs(HDC hdc, INT iLayerPlane, DHGLRC hShareContext,
|
||||
ctx->st->st_manager_private = (void *) ctx;
|
||||
|
||||
if (ctx->st->cso_context) {
|
||||
ctx->hud = hud_create(ctx->st->cso_context, NULL);
|
||||
ctx->hud = hud_create(ctx->st->cso_context, ctx->st, NULL);
|
||||
}
|
||||
|
||||
stw_lock_contexts(stw_dev);
|
||||
|
Reference in New Issue
Block a user