Skip to content

Commit

Permalink
Fix: Test PVRTC extension and always use power-of-two dimensions
Browse files Browse the repository at this point in the history
  • Loading branch information
spnda committed Mar 5, 2024
1 parent 1918ab4 commit 64b782f
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 8 deletions.
19 changes: 19 additions & 0 deletions external/vulkancts/framework/vulkan/vkImageUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,25 @@ bool isPvrtcFormat (VkFormat format)
return false;
}

bool isPvrtc1Format (VkFormat format)
{
#ifndef CTS_USES_VULKANSC
switch (format)
{
case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
return true;
default:
return false;
}
#else
DE_UNREF(format);
#endif
return false;
}

const std::map<VkFormat, std::string> spirvFormats = {
{ VK_FORMAT_R32G32B32A32_SFLOAT, "Rgba32f" },
{ VK_FORMAT_R32G32_SFLOAT, "Rg32f" },
Expand Down
1 change: 1 addition & 0 deletions external/vulkancts/framework/vulkan/vkImageUtil.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ bool isYCbCrFormat (VkFormat format);
bool isYCbCrExtensionFormat (VkFormat format);
bool isYCbCrConversionFormat (VkFormat format);
bool isPvrtcFormat (VkFormat format);
bool isPvrtc1Format (VkFormat format);
PlanarFormatDescription getPlanarFormatDescription (VkFormat format);
int getPlaneCount (VkFormat format);
deUint32 getMipmapCount (VkFormat format,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,12 +180,23 @@ ImageAllocator::ImageAllocator (deRandom& random, deBool dedicated, std::vector<
else
m_colorFormat = (VkFormat)optimalformats[deRandom_getUint32(&random) % optimalformats.size()];

int widthAlignment = (isYCbCr420Format(m_colorFormat) || isYCbCr422Format(m_colorFormat)) ? 2 : 1;
int heightAlignment = isYCbCr420Format(m_colorFormat) ? 2 : 1;
if (isPvrtc1Format(m_colorFormat))
{
// See VUID-VkImageCreateInfo-format-09583 and VUID-VkImageCreateInfo-format-09584
// PVRTC1 textures have to have both a width and height that is a power of 2.
m_size = tcu::IVec2(1 << (deRandom_getUint32(&random) % 4 + 1),
1 << (deRandom_getUint32(&random) % 4 + 1));
}
else
{
int widthAlignment = (isYCbCr420Format(m_colorFormat) || isYCbCr422Format(m_colorFormat)) ? 2 : 1;
int heightAlignment = isYCbCr420Format(m_colorFormat) ? 2 : 1;

// Random small size for causing potential alignment issues
m_size = tcu::IVec2((deRandom_getUint32(&random) % 16 + 3) & ~(widthAlignment - 1),
(deRandom_getUint32(&random) % 16 + 3) & ~(heightAlignment - 1));
}

// Random small size for causing potential alignment issues
m_size = tcu::IVec2((deRandom_getUint32(&random) % 16 + 3) & ~(widthAlignment - 1),
(deRandom_getUint32(&random) % 16 + 3) & ~(heightAlignment - 1));
// Pick random memory type from the supported set
m_memoryType = memoryTypes[deRandom_getUint32(&random) % memoryTypes.size()];
}
Expand Down
1 change: 1 addition & 0 deletions external/vulkancts/modules/vulkan/vktTestCase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ vector<string> filterExtensions (const vector<VkExtensionProperties>& extensions
"VK_NV_representative_fragment_test",
"VK_NV_shader_atomic_float16_vector",
"VK_MVK_macos_surface",
"VK_IMG_format_pvrtc"
};

const char* exclusions[] =
Expand Down
6 changes: 3 additions & 3 deletions framework/delibs/debase/deInt32.h
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ DE_INLINE deBool deIsPowerOfTwoSize (size_t a)
}

/*--------------------------------------------------------------------*//*!
* \brief Roud a value up to a power-of-two.
* \brief Round a value up to a power-of-two.
* \param a Input value.
* \return Smallest power-of-two value that is greater or equal to an input value.
*//*--------------------------------------------------------------------*/
Expand All @@ -264,7 +264,7 @@ DE_INLINE deUint32 deSmallestGreaterOrEquallPowerOfTwoU32 (deUint32 a)
}

/*--------------------------------------------------------------------*//*!
* \brief Roud a value up to a power-of-two.
* \brief Round a value up to a power-of-two.
* \param a Input value.
* \return Smallest power-of-two value that is greater or equal to an input value.
*//*--------------------------------------------------------------------*/
Expand All @@ -281,7 +281,7 @@ DE_INLINE deUint64 deSmallestGreaterOrEquallPowerOfTwoU64 (deUint64 a)
}

/*--------------------------------------------------------------------*//*!
* \brief Roud a value up to a power-of-two.
* \brief Round a value up to a power-of-two.
* \param a Input value.
* \return Smallest power-of-two value that is greater or equal to an input value.
*//*--------------------------------------------------------------------*/
Expand Down

0 comments on commit 64b782f

Please sign in to comment.