mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
i965/aub: Dump a final bitmap from DestroyContext.
Certain applications don't call SwapBuffers before exiting. Yet, we'd really like to see a bitmap containing the final rendered image even if they choose never to present it. In particular, Piglit tests (at least with -auto -fbo) fall into this category. Many of them failed to dump any images at all. Dumping one final image at context destruction time seems to work. We may wish to pursue a more elegant solution later. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
42bc0b9b9d
commit
252d3118dd
3 changed files with 41 additions and 29 deletions
|
|
@ -793,6 +793,10 @@ intelDestroyContext(__DRIcontext * driContextPriv)
|
|||
if (intel) {
|
||||
INTEL_FIREVERTICES(intel);
|
||||
|
||||
/* Dump a final BMP in case the application doesn't call SwapBuffers */
|
||||
if (INTEL_DEBUG & DEBUG_AUB)
|
||||
aub_dump_bmp(&intel->ctx);
|
||||
|
||||
_mesa_meta_free(&intel->ctx);
|
||||
|
||||
intel->vtbl.destroy(intel);
|
||||
|
|
|
|||
|
|
@ -108,6 +108,40 @@ const GLuint __driNConfigOptions = 14;
|
|||
static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
|
||||
#endif /*USE_NEW_INTERFACE */
|
||||
|
||||
void
|
||||
aub_dump_bmp(struct gl_context *ctx)
|
||||
{
|
||||
struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||
|
||||
for (int i = 0; i < fb->_NumColorDrawBuffers; i++) {
|
||||
struct intel_renderbuffer *irb =
|
||||
intel_renderbuffer(fb->_ColorDrawBuffers[i]);
|
||||
|
||||
if (irb && irb->mt) {
|
||||
enum aub_dump_bmp_format format;
|
||||
|
||||
switch (irb->Base.Base.Format) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
case MESA_FORMAT_XRGB8888:
|
||||
format = AUB_DUMP_BMP_FORMAT_ARGB_8888;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
drm_intel_gem_bo_aub_dump_bmp(irb->mt->region->bo,
|
||||
irb->draw_x,
|
||||
irb->draw_y,
|
||||
irb->Base.Base.Width,
|
||||
irb->Base.Base.Height,
|
||||
format,
|
||||
irb->mt->region->pitch *
|
||||
irb->mt->region->cpp,
|
||||
0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static const __DRItexBufferExtension intelTexBufferExtension = {
|
||||
{ __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
|
||||
intelSetTexBuffer,
|
||||
|
|
@ -131,35 +165,7 @@ intelDRI2Flush(__DRIdrawable *drawable)
|
|||
intel_batchbuffer_flush(intel);
|
||||
|
||||
if (INTEL_DEBUG & DEBUG_AUB) {
|
||||
struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||
|
||||
for (int i = 0; i < fb->_NumColorDrawBuffers; i++) {
|
||||
struct intel_renderbuffer *irb =
|
||||
intel_renderbuffer(fb->_ColorDrawBuffers[i]);
|
||||
|
||||
if (irb && irb->mt) {
|
||||
enum aub_dump_bmp_format format;
|
||||
|
||||
switch (irb->Base.Base.Format) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
case MESA_FORMAT_XRGB8888:
|
||||
format = AUB_DUMP_BMP_FORMAT_ARGB_8888;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
drm_intel_gem_bo_aub_dump_bmp(irb->mt->region->bo,
|
||||
irb->draw_x,
|
||||
irb->draw_y,
|
||||
irb->Base.Base.Width,
|
||||
irb->Base.Base.Height,
|
||||
format,
|
||||
irb->mt->region->pitch *
|
||||
irb->mt->region->cpp,
|
||||
0);
|
||||
}
|
||||
}
|
||||
aub_dump_bmp(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -139,4 +139,6 @@ intelMakeCurrent(__DRIcontext * driContextPriv,
|
|||
__DRIdrawable * driDrawPriv,
|
||||
__DRIdrawable * driReadPriv);
|
||||
|
||||
void aub_dump_bmp(struct gl_context *ctx);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue