tests: make XglCmdClearColorImageTest reusable for raw clears
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index 6e41b63..d12531b 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -1423,6 +1423,11 @@
}
}
+ void init_test_formats()
+ {
+ init_test_formats(static_cast<XGL_FLAGS>(-1));
+ }
+
void fill_src(xgl_testing::Image &img, const xgl_testing::ImageChecker &checker)
{
if (img.transparent()) {
@@ -1676,13 +1681,28 @@
class XglCmdClearColorImageTest : public XglCmdBlitImageTest {
protected:
+ XglCmdClearColorImageTest() : test_raw_(false) {}
+ XglCmdClearColorImageTest(bool test_raw) : test_raw_(test_raw) {}
+
virtual void SetUp()
{
XglCmdBlitTest::SetUp();
- init_test_formats(XGL_FORMAT_CONVERSION_BIT);
+
+ if (test_raw_)
+ init_test_formats();
+ else
+ init_test_formats(XGL_FORMAT_CONVERSION_BIT);
+
ASSERT_NE(true, test_formats_.empty());
}
+ union Color {
+ XGL_FLOAT color[4];
+ XGL_UINT32 raw[4];
+ };
+
+ bool test_raw_;
+
std::vector<uint8_t> color_to_raw(XGL_FORMAT format, const XGL_FLOAT color[4])
{
std::vector<uint8_t> raw;
@@ -1710,8 +1730,43 @@
return raw;
}
+ std::vector<uint8_t> color_to_raw(XGL_FORMAT format, const XGL_UINT32 color[4])
+ {
+ std::vector<uint8_t> raw;
+
+ // TODO support all formats
+ if (format.numericFormat == XGL_NUM_FMT_UNORM) {
+ switch (format.channelFormat) {
+ case XGL_CH_FMT_R8G8B8A8:
+ raw.push_back(static_cast<uint8_t>(color[0]));
+ raw.push_back(static_cast<uint8_t>(color[1]));
+ raw.push_back(static_cast<uint8_t>(color[2]));
+ raw.push_back(static_cast<uint8_t>(color[3]));
+ break;
+ case XGL_CH_FMT_B8G8R8A8:
+ raw.push_back(static_cast<uint8_t>(color[2]));
+ raw.push_back(static_cast<uint8_t>(color[1]));
+ raw.push_back(static_cast<uint8_t>(color[0]));
+ raw.push_back(static_cast<uint8_t>(color[3]));
+ break;
+ default:
+ break;
+ }
+ }
+
+ return raw;
+ }
+
+ std::vector<uint8_t> color_to_raw(XGL_FORMAT format, const Color &color)
+ {
+ if (test_raw_)
+ return color_to_raw(format, color.raw);
+ else
+ return color_to_raw(format, color.color);
+ }
+
void test_clear_color_image(const XGL_IMAGE_CREATE_INFO &img_info,
- const XGL_FLOAT color[4],
+ const Color &color,
const std::vector<XGL_IMAGE_SUBRESOURCE_RANGE> &ranges)
{
xgl_testing::Image img;
@@ -1731,9 +1786,14 @@
}
cmd_.begin();
+
xglCmdPrepareImages(cmd_.obj(), to_clear.size(), &to_clear[0]);
- xglCmdClearColorImage(cmd_.obj(), img.obj(), color, ranges.size(), &ranges[0]);
+ if (test_raw_)
+ xglCmdClearColorImageRaw(cmd_.obj(), img.obj(), color.raw, ranges.size(), &ranges[0]);
+ else
+ xglCmdClearColorImage(cmd_.obj(), img.obj(), color.color, ranges.size(), &ranges[0]);
xglCmdPrepareImages(cmd_.obj(), to_xfer.size(), &to_xfer[0]);
+
cmd_.end();
submit_and_done();
@@ -1751,6 +1811,15 @@
checker.set_solid_pattern(solid_pattern);
check_dst(img, checker);
}
+
+ void test_clear_color_image(const XGL_IMAGE_CREATE_INFO &img_info,
+ const XGL_FLOAT color[4],
+ const std::vector<XGL_IMAGE_SUBRESOURCE_RANGE> &ranges)
+ {
+ Color c;
+ memcpy(c.color, color, sizeof(c.color));
+ test_clear_color_image(img_info, c, ranges);
+ }
};
TEST_F(XglCmdClearColorImageTest, Basic)