gallium: New function to dump surfaces.

This commit is contained in:
José Fonseca
2008-08-06 14:48:11 +01:00
parent 9a20cecc5c
commit 72a5e47978
2 changed files with 44 additions and 7 deletions

View File

@@ -50,12 +50,12 @@
#endif
#include "pipe/p_compiler.h"
#include "pipe/p_util.h"
#include "pipe/p_debug.h"
#include "pipe/p_format.h"
#include "pipe/p_state.h"
#include "pipe/p_inlines.h"
#include "util/u_string.h"
@@ -509,7 +509,7 @@ char *pf_sprint_name( char *str, enum pipe_format format )
void debug_dump_image(const char *prefix,
unsigned format, unsigned cpp,
unsigned width, unsigned height,
unsigned pitch,
unsigned stride,
const void *data)
{
#ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
@@ -530,7 +530,7 @@ void debug_dump_image(const char *prefix,
for(i = 0; i < sizeof(filename); ++i)
wfilename[i] = (WCHAR)filename[i];
pMap = (unsigned char *)EngMapFile(wfilename, sizeof(header) + cpp*width*height, &iFile);
pMap = (unsigned char *)EngMapFile(wfilename, sizeof(header) + height*width*cpp, &iFile);
if(!pMap)
return;
@@ -542,11 +542,44 @@ void debug_dump_image(const char *prefix,
pMap += sizeof(header);
for(i = 0; i < height; ++i) {
memcpy(pMap, (unsigned char *)data + cpp*pitch*i, cpp*width);
memcpy(pMap, (unsigned char *)data + stride*i, cpp*width);
pMap += cpp*width;
}
EngUnmapFile(iFile);
#endif
}
void debug_dump_surface(const char *prefix,
struct pipe_surface *surface)
{
unsigned surface_usage;
void *data;
if (!surface)
goto error1;
/* XXX: force mappable surface */
surface_usage = surface->usage;
surface->usage |= PIPE_BUFFER_USAGE_CPU_READ;
data = pipe_surface_map(surface,
PIPE_BUFFER_USAGE_CPU_READ);
if(!data)
goto error2;
debug_dump_image(prefix,
surface->format,
surface->block.size,
surface->nblocksx,
surface->nblocksy,
surface->stride,
data);
pipe_surface_unmap(surface);
error2:
surface->usage = surface_usage;
error1:
;
}
#endif