diff options
author | Samuel Pitoiset <[email protected]> | 2017-04-24 14:22:24 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2017-06-14 10:04:36 +0200 |
commit | 028a9b54c49ee8bf70ef54f2c9dd58ee660291ec (patch) | |
tree | dfcb6b74e13388aade661e9f327dea0bd9b1585c | |
parent | eb9c708ee2f7d676c6428920adbca4d665fb4174 (diff) |
mesa: refuse to change textures when a handle is allocated
The ARB_bindless_texture spec says:
"The error INVALID_OPERATION is generated by TexImage*, CopyTexImage*,
CompressedTexImage*, TexBuffer*, TexParameter*, as well as other
functions defined in terms of these, if the texture object to be
modified is referenced by one or more texture or image handles."
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r-- | src/mesa/main/teximage.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 34d3e0864dc..54f7c08d50e 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -1578,7 +1578,7 @@ legal_texsubimage_target(struct gl_context *ctx, GLuint dims, GLenum target, /** * Helper function to determine if a texture object is mutable (in terms - * of GL_ARB_texture_storage). + * of GL_ARB_texture_storage/GL_ARB_bindless_texture). */ static GLboolean mutable_tex_object(struct gl_context *ctx, GLenum target) @@ -1587,6 +1587,17 @@ mutable_tex_object(struct gl_context *ctx, GLenum target) if (!texObj) return GL_FALSE; + if (texObj->HandleAllocated) { + /* The ARB_bindless_texture spec says: + * + * "The error INVALID_OPERATION is generated by TexImage*, CopyTexImage*, + * CompressedTexImage*, TexBuffer*, TexParameter*, as well as other + * functions defined in terms of these, if the texture object to be + * modified is referenced by one or more texture or image handles." + */ + return GL_FALSE; + } + return !texObj->Immutable; } @@ -5070,6 +5081,18 @@ texture_buffer_range(struct gl_context *ctx, return; } + if (texObj->HandleAllocated) { + /* The ARB_bindless_texture spec says: + * + * "The error INVALID_OPERATION is generated by TexImage*, CopyTexImage*, + * CompressedTexImage*, TexBuffer*, TexParameter*, as well as other + * functions defined in terms of these, if the texture object to be + * modified is referenced by one or more texture or image handles." + */ + _mesa_error(ctx, GL_INVALID_OPERATION, "%s(immutable texture)", caller); + return; + } + format = _mesa_validate_texbuffer_format(ctx, internalFormat); if (format == MESA_FORMAT_NONE) { _mesa_error(ctx, GL_INVALID_ENUM, "%s(internalFormat %s)", |