diff options
author | Antia Puentes <[email protected]> | 2015-12-19 20:17:11 +0100 |
---|---|---|
committer | Eduardo Lima Mitev <[email protected]> | 2016-03-03 15:14:07 +0100 |
commit | 467f462c75281083f91846f176d6fd4a5d1afbbd (patch) | |
tree | 754bc86eb6036e3842252a302e8c0d6536c6005a /src/mesa | |
parent | bd45fb3de4d067c014084affef76095ba74091d9 (diff) |
mesa/formatquery: Added simultaneous texture and depth/stencil queries
From the ARB_internalformat_query2 specification:
"- SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: The support for using the resource
both as a source for texture sampling while it is bound as a buffer for
depth test is written to <params>. For example, a depth (or stencil)
texture could be bound simultaneously for texturing while it is bound as
a depth (and/or stencil) buffer without causing a feedback loop, provided
that depth writes are disabled.
- SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: The support for using the resource
both as a source for texture sampling while it is bound as a buffer for
stencil test is written to <params>. For example, a depth (or stencil)
texture could be bound simultaneously for texturing while it is bound as
a depth (and/or stencil) buffer without causing a feedback loop,
provided that stencil writes are disabled.
- SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: The support for using the resource
both as a source for texture sampling while performing depth writes to
the resources is written to <params>. For example, a depth-stencil
texture could be bound simultaneously for stencil texturing while it
is bound as a depth buffer. Feedback loops cannot occur because sampling
a stencil texture only returns the stencil portion, and thus writes to
the depth buffer do not modify the stencil portions.
- SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: The support for using the resource
both as a source for texture sampling while performing stencil writes to
the resources is written to <params>. For example, a depth-stencil
texture could be bound simultaneously for depth-texturing while it is
bound as a stencil buffer. Feedback loops cannot occur because sampling
a depth texture only returns the depth portion, and thus writes to
the stencil buffer could not modify the depth portions.
For all of them,
"Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned."
Reviewed-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/main/formatquery.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c index 289f133114d..c2b896c7304 100644 --- a/src/mesa/main/formatquery.c +++ b/src/mesa/main/formatquery.c @@ -611,6 +611,10 @@ _mesa_query_internal_format_default(struct gl_context *ctx, GLenum target, case GL_SHADER_IMAGE_LOAD: case GL_SHADER_IMAGE_STORE: case GL_SHADER_IMAGE_ATOMIC: + case GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: + case GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: + case GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: + case GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: params[0] = GL_FULL_SUPPORT; break; @@ -1307,19 +1311,24 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, } case GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: - /* @TODO */ - break; - case GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: - /* @TODO */ - break; - case GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: - /* @TODO */ - break; - case GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: - /* @TODO */ + if (target == GL_RENDERBUFFER) + goto end; + + if (!_mesa_is_depthstencil_format(internalformat)) { + if (((pname == GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST || + pname == GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE) && + !_mesa_is_depth_format(internalformat)) || + ((pname == GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST || + pname == GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE) && + !_mesa_is_stencil_format(internalformat))) + goto end; + } + + ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname, + buffer); break; case GL_TEXTURE_COMPRESSED: |