Skip to content

Commit 03c0746

Browse files
jeffbolznvlordalcol
authored andcommitted
Fix cooperative matrix conversion tests to try all rounding modes
VK-GL-CTS issue: 5952 Components: Vulkan Affects: dEQP-VK.compute.*.cooperative_matrix.*.convert* Change-Id: Ieb1325961ca7bc19190f55bfac809b335016903a
1 parent 0b4363a commit 03c0746

File tree

1 file changed

+103
-102
lines changed

1 file changed

+103
-102
lines changed

external/vulkancts/modules/vulkan/compute/vktComputeCooperativeMatrixTests.cpp

Lines changed: 103 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -3650,129 +3650,130 @@ tcu::TestStatus CooperativeMatrixTestInstance::iterate(void)
36503650
{
36513651
// Store results as double, which has enough range to hold all the other types exactly.
36523652
double inputA, output;
3653+
tcu::RoundingDirection rd[2] = {tcu::ROUND_DOWNWARD, tcu::ROUND_UPWARD};
3654+
double inputAConverted[2];
36533655

3654-
// This loads the data according to dataTypes[0], and then converts to the template parameter type
3655-
switch (dataTypes[3])
3656+
for (uint32_t j = 0; j < 2; ++j)
36563657
{
3657-
case VK_COMPONENT_TYPE_UINT8_KHR:
3658-
inputA = getDataConvertedToT<uint8_t>(ptrs[0], dataTypes[0], i);
3659-
break;
3660-
case VK_COMPONENT_TYPE_UINT16_KHR:
3661-
inputA = getDataConvertedToT<uint16_t>(ptrs[0], dataTypes[0], i);
3662-
break;
3663-
case VK_COMPONENT_TYPE_UINT32_KHR:
3664-
inputA = getDataConvertedToT<uint32_t>(ptrs[0], dataTypes[0], i);
3665-
break;
3666-
case VK_COMPONENT_TYPE_SINT8_KHR:
3667-
inputA = getDataConvertedToT<int8_t>(ptrs[0], dataTypes[0], i);
3668-
break;
3669-
case VK_COMPONENT_TYPE_SINT16_KHR:
3670-
inputA = getDataConvertedToT<int16_t>(ptrs[0], dataTypes[0], i);
3671-
break;
3672-
case VK_COMPONENT_TYPE_SINT32_KHR:
3673-
inputA = getDataConvertedToT<int32_t>(ptrs[0], dataTypes[0], i);
3674-
break;
3675-
case VK_COMPONENT_TYPE_FLOAT32_KHR:
3676-
case VK_COMPONENT_TYPE_FLOAT_E5M2_NV:
3677-
case VK_COMPONENT_TYPE_FLOAT_E4M3_NV:
3678-
case VK_COMPONENT_TYPE_FLOAT16_KHR:
3679-
inputA = getDataConvertedToT<float>(ptrs[0], dataTypes[0], i);
3680-
break;
3658+
// This loads the data according to dataTypes[0], and then converts to the template parameter type
3659+
switch (dataTypes[3])
3660+
{
3661+
case VK_COMPONENT_TYPE_UINT8_KHR:
3662+
inputA = getDataConvertedToT<uint8_t>(ptrs[0], dataTypes[0], i);
3663+
break;
3664+
case VK_COMPONENT_TYPE_UINT16_KHR:
3665+
inputA = getDataConvertedToT<uint16_t>(ptrs[0], dataTypes[0], i);
3666+
break;
3667+
case VK_COMPONENT_TYPE_UINT32_KHR:
3668+
inputA = getDataConvertedToT<uint32_t>(ptrs[0], dataTypes[0], i);
3669+
break;
3670+
case VK_COMPONENT_TYPE_SINT8_KHR:
3671+
inputA = getDataConvertedToT<int8_t>(ptrs[0], dataTypes[0], i);
3672+
break;
3673+
case VK_COMPONENT_TYPE_SINT16_KHR:
3674+
inputA = getDataConvertedToT<int16_t>(ptrs[0], dataTypes[0], i);
3675+
break;
3676+
case VK_COMPONENT_TYPE_SINT32_KHR:
3677+
inputA = getDataConvertedToT<int32_t>(ptrs[0], dataTypes[0], i);
3678+
break;
3679+
case VK_COMPONENT_TYPE_FLOAT32_KHR:
3680+
case VK_COMPONENT_TYPE_FLOAT_E5M2_NV:
3681+
case VK_COMPONENT_TYPE_FLOAT_E4M3_NV:
3682+
case VK_COMPONENT_TYPE_FLOAT16_KHR:
36813683
#ifndef CTS_USES_VULKANSC
3682-
case VK_COMPONENT_TYPE_BFLOAT16_KHR:
3683-
{
3684-
float temp = getDataConvertedToT<float>(ptrs[0], dataTypes[0], i);
3685-
inputA = BFloat16(temp).asDouble();
3686-
break;
3687-
}
3684+
case VK_COMPONENT_TYPE_BFLOAT16_KHR:
36883685
#endif //CTS_USES_VULKANSC
3689-
default:
3690-
TCU_THROW(InternalError, "Unexpected type");
3691-
}
3686+
inputA = getDataConvertedToT<float>(ptrs[0], dataTypes[0], i);
3687+
break;
3688+
default:
3689+
TCU_THROW(InternalError, "Unexpected type");
3690+
}
36923691

3693-
double inputAConverted = inputA;
3692+
inputAConverted[j] = inputA;
36943693

3695-
switch (dataTypes[3])
3696-
{
3697-
case VK_COMPONENT_TYPE_UINT8_KHR:
3698-
output = getDataConvertedToT<uint8_t>(ptrs[3], dataTypes[3], i);
3699-
break;
3700-
case VK_COMPONENT_TYPE_UINT16_KHR:
3701-
output = getDataConvertedToT<uint16_t>(ptrs[3], dataTypes[3], i);
3702-
break;
3703-
case VK_COMPONENT_TYPE_UINT32_KHR:
3704-
output = getDataConvertedToT<uint32_t>(ptrs[3], dataTypes[3], i);
3705-
break;
3706-
case VK_COMPONENT_TYPE_SINT8_KHR:
3707-
output = getDataConvertedToT<int8_t>(ptrs[3], dataTypes[3], i);
3708-
break;
3709-
case VK_COMPONENT_TYPE_SINT16_KHR:
3710-
output = getDataConvertedToT<int16_t>(ptrs[3], dataTypes[3], i);
3711-
break;
3712-
case VK_COMPONENT_TYPE_SINT32_KHR:
3713-
output = getDataConvertedToT<int32_t>(ptrs[3], dataTypes[3], i);
3714-
break;
3715-
case VK_COMPONENT_TYPE_FLOAT32_KHR:
3716-
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3717-
break;
3718-
case VK_COMPONENT_TYPE_FLOAT16_KHR:
3719-
{
3720-
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3721-
inputAConverted = tcu::Float16(inputAConverted).asDouble();
3722-
break;
3723-
}
3724-
case VK_COMPONENT_TYPE_FLOAT_E5M2_NV:
3725-
{
3726-
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3727-
inputAConverted = tcu::FloatE5M2(inputAConverted).asDouble();
3728-
break;
3729-
}
3730-
case VK_COMPONENT_TYPE_FLOAT_E4M3_NV:
3731-
{
3732-
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3733-
inputAConverted = tcu::FloatE4M3(inputAConverted).asDouble();
3734-
break;
3735-
}
3736-
#ifndef CTS_USES_VULKANSC
3737-
case VK_COMPONENT_TYPE_BFLOAT16_KHR:
3738-
{
3739-
float temp = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3740-
output = BFloat16(temp).asDouble();
3741-
break;
3742-
}
3743-
#endif //CTS_USES_VULKANSC
3744-
default:
3745-
TCU_THROW(InternalError, "Unexpected type");
3746-
}
3747-
3748-
if (m_data.testType == TT_CONVERT_SAT)
3749-
{
37503694
switch (dataTypes[3])
37513695
{
3696+
case VK_COMPONENT_TYPE_UINT8_KHR:
3697+
output = getDataConvertedToT<uint8_t>(ptrs[3], dataTypes[3], i);
3698+
break;
3699+
case VK_COMPONENT_TYPE_UINT16_KHR:
3700+
output = getDataConvertedToT<uint16_t>(ptrs[3], dataTypes[3], i);
3701+
break;
3702+
case VK_COMPONENT_TYPE_UINT32_KHR:
3703+
output = getDataConvertedToT<uint32_t>(ptrs[3], dataTypes[3], i);
3704+
break;
3705+
case VK_COMPONENT_TYPE_SINT8_KHR:
3706+
output = getDataConvertedToT<int8_t>(ptrs[3], dataTypes[3], i);
3707+
break;
3708+
case VK_COMPONENT_TYPE_SINT16_KHR:
3709+
output = getDataConvertedToT<int16_t>(ptrs[3], dataTypes[3], i);
3710+
break;
3711+
case VK_COMPONENT_TYPE_SINT32_KHR:
3712+
output = getDataConvertedToT<int32_t>(ptrs[3], dataTypes[3], i);
3713+
break;
3714+
case VK_COMPONENT_TYPE_FLOAT32_KHR:
3715+
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3716+
break;
3717+
case VK_COMPONENT_TYPE_FLOAT16_KHR:
3718+
{
3719+
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3720+
inputAConverted[j] = tcu::Float16(inputAConverted[j], rd[j]).asDouble();
3721+
break;
3722+
}
37523723
case VK_COMPONENT_TYPE_FLOAT_E5M2_NV:
37533724
{
3754-
if (fabs(inputA) > tcu::FloatE5M2::largestNormal(1).asFloat())
3755-
{
3756-
inputAConverted = tcu::FloatE5M2::largestNormal(inputA > 0 ? 1 : -1).asFloat();
3757-
}
3725+
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3726+
inputAConverted[j] = tcu::FloatE5M2(inputAConverted[j], rd[j]).asDouble();
37583727
break;
37593728
}
37603729
case VK_COMPONENT_TYPE_FLOAT_E4M3_NV:
37613730
{
3762-
if (fabs(inputA) > tcu::FloatE4M3::largestNormal(1).asFloat())
3763-
{
3764-
inputAConverted = tcu::FloatE4M3::largestNormal(inputA > 0 ? 1 : -1).asFloat();
3765-
}
3731+
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3732+
inputAConverted[j] = tcu::FloatE4M3(inputAConverted[j], rd[j]).asDouble();
37663733
break;
37673734
}
3768-
default:
3735+
#ifndef CTS_USES_VULKANSC
3736+
case VK_COMPONENT_TYPE_BFLOAT16_KHR:
3737+
{
3738+
output = getDataConvertedToT<float>(ptrs[3], dataTypes[3], i);
3739+
inputAConverted[j] = BFloat16(inputAConverted[j], rd[j]).asDouble();
37693740
break;
37703741
}
3742+
#endif //CTS_USES_VULKANSC
3743+
default:
3744+
TCU_THROW(InternalError, "Unexpected type");
3745+
}
3746+
3747+
if (m_data.testType == TT_CONVERT_SAT)
3748+
{
3749+
switch (dataTypes[3])
3750+
{
3751+
case VK_COMPONENT_TYPE_FLOAT_E5M2_NV:
3752+
{
3753+
if (fabs(inputA) > tcu::FloatE5M2::largestNormal(1).asFloat())
3754+
{
3755+
inputAConverted[j] = tcu::FloatE5M2::largestNormal(inputA > 0 ? 1 : -1).asFloat();
3756+
}
3757+
break;
3758+
}
3759+
case VK_COMPONENT_TYPE_FLOAT_E4M3_NV:
3760+
{
3761+
if (fabs(inputA) > tcu::FloatE4M3::largestNormal(1).asFloat())
3762+
{
3763+
inputAConverted[j] = tcu::FloatE4M3::largestNormal(inputA > 0 ? 1 : -1).asFloat();
3764+
}
3765+
break;
3766+
}
3767+
default:
3768+
break;
3769+
}
3770+
}
37713771
}
37723772

3773-
if (inputAConverted != output && !(std::isnan(inputAConverted) && std::isnan(output)))
3773+
if (inputAConverted[0] != output && inputAConverted[1] != output &&
3774+
!((std::isnan(inputAConverted[0]) || std::isnan(inputAConverted[1])) && std::isnan(output)))
37743775
{
3775-
//printf("i %d inputA %f inputAConverted %f output %f\n", i, inputA, inputAConverted, output);
3776+
//printf("i %d inputA %f inputAConverted[RD] %f inputAConverted[RU] %f output %f\n", i, inputA, inputAConverted[0], inputAConverted[1], output);
37763777
res = QP_TEST_RESULT_FAIL;
37773778
break;
37783779
}

0 commit comments

Comments
 (0)