mesa: add helper func for checking combined depthstencil buffers from st/mesa
Reviewed-by: Brian Paul <brianp@vmware.com> Tested-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
2dc2066b90
commit
f8855a4214
|
@ -473,6 +473,32 @@ _mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return true if the framebuffer has a combined depth/stencil
|
||||
* renderbuffer attached.
|
||||
*/
|
||||
GLboolean
|
||||
_mesa_has_depthstencil_combined(const struct gl_framebuffer *fb)
|
||||
{
|
||||
const struct gl_renderbuffer_attachment *depth =
|
||||
&fb->Attachment[BUFFER_DEPTH];
|
||||
const struct gl_renderbuffer_attachment *stencil =
|
||||
&fb->Attachment[BUFFER_STENCIL];
|
||||
|
||||
if (depth->Type == stencil->Type) {
|
||||
if (depth->Type == GL_RENDERBUFFER_EXT &&
|
||||
depth->Renderbuffer == stencil->Renderbuffer)
|
||||
return GL_TRUE;
|
||||
|
||||
if (depth->Type == GL_TEXTURE &&
|
||||
depth->Texture == stencil->Texture)
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* For debug only.
|
||||
*/
|
||||
|
|
|
@ -113,6 +113,9 @@ _mesa_framebuffer_renderbuffer(struct gl_context *ctx,
|
|||
extern void
|
||||
_mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb);
|
||||
|
||||
extern GLboolean
|
||||
_mesa_has_depthstencil_combined(const struct gl_framebuffer *fb);
|
||||
|
||||
extern void
|
||||
_mesa_test_framebuffer_completeness(struct gl_context *ctx,
|
||||
struct gl_framebuffer *fb);
|
||||
|
|
|
@ -239,31 +239,22 @@ st_BlitFramebuffer(struct gl_context *ctx,
|
|||
/* depth and/or stencil blit */
|
||||
|
||||
/* get src/dst depth surfaces */
|
||||
struct gl_renderbuffer_attachment *srcDepth =
|
||||
&readFB->Attachment[BUFFER_DEPTH];
|
||||
struct gl_renderbuffer_attachment *dstDepth =
|
||||
&drawFB->Attachment[BUFFER_DEPTH];
|
||||
struct gl_renderbuffer_attachment *srcStencil =
|
||||
&readFB->Attachment[BUFFER_STENCIL];
|
||||
struct gl_renderbuffer_attachment *dstStencil =
|
||||
&drawFB->Attachment[BUFFER_STENCIL];
|
||||
|
||||
struct st_renderbuffer *srcDepthRb =
|
||||
st_renderbuffer(srcDepth->Renderbuffer);
|
||||
st_renderbuffer(readFB->Attachment[BUFFER_DEPTH].Renderbuffer);
|
||||
struct st_renderbuffer *dstDepthRb =
|
||||
st_renderbuffer(dstDepth->Renderbuffer);
|
||||
st_renderbuffer(drawFB->Attachment[BUFFER_DEPTH].Renderbuffer);
|
||||
struct pipe_surface *dstDepthSurf =
|
||||
dstDepthRb ? dstDepthRb->surface : NULL;
|
||||
|
||||
struct st_renderbuffer *srcStencilRb =
|
||||
st_renderbuffer(srcStencil->Renderbuffer);
|
||||
st_renderbuffer(readFB->Attachment[BUFFER_STENCIL].Renderbuffer);
|
||||
struct st_renderbuffer *dstStencilRb =
|
||||
st_renderbuffer(dstStencil->Renderbuffer);
|
||||
st_renderbuffer(drawFB->Attachment[BUFFER_STENCIL].Renderbuffer);
|
||||
struct pipe_surface *dstStencilSurf =
|
||||
dstStencilRb ? dstStencilRb->surface : NULL;
|
||||
|
||||
if (st_is_depth_stencil_combined(srcDepth, srcStencil) &&
|
||||
st_is_depth_stencil_combined(dstDepth, dstStencil)) {
|
||||
if (_mesa_has_depthstencil_combined(readFB) &&
|
||||
_mesa_has_depthstencil_combined(drawFB)) {
|
||||
blit.mask = 0;
|
||||
if (mask & GL_DEPTH_BUFFER_BIT)
|
||||
blit.mask |= PIPE_MASK_Z;
|
||||
|
|
|
@ -547,30 +547,6 @@ st_validate_attachment(struct gl_context *ctx,
|
|||
|
||||
return valid;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if two renderbuffer attachments name a combined depth/stencil
|
||||
* renderbuffer.
|
||||
*/
|
||||
GLboolean
|
||||
st_is_depth_stencil_combined(const struct gl_renderbuffer_attachment *depth,
|
||||
const struct gl_renderbuffer_attachment *stencil)
|
||||
{
|
||||
assert(depth && stencil);
|
||||
|
||||
if (depth->Type == stencil->Type) {
|
||||
if (depth->Type == GL_RENDERBUFFER_EXT &&
|
||||
depth->Renderbuffer == stencil->Renderbuffer)
|
||||
return GL_TRUE;
|
||||
|
||||
if (depth->Type == GL_TEXTURE &&
|
||||
depth->Texture == stencil->Texture)
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -76,9 +76,4 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw);
|
|||
extern void
|
||||
st_init_fbo_functions(struct dd_function_table *functions);
|
||||
|
||||
extern GLboolean
|
||||
st_is_depth_stencil_combined(const struct gl_renderbuffer_attachment *depth,
|
||||
const struct gl_renderbuffer_attachment *stencil);
|
||||
|
||||
|
||||
#endif /* ST_CB_FBO_H */
|
||||
|
|
Loading…
Reference in New Issue