summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlejandro PiƱeiro <[email protected]>2015-12-19 11:02:21 +0100
committerEduardo Lima Mitev <[email protected]>2016-03-03 15:14:06 +0100
commitb750144b0a5be87b5ed3008f3373b1f96722b9bd (patch)
tree5038c5c5c648b02bcb508fab37801fca077df989 /src
parente98a3c799f5db65966f87c5d59552ae22a001084 (diff)
mesa/formatquery: support for IMAGE_FORMAT_COMPATIBILITY_TYPE
From arb_internalformat_query2 spec: "IMAGE_FORMAT_COMPATIBILITY_TYPE: The matching criteria use for the resource when used as an image textures is returned in <params>. This is equivalent to calling GetTexParameter with <value> set to IMAGE_FORMAT_COMPATIBILITY_TYPE." Current implementation of GetTexParameter for this case returns a field of a texture object, so the support of this pname was implemented creating a temporal texture object and returning that value. It is worth to mention that right now that field is not reassigned after initialization. So it is somehow hardcoded. An alternative option would be return that value. That doesn't seems really scalable though. v2: use _mesa_has## instead of direct ctx->Extensions access (Nanley Chery) Reviewed-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/main/formatquery.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c
index 14c69f629df..d9df6db3fbd 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -30,6 +30,7 @@
#include "formatquery.h"
#include "teximage.h"
#include "texparam.h"
+#include "texobj.h"
static bool
_is_renderable(struct gl_context *ctx, GLenum internalformat)
@@ -948,9 +949,26 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
/* @TODO */
break;
- case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
- /* @TODO */
+ case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: {
+ if (!_mesa_has_ARB_shader_image_load_store(ctx))
+ goto end;
+
+ if (!_mesa_legal_get_tex_level_parameter_target(ctx, target, true))
+ goto end;
+
+ /* From spec: "Equivalent to calling GetTexParameter with <value> set
+ * to IMAGE_FORMAT_COMPATIBILITY_TYPE."
+ *
+ * GetTexParameter just returns
+ * tex_obj->ImageFormatCompatibilityType. We create a fake tex_obj
+ * just with the purpose of getting the value.
+ */
+ struct gl_texture_object *tex_obj = _mesa_new_texture_object(ctx, 0, target);
+ buffer[0] = tex_obj->ImageFormatCompatibilityType;
+ _mesa_delete_texture_object(ctx, tex_obj);
+
break;
+ }
case GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST:
/* @TODO */