dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sfloat
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
dEQP-VK.wsi.android.surface.create
dEQP-VK.wsi.android.surface.create_custom_allocator
dEQP-VK.wsi.android.surface.create_simulate_oom
const std::string& name,
const Texture texture,
const VkFormat format,
- const bool signedInt);
+ const bool signedInt,
+ const bool relaxedPrecision);
void checkSupport (Context& context) const;
void initPrograms (SourceCollections& programCollection) const;
const Texture m_texture;
VkFormat m_format;
bool m_operandForce; // Use an operand that doesn't match SampledType?
+ bool m_relaxedPrecision;
};
ImageExtendOperandTest::ImageExtendOperandTest (tcu::TestContext& testCtx,
const std::string& name,
const Texture texture,
const VkFormat format,
- const bool operandForce)
+ const bool operandForce,
+ const bool relaxedPrecision)
: TestCase (testCtx, name, "")
, m_texture (texture)
, m_format (format)
, m_operandForce (operandForce)
+ , m_relaxedPrecision (relaxedPrecision)
{
}
"OpDecorate %src_image_ptr Binding 0\n"
"OpDecorate %src_image_ptr NonWritable\n"
+ "${relaxed_precision}"
+
"OpDecorate %dst_image_ptr DescriptorSet 0\n"
"OpDecorate %dst_image_ptr Binding 1\n"
"OpDecorate %dst_image_ptr NonReadable\n"
auto it = formatDataMap.find(m_format);
DE_ASSERT (it != formatDataMap.end()); // Missing int format data
auto spirvImageFormat = it->second.spirvImageFormat;
- auto isExtendedFormat = it->second.isExtendedFormat;
// Request additional capability when needed
std::string capability = "";
- if (isExtendedFormat)
+ if (it->second.isExtendedFormat)
capability += "OpCapability StorageImageExtendedFormats\n";
+ std::string relaxed = "";
+ if (m_relaxedPrecision)
+ relaxed += "OpDecorate %src_image_ptr RelaxedPrecision\n";
+
// Use i32 SampledType only for signed images and only where we're not forcing
// the signedness usingthe SignExtend operand. Everything else uses u32.
std::string readTypePostfix = (isSigned && !m_operandForce) ? "i32" : "u32";
{ "image_var_id", "%src_image_ptr" },
{ "image_id", "%src_image" },
{ "capability", capability },
+ { "relaxed_precision", relaxed },
{ "image_format", spirvImageFormat },
{ "sampled_type", (std::string("%type_") + readTypePostfix) },
{ "read_vect4_type", (std::string("%type_vec4_") + readTypePostfix) },
return de::MovePtr<TestCase>(new LoadStoreTest(testCtx, name, "", texture, format, format, LoadStoreTest::FLAG_RESTRICT_IMAGES | LoadStoreTest::FLAG_DECLARE_IMAGE_FORMAT_IN_SHADER));
}
+static bool relaxedOK(VkFormat format)
+{
+ tcu::IVec4 bitDepth = tcu::getTextureFormatBitDepth(mapVkFormat(format));
+ int maxBitDepth = deMax32(deMax32(bitDepth[0], bitDepth[1]), deMax32(bitDepth[2], bitDepth[3]));
+ return maxBitDepth <= 16;
+}
+
tcu::TestCaseGroup* createImageExtendOperandsTests(tcu::TestContext& testCtx)
{
de::MovePtr<tcu::TestCaseGroup> testGroup(new tcu::TestCaseGroup(testCtx, "extend_operands_spirv1p4", "Cases with SignExtend and ZeroExtend"));
if (!isIntFormat(format) && !isUintFormat(format))
continue;
- const std::string name = getFormatShortString(format);
- testGroup->addChild(new ImageExtendOperandTest(testCtx, name + "_matching_extend", texture, format, false));
- // For signed types test both using the sign bit in SPIR-V and the new operand
- if (isIntFormat(format))
- testGroup->addChild(new ImageExtendOperandTest(testCtx, name + "_force_sign_extend", texture, format, true));
+ for (int prec = 0; prec < 2; prec++)
+ {
+ bool relaxedPrecision = (prec != 0);
+ if (relaxedPrecision && !relaxedOK(format))
+ continue;
+
+ const std::string name = getFormatShortString(format) + (relaxedPrecision ? "_relaxed" : "");
+ testGroup->addChild(new ImageExtendOperandTest(testCtx, name + "_matching_extend", texture, format, false, relaxedPrecision));
+ // For signed types test both using the sign bit in SPIR-V and the new operand
+ if (isIntFormat(format))
+ testGroup->addChild(new ImageExtendOperandTest(testCtx, name + "_force_sign_extend", texture, format, true, relaxedPrecision));
+ }
}
return testGroup.release();
dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sfloat
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
dEQP-VK.wsi.xlib.surface.create
dEQP-VK.wsi.xlib.surface.create_custom_allocator
dEQP-VK.wsi.xlib.surface.create_simulate_oom
dEQP-VK.image.extended_usage_bit.texture_write.r32g32b32a32_sfloat
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32b32a32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16b16a16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8b8a8_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.a2b10g10r10_uint_pack32_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_uint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_uint_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_uint_relaxed_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r32g32_sint_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16g16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r16_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r16_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8g8_sint_relaxed_force_sign_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
+dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
dEQP-VK.wsi.xlib.surface.create
dEQP-VK.wsi.xlib.surface.create_custom_allocator
dEQP-VK.wsi.xlib.surface.create_simulate_oom