mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
mesa: fix glGetInteger*(GL_SAMPLER_BINDING).
If the sampler object has been deleted on another context, an alternative context may reference the old sampler. So ensure the sampler object still exists. Note: this is a candidate for the stable branch. Signed-off-by: Alan Hourihane <alanh@vmware.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
eddf33f711
commit
5984a911f9
3 changed files with 14 additions and 2 deletions
|
|
@ -34,6 +34,7 @@
|
|||
#include "state.h"
|
||||
#include "texcompress.h"
|
||||
#include "framebuffer.h"
|
||||
#include "samplerobj.h"
|
||||
|
||||
/* This is a table driven implemetation of the glGet*v() functions.
|
||||
* The basic idea is that most getters just look up an int somewhere
|
||||
|
|
@ -827,7 +828,16 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
|
|||
{
|
||||
struct gl_sampler_object *samp =
|
||||
ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler;
|
||||
v->value_int = samp ? samp->Name : 0;
|
||||
|
||||
/*
|
||||
* The sampler object may have been deleted on another context,
|
||||
* so we try to lookup the sampler object before returning its Name.
|
||||
*/
|
||||
if (samp && _mesa_lookup_samplerobj(ctx, samp->Name)) {
|
||||
v->value_int = samp->Name;
|
||||
} else {
|
||||
v->value_int = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
/* GL_ARB_uniform_buffer_object */
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
#include "main/samplerobj.h"
|
||||
|
||||
|
||||
static struct gl_sampler_object *
|
||||
struct gl_sampler_object *
|
||||
_mesa_lookup_samplerobj(struct gl_context *ctx, GLuint name)
|
||||
{
|
||||
if (name == 0)
|
||||
|
|
|
|||
|
|
@ -62,6 +62,8 @@ _mesa_reference_sampler_object(struct gl_context *ctx,
|
|||
_mesa_reference_sampler_object_(ctx, ptr, samp);
|
||||
}
|
||||
|
||||
extern struct gl_sampler_object *
|
||||
_mesa_lookup_samplerobj(struct gl_context *ctx, GLuint name);
|
||||
|
||||
extern struct gl_sampler_object *
|
||||
_mesa_new_sampler_object(struct gl_context *ctx, GLuint name);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue