summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/state_tracker/st_cb_texture.c12
-rw-r--r--src/mesa/state_tracker/st_pbo.c7
-rw-r--r--src/mesa/state_tracker/st_pbo.h2
3 files changed, 11 insertions, 10 deletions
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);