diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index fa52a4e18a8..ef59041d5ae 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -1138,13 +1138,11 @@ try_pbo_upload_common(struct gl_context *ctx, struct cso_context *cso = st->cso_context; struct pipe_context *pipe = st->pipe; bool success = false; + void *fs; - /* Create fragment shader */ - if (!st->pbo.upload_fs) { - st->pbo.upload_fs = st_pbo_create_upload_fs(st); - if (!st->pbo.upload_fs) - return false; - } + fs = st_pbo_get_upload_fs(st); + if (!fs) + return false; cso_save_state(cso, (CSO_BIT_FRAGMENT_SAMPLER_VIEWS | CSO_BIT_FRAGMENT_SAMPLERS | @@ -1217,7 +1215,7 @@ try_pbo_upload_common(struct gl_context *ctx, } /* Set up the fragment shader */ - cso_set_fragment_shader_handle(cso, st->pbo.upload_fs); + cso_set_fragment_shader_handle(cso, fs); success = st_pbo_draw(st, addr, surface->width, surface->height); diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c index ca6bdea1b66..1e215542bfb 100644 --- a/src/mesa/state_tracker/st_pbo.c +++ b/src/mesa/state_tracker/st_pbo.c @@ -515,9 +515,12 @@ create_fs(struct st_context *st, bool download, enum pipe_texture_target target) } void * -st_pbo_create_upload_fs(struct st_context *st) +st_pbo_get_upload_fs(struct st_context *st) { - return create_fs(st, false, 0); + if (!st->pbo.upload_fs) + st->pbo.upload_fs = create_fs(st, false, 0); + + return st->pbo.upload_fs; } void * diff --git a/src/mesa/state_tracker/st_pbo.h b/src/mesa/state_tracker/st_pbo.h index 17359c47733..6513093002d 100644 --- a/src/mesa/state_tracker/st_pbo.h +++ b/src/mesa/state_tracker/st_pbo.h @@ -85,7 +85,7 @@ void * st_pbo_create_gs(struct st_context *st); void * -st_pbo_create_upload_fs(struct st_context *st); +st_pbo_get_upload_fs(struct st_context *st); void * st_pbo_get_download_fs(struct st_context *st, enum pipe_texture_target target);