aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2015-11-10 15:06:04 -0800
committerIan Romanick <[email protected]>2016-01-11 15:38:03 -0800
commit36f413209f0c3e066578058cdc616a8b0dbb8a97 (patch)
tree6e16bc6ea2954633b6a6249c8e5fb209f47c68b5
parentb94e7f398d9f65b2e0fc646cfe69267292914c75 (diff)
meta/generate_mipmap: Track sampler using gl_sampler_object instead of GL API object handle
Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/mesa/drivers/common/meta.h2
-rw-r--r--src/mesa/drivers/common/meta_generate_mipmap.c29
2 files changed, 17 insertions, 14 deletions
diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h
index 856dcdbad7c..f0ac818019f 100644
--- a/src/mesa/drivers/common/meta.h
+++ b/src/mesa/drivers/common/meta.h
@@ -369,7 +369,7 @@ struct gen_mipmap_state
GLuint VAO;
struct gl_buffer_object *buf_obj;
GLuint FBO;
- GLuint Sampler;
+ struct gl_sampler_object *samp_obj;
struct blit_shader_table shaders;
};
diff --git a/src/mesa/drivers/common/meta_generate_mipmap.c b/src/mesa/drivers/common/meta_generate_mipmap.c
index 6aa83e97906..d95ebcc51ae 100644
--- a/src/mesa/drivers/common/meta_generate_mipmap.c
+++ b/src/mesa/drivers/common/meta_generate_mipmap.c
@@ -137,8 +137,11 @@ _mesa_meta_glsl_generate_mipmap_cleanup(struct gl_context *ctx,
_mesa_DeleteVertexArrays(1, &mipmap->VAO);
mipmap->VAO = 0;
_mesa_reference_buffer_object(ctx, &mipmap->buf_obj, NULL);
- _mesa_DeleteSamplers(1, &mipmap->Sampler);
- mipmap->Sampler = 0;
+
+ if (mipmap->samp_obj != NULL) {
+ _mesa_DeleteSamplers(1, &mipmap->samp_obj->Name);
+ mipmap->samp_obj = NULL;
+ }
if (mipmap->FBO != 0) {
_mesa_DeleteFramebuffers(1, &mipmap->FBO);
@@ -223,30 +226,30 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
*/
_mesa_BindTexture(target, texObj->Name);
- if (!mipmap->Sampler) {
- struct gl_sampler_object *samp_obj;
+ if (mipmap->samp_obj == NULL) {
+ GLuint sampler;
- _mesa_GenSamplers(1, &mipmap->Sampler);
+ _mesa_GenSamplers(1, &sampler);
- samp_obj = _mesa_lookup_samplerobj(ctx, mipmap->Sampler);
- assert(samp_obj != NULL && samp_obj->Name == mipmap->Sampler);
+ mipmap->samp_obj = _mesa_lookup_samplerobj(ctx, sampler);
+ assert(mipmap->samp_obj != NULL && mipmap->samp_obj->Name == sampler);
- _mesa_BindSampler(ctx->Texture.CurrentUnit, mipmap->Sampler);
+ _mesa_bind_sampler(ctx, ctx->Texture.CurrentUnit, mipmap->samp_obj);
- _mesa_set_sampler_filters(ctx, samp_obj, GL_LINEAR_MIPMAP_LINEAR,
+ _mesa_set_sampler_filters(ctx, mipmap->samp_obj, GL_LINEAR_MIPMAP_LINEAR,
GL_LINEAR);
- _mesa_set_sampler_wrap(ctx, samp_obj, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE,
- GL_CLAMP_TO_EDGE);
+ _mesa_set_sampler_wrap(ctx, mipmap->samp_obj, GL_CLAMP_TO_EDGE,
+ GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE);
/* We don't want to encode or decode sRGB values; treat them as linear.
* This is not technically correct for GLES3 but we don't get any API
* error at the moment.
*/
if (ctx->Extensions.EXT_texture_sRGB_decode) {
- _mesa_set_sampler_srgb_decode(ctx, samp_obj, GL_SKIP_DECODE_EXT);
+ _mesa_set_sampler_srgb_decode(ctx, mipmap->samp_obj, GL_SKIP_DECODE_EXT);
}
} else {
- _mesa_BindSampler(ctx->Texture.CurrentUnit, mipmap->Sampler);
+ _mesa_bind_sampler(ctx, ctx->Texture.CurrentUnit, mipmap->samp_obj);
}
assert(mipmap->FBO != 0);