From f9b8c7d8def6c386276b2862a681539114924cfd Mon Sep 17 00:00:00 2001 From: Andrew Woloszyn Date: Wed, 16 Mar 2016 16:06:16 -0400 Subject: [PATCH] Fix createOpUndef tests. If we get a Nan from the OpFMul %f32 %undef %c_f32_0 then zero that out as well. --- .../spirv_assembly/vktSpvAsmInstructionTests.cpp | 36 ++++++++++++++++------ 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp index 0e731a2..6534693 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp @@ -6726,8 +6726,10 @@ tcu::TestCaseGroup* createOpUndefTests(tcu::TestContext& testCtx) "%label_testfun = OpLabel\n" "%undef = OpUndef %f32\n" "%zero = OpFMul %f32 %undef %c_f32_0\n" + "%is_nan = OpIsNan %bool %zero\n" //OpUndef may result in NaN which may turn %zero into Nan. + "%actually_zero = OpSelect %f32 %is_nan %c_f32_0 %zero\n" "%a = OpVectorExtractDynamic %f32 %param1 %c_i32_0\n" - "%b = OpFAdd %f32 %a %zero\n" + "%b = OpFAdd %f32 %a %actually_zero\n" "%ret = OpVectorInsertDynamic %v4f32 %param1 %b %c_i32_0\n" "OpReturnValue %ret\n" "OpFunctionEnd\n" @@ -6770,14 +6772,22 @@ tcu::TestCaseGroup* createOpUndefTests(tcu::TestContext& testCtx) "%zero_1 = OpVectorExtractDynamic %f32 %vzero %c_i32_1\n" "%zero_2 = OpVectorExtractDynamic %f32 %vzero %c_i32_2\n" "%zero_3 = OpVectorExtractDynamic %f32 %vzero %c_i32_3\n" + "%is_nan_0 = OpIsNan %bool %zero_0\n" + "%is_nan_1 = OpIsNan %bool %zero_1\n" + "%is_nan_2 = OpIsNan %bool %zero_2\n" + "%is_nan_3 = OpIsNan %bool %zero_3\n" + "%actually_zero_0 = OpSelect %f32 %is_nan_0 %c_f32_0 %zero_0\n" + "%actually_zero_1 = OpSelect %f32 %is_nan_0 %c_f32_0 %zero_1\n" + "%actually_zero_2 = OpSelect %f32 %is_nan_0 %c_f32_0 %zero_2\n" + "%actually_zero_3 = OpSelect %f32 %is_nan_0 %c_f32_0 %zero_3\n" "%param1_0 = OpVectorExtractDynamic %f32 %param1 %c_i32_0\n" "%param1_1 = OpVectorExtractDynamic %f32 %param1 %c_i32_1\n" "%param1_2 = OpVectorExtractDynamic %f32 %param1 %c_i32_2\n" "%param1_3 = OpVectorExtractDynamic %f32 %param1 %c_i32_3\n" - "%sum_0 = OpFAdd %f32 %param1_0 %zero_0\n" - "%sum_1 = OpFAdd %f32 %param1_1 %zero_1\n" - "%sum_2 = OpFAdd %f32 %param1_2 %zero_2\n" - "%sum_3 = OpFAdd %f32 %param1_3 %zero_3\n" + "%sum_0 = OpFAdd %f32 %param1_0 %actually_zero_0\n" + "%sum_1 = OpFAdd %f32 %param1_1 %actually_zero_1\n" + "%sum_2 = OpFAdd %f32 %param1_2 %actually_zero_2\n" + "%sum_3 = OpFAdd %f32 %param1_3 %actually_zero_3\n" "%ret3 = OpVectorInsertDynamic %v4f32 %param1 %sum_3 %c_i32_3\n" "%ret2 = OpVectorInsertDynamic %v4f32 %ret3 %sum_2 %c_i32_2\n" "%ret1 = OpVectorInsertDynamic %v4f32 %ret2 %sum_1 %c_i32_1\n" @@ -6800,14 +6810,22 @@ tcu::TestCaseGroup* createOpUndefTests(tcu::TestContext& testCtx) "%zero_1 = OpCompositeExtract %f32 %mzero 0 1\n" "%zero_2 = OpCompositeExtract %f32 %mzero 1 0\n" "%zero_3 = OpCompositeExtract %f32 %mzero 1 1\n" + "%is_nan_0 = OpIsNan %bool %zero_0\n" + "%is_nan_1 = OpIsNan %bool %zero_1\n" + "%is_nan_2 = OpIsNan %bool %zero_2\n" + "%is_nan_3 = OpIsNan %bool %zero_3\n" + "%actually_zero_0 = OpSelect %f32 %is_nan_0 %c_f32_0 %zero_0\n" + "%actually_zero_1 = OpSelect %f32 %is_nan_0 %c_f32_0 %zero_1\n" + "%actually_zero_2 = OpSelect %f32 %is_nan_0 %c_f32_0 %zero_2\n" + "%actually_zero_3 = OpSelect %f32 %is_nan_0 %c_f32_0 %zero_3\n" "%param1_0 = OpVectorExtractDynamic %f32 %param1 %c_i32_0\n" "%param1_1 = OpVectorExtractDynamic %f32 %param1 %c_i32_1\n" "%param1_2 = OpVectorExtractDynamic %f32 %param1 %c_i32_2\n" "%param1_3 = OpVectorExtractDynamic %f32 %param1 %c_i32_3\n" - "%sum_0 = OpFAdd %f32 %param1_0 %zero_0\n" - "%sum_1 = OpFAdd %f32 %param1_1 %zero_1\n" - "%sum_2 = OpFAdd %f32 %param1_2 %zero_2\n" - "%sum_3 = OpFAdd %f32 %param1_3 %zero_3\n" + "%sum_0 = OpFAdd %f32 %param1_0 %actually_zero_0\n" + "%sum_1 = OpFAdd %f32 %param1_1 %actually_zero_1\n" + "%sum_2 = OpFAdd %f32 %param1_2 %actually_zero_2\n" + "%sum_3 = OpFAdd %f32 %param1_3 %actually_zero_3\n" "%ret3 = OpVectorInsertDynamic %v4f32 %param1 %sum_3 %c_i32_3\n" "%ret2 = OpVectorInsertDynamic %v4f32 %ret3 %sum_2 %c_i32_2\n" "%ret1 = OpVectorInsertDynamic %v4f32 %ret2 %sum_1 %c_i32_1\n" -- 2.7.4