From: Tony Barbour Date: Fri, 3 Apr 2015 21:11:43 +0000 (-0600) Subject: tests: Accomodate optimal tiling images (for nvidia) X-Git-Tag: sdk-0.1.0~277 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6b20a0fb120b7eab1d487e7b85c84ebc36a123d3;p=platform%2Fupstream%2FVulkan-LoaderAndValidationLayers.git tests: Accomodate optimal tiling images (for nvidia) --- diff --git a/tests/xglrenderframework.cpp b/tests/xglrenderframework.cpp index aa9f8bf..0a54ed3 100644 --- a/tests/xglrenderframework.cpp +++ b/tests/xglrenderframework.cpp @@ -365,12 +365,28 @@ XglImage::XglImage(XglDevice *dev) m_imageInfo.layout = XGL_IMAGE_LAYOUT_GENERAL; } +static bool IsCompatible(XGL_FLAGS usage, XGL_FLAGS features) +{ + if ((usage & XGL_IMAGE_USAGE_SHADER_ACCESS_READ_BIT) && + !(features & XGL_FORMAT_IMAGE_SHADER_READ_BIT)) + return false; + if ((usage & XGL_IMAGE_USAGE_SHADER_ACCESS_WRITE_BIT) && + !(features & XGL_FORMAT_IMAGE_SHADER_WRITE_BIT)) + return false; + return true; +} + void XglImage::init(uint32_t w, uint32_t h, XGL_FORMAT fmt, XGL_FLAGS usage, - XGL_IMAGE_TILING tiling) + XGL_IMAGE_TILING requested_tiling) { uint32_t mipCount; + XGL_FORMAT_PROPERTIES image_fmt; + XGL_IMAGE_TILING tiling; + XGL_RESULT err; + size_t size; + mipCount = 0; uint32_t _w = w; @@ -382,6 +398,28 @@ void XglImage::init(uint32_t w, uint32_t h, mipCount++; } + size = sizeof(image_fmt); + err = xglGetFormatInfo(m_device->obj(), fmt, + XGL_INFO_TYPE_FORMAT_PROPERTIES, + &size, &image_fmt); + ASSERT_XGL_SUCCESS(err); + + if (requested_tiling == XGL_LINEAR_TILING) { + if (IsCompatible(usage, image_fmt.linearTilingFeatures)) { + tiling = XGL_LINEAR_TILING; + } else if (IsCompatible(usage, image_fmt.optimalTilingFeatures)) { + tiling = XGL_OPTIMAL_TILING; + } else { + ASSERT_TRUE(false) << "Error: Cannot find requested tiling configuration"; + } + } else if (IsCompatible(usage, image_fmt.optimalTilingFeatures)) { + tiling = XGL_OPTIMAL_TILING; + } else if (IsCompatible(usage, image_fmt.linearTilingFeatures)) { + tiling = XGL_LINEAR_TILING; + } else { + ASSERT_TRUE(false) << "Error: Cannot find requested tiling configuration"; + } + XGL_IMAGE_CREATE_INFO imageCreateInfo = xgl_testing::Image::create_info(); imageCreateInfo.imageType = XGL_IMAGE_2D; imageCreateInfo.format = fmt;