tests: Use staging buffer for WritePPM
diff --git a/tests/xgltestframework.cpp b/tests/xgltestframework.cpp
index 72e8de5..a2ffd66 100644
--- a/tests/xgltestframework.cpp
+++ b/tests/xgltestframework.cpp
@@ -177,7 +177,11 @@
{
string filename;
XGL_RESULT err;
- int x, y;
+ int x, y;
+ XglImage displayImage(image->device());
+
+ displayImage.init(image->extent().width, image->extent().height, image->format(), 0, XGL_LINEAR_TILING);
+ displayImage.CopyImage(*image);
filename.append(basename);
filename.append(".ppm");
@@ -194,36 +198,33 @@
ASSERT_XGL_SUCCESS( err );
ASSERT_EQ(data_size, sizeof(sr_layout));
- const char *ptr;
-
- err = xglMapMemory( image->memory(), 0, (void **) &ptr );
- ASSERT_XGL_SUCCESS( err );
-
+ char *ptr;
+ ptr = (char *) displayImage.map();
ptr += sr_layout.offset;
ofstream file (filename.c_str());
ASSERT_TRUE(file.is_open()) << "Unable to open file: " << filename;
file << "P6\n";
- file << image->width() << "\n";
- file << image->height() << "\n";
+ file << displayImage.width() << "\n";
+ file << displayImage.height() << "\n";
file << 255 << "\n";
- for (y = 0; y < image->height(); y++) {
+ for (y = 0; y < displayImage.height(); y++) {
const int *row = (const int *) ptr;
int swapped;
- if (image->format() == XGL_FMT_B8G8R8A8_UNORM)
+ if (displayImage.format() == XGL_FMT_B8G8R8A8_UNORM)
{
- for (x = 0; x < image->width(); x++) {
+ for (x = 0; x < displayImage.width(); x++) {
swapped = (*row & 0xff00ff00) | (*row & 0x000000ff) << 16 | (*row & 0x00ff0000) >> 16;
file.write((char *) &swapped, 3);
row++;
}
}
- else if (image->format() == XGL_FMT_R8G8B8A8_UNORM)
+ else if (displayImage.format() == XGL_FMT_R8G8B8A8_UNORM)
{
- for (x = 0; x < image->width(); x++) {
+ for (x = 0; x < displayImage.width(); x++) {
file.write((char *) row, 3);
row++;
}
@@ -237,9 +238,7 @@
}
file.close();
-
- err = xglUnmapMemory( image->memory() );
- ASSERT_XGL_SUCCESS( err );
+ displayImage.unmap();
}
void XglTestFramework::Compare(const char *basename, XglImage *image )