[automerger skipped] RESTRICT AUTOMERGE: Relax composite-to-present latency requireme...
authorChris Forbes <chrisforbes@google.com>
Fri, 26 Oct 2018 21:58:04 +0000 (14:58 -0700)
committerandroid-build-merger <android-build-merger@google.com>
Fri, 26 Oct 2018 21:58:04 +0000 (14:58 -0700)
am: 8a6117ca3f  -s ours

Change-Id: I595afdfb67a3e6bedaa995825250eb6f8174cbb2

31 files changed:
Android.mk
android/cts/Android.bp [new file with mode: 0644]
android/cts/Android.mk [deleted file]
android/cts/master/gles2-master-risky.txt
android/cts/master/gles2-master.txt
android/cts/master/gles3-master-risky.txt
android/cts/master/gles3-master.txt
android/cts/master/gles31-master.txt
android/cts/master/src/gles2-temp-excluded.txt
android/cts/master/src/gles3-temp-excluded.txt
android/cts/master/src/gles3-test-issues.txt
android/cts/master/src/gles31-temp-excluded.txt
android/cts/master/src/gles31-test-issues.txt
android/cts/master/src/vk-temp-excluded.txt
android/cts/master/vk-master-risky.txt
android/cts/master/vk-master.txt
android/cts/runner/Android.mk [deleted file]
android/cts/runner/src/com/drawelements/deqp/runner/DeqpTestRunner.java
android/cts/runner/tests/Android.bp [new file with mode: 0644]
android/cts/runner/tests/Android.mk [deleted file]
android/cts/runner/tests/src/com/drawelements/deqp/runner/DeqpTestRunnerTest.java
android/package/AndroidManifest.xml
external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles2-master.txt
external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-master.txt
framework/platform/surfaceless/tcuSurfacelessPlatform.cpp
framework/referencerenderer/rrFragmentOperations.cpp
modules/gles2/functional/es2fShaderStructTests.cpp
modules/gles2/functional/es2fTextureSizeTests.cpp
modules/gles3/functional/es3fShaderDerivateTests.cpp
modules/gles3/functional/es3fShaderStructTests.cpp
modules/gles3/functional/es3fTextureSizeTests.cpp

index 67c1f4e..fa97deb 100644 (file)
@@ -30,6 +30,7 @@ deqp_compile_flags := \
        -Werror \
        -Wconversion \
        -fwrapv \
+       -Wno-implicit-fallthrough \
        -Wno-sign-conversion
 
 LOCAL_SHARED_LIBRARIES := \
@@ -65,4 +66,4 @@ include $(BUILD_SHARED_LIBRARY)
 # Build the test APKs using their own makefiles
 # include $(call all-makefiles-under,$(LOCAL_PATH)/android)
 
-include $(LOCAL_PATH)/android/package/Android.mk $(LOCAL_PATH)/android/cts/Android.mk
+include $(LOCAL_PATH)/android/package/Android.mk
diff --git a/android/cts/Android.bp b/android/cts/Android.bp
new file mode 100644 (file)
index 0000000..9f68df4
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+filegroup {
+    name: "deqp_master_caselists",
+    srcs: [
+        "master/*.txt",
+    ],
+    path: "master",
+}
+
+genrule {
+    name: "deqp_nyc_caselists",
+    srcs: [
+        "nyc/vk-master.txt",
+        "nyc/gles31-master.txt",
+        "nyc/egl-master.txt",
+    ],
+    out: [
+        "nyc-vk-master.txt",
+        "nyc-gles31-master.txt",
+        "nyc-egl-master.txt",
+    ],
+    cmd: "for i in $(in); do cp $$i $(genDir)/nyc-$$(basename $$i); done",
+}
+
+java_test_host {
+    name: "CtsDeqpTestCases",
+
+    // Tag this module as a cts test artifact
+    test_suites: [
+        "cts",
+        "vts",
+        "general-tests",
+    ],
+
+    srcs: ["runner/src/**/*.java"],
+    libs: [
+        "cts-tradefed",
+        "compatibility-host-util",
+        "tradefed",
+    ],
+
+    data: [
+        ":deqp_master_caselists",
+        ":deqp_nyc_caselists",
+    ],
+}
diff --git a/android/cts/Android.mk b/android/cts/Android.mk
deleted file mode 100644 (file)
index 762eb2a..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := CtsDeqpTestCases
-
-LOCAL_MODULE_TAGS := optional
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-
-LOCAL_SDK_VERSION := 22
-
-LOCAL_SRC_FILES := $(call all-java-files-under, runner/src)
-LOCAL_JAVA_LIBRARIES := cts-tradefed compatibility-host-util tradefed
-
-DEQP_CASELISTS:=$(sort $(patsubst master/%,%, \
-  $(shell cd $(LOCAL_PATH) ; \
-          find -L master -maxdepth 1 -name "*.txt") \
-  ))
-LOCAL_COMPATIBILITY_SUPPORT_FILES := $(foreach file, $(DEQP_CASELISTS), $(LOCAL_PATH)/master/$(file):$(file))
-LOCAL_COMPATIBILITY_SUPPORT_FILES += $(LOCAL_PATH)/nyc/vk-master.txt:nyc-vk-master.txt
-LOCAL_COMPATIBILITY_SUPPORT_FILES += $(LOCAL_PATH)/nyc/gles31-master.txt:nyc-gles31-master.txt
-LOCAL_COMPATIBILITY_SUPPORT_FILES += $(LOCAL_PATH)/nyc/egl-master.txt:nyc-egl-master.txt
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
index f5b29ed..ff10a51 100644 (file)
@@ -6813,8 +6813,20 @@ dEQP-GLES2.functional.shaders.struct.local.nested_struct_array_dynamic_index_ver
 dEQP-GLES2.functional.shaders.struct.local.nested_struct_array_dynamic_index_fragment
 dEQP-GLES2.functional.shaders.struct.local.parameter_vertex
 dEQP-GLES2.functional.shaders.struct.local.parameter_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_lowp_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_lowp_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_mediump_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_mediump_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_highp_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_highp_fragment
 dEQP-GLES2.functional.shaders.struct.local.parameter_nested_vertex
 dEQP-GLES2.functional.shaders.struct.local.parameter_nested_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_lowp_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_lowp_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_mediump_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_mediump_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_highp_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_highp_fragment
 dEQP-GLES2.functional.shaders.struct.local.return_vertex
 dEQP-GLES2.functional.shaders.struct.local.return_fragment
 dEQP-GLES2.functional.shaders.struct.local.return_nested_vertex
@@ -11959,6 +11971,7 @@ dEQP-GLES2.functional.rasterization.primitives.lines
 dEQP-GLES2.functional.rasterization.primitives.line_strip
 dEQP-GLES2.functional.rasterization.primitives.line_loop
 dEQP-GLES2.functional.rasterization.primitives.points
+dEQP-GLES2.functional.rasterization.limits.points
 dEQP-GLES2.functional.rasterization.fill_rules.basic_quad
 dEQP-GLES2.functional.rasterization.fill_rules.basic_quad_reverse
 dEQP-GLES2.functional.rasterization.fill_rules.clipped_full
index dcfffb0..8b13789 100644 (file)
@@ -1,2 +1 @@
-dEQP-GLES3.functional.fbo.msaa.renderbuffer_resize.ms_to_nonms
-dEQP-GLES3.functional.fbo.msaa.renderbuffer_resize.ms_to_ms
+
index 34f8f3f..f3f0fe3 100644 (file)
@@ -16259,8 +16259,20 @@ dEQP-GLES3.functional.shaders.struct.local.nested_struct_array_dynamic_index_ver
 dEQP-GLES3.functional.shaders.struct.local.nested_struct_array_dynamic_index_fragment
 dEQP-GLES3.functional.shaders.struct.local.parameter_vertex
 dEQP-GLES3.functional.shaders.struct.local.parameter_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_lowp_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_lowp_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_mediump_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_mediump_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_highp_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_highp_fragment
 dEQP-GLES3.functional.shaders.struct.local.parameter_nested_vertex
 dEQP-GLES3.functional.shaders.struct.local.parameter_nested_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_lowp_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_lowp_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_mediump_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_mediump_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_highp_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_highp_fragment
 dEQP-GLES3.functional.shaders.struct.local.return_vertex
 dEQP-GLES3.functional.shaders.struct.local.return_fragment
 dEQP-GLES3.functional.shaders.struct.local.return_nested_vertex
@@ -18715,6 +18727,15 @@ dEQP-GLES3.functional.shaders.builtin_functions.precision.distance.highp_fragmen
 dEQP-GLES3.functional.shaders.builtin_functions.precision.distance.highp_fragment.vec2
 dEQP-GLES3.functional.shaders.builtin_functions.precision.distance.highp_fragment.vec3
 dEQP-GLES3.functional.shaders.builtin_functions.precision.distance.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.lowp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.lowp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.lowp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.lowp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.mediump_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.mediump_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.mediump_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_fragment.vec3
 dEQP-GLES3.functional.shaders.builtin_functions.precision.cross.lowp_vertex
 dEQP-GLES3.functional.shaders.builtin_functions.precision.cross.lowp_fragment
 dEQP-GLES3.functional.shaders.builtin_functions.precision.cross.mediump_vertex
@@ -18758,7 +18779,17 @@ dEQP-GLES3.functional.shaders.builtin_functions.precision.faceforward.highp_vert
 dEQP-GLES3.functional.shaders.builtin_functions.precision.faceforward.highp_fragment.vec3
 dEQP-GLES3.functional.shaders.builtin_functions.precision.faceforward.highp_fragment.vec4
 dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_vertex.vec4
 dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.mediump_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.mediump_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.mediump_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.mediump_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.highp_fragment.vec3
 dEQP-GLES3.functional.shaders.builtin_functions.precision.refract.lowp_vertex.scalar
 dEQP-GLES3.functional.shaders.builtin_functions.precision.refract.lowp_vertex.vec2
 dEQP-GLES3.functional.shaders.builtin_functions.precision.refract.lowp_vertex.vec3
@@ -31282,6 +31313,8 @@ dEQP-GLES3.functional.fbo.msaa.8_samples.depth24_stencil8
 dEQP-GLES3.functional.fbo.msaa.8_samples.stencil_index8
 dEQP-GLES3.functional.fbo.msaa.renderbuffer_resize.nonms_to_nonms
 dEQP-GLES3.functional.fbo.msaa.renderbuffer_resize.nonms_to_ms
+dEQP-GLES3.functional.fbo.msaa.renderbuffer_resize.ms_to_nonms
+dEQP-GLES3.functional.fbo.msaa.renderbuffer_resize.ms_to_ms
 dEQP-GLES3.functional.fbo.multiview.samples_1
 dEQP-GLES3.functional.fbo.multiview.samples_2
 dEQP-GLES3.functional.fbo.multiview.samples_4
index 2f1dc0d..be69663 100644 (file)
@@ -2635,10 +2635,15 @@ dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.highp_comput
 dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.highp_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.scalar
 dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.scalar
 dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.highp_compute.scalar
 dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.highp_compute.vec3
 dEQP-GLES31.functional.shaders.builtin_functions.precision.cross.lowp_compute
 dEQP-GLES31.functional.shaders.builtin_functions.precision.cross.mediump_compute
 dEQP-GLES31.functional.shaders.builtin_functions.precision.cross.highp_compute
@@ -2668,8 +2673,13 @@ dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.highp_com
 dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.highp_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.scalar
 dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.mediump_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.mediump_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.mediump_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.highp_compute.vec3
 dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.lowp_compute.scalar
 dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.lowp_compute.vec2
 dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.lowp_compute.vec3
index c946d95..2974117 100644 (file)
@@ -1,2 +1 @@
-# Temporarily excluded for b/72496590
-dEQP-GLES2.functional.rasterization.limits.points
+# Tests to be temporarily skipped for Android CI, but still enforced in CTS.
index d12aefa..2974117 100644 (file)
@@ -1,4 +1 @@
-# Temporarily excluded for b/72385186
-dEQP-GLES3.functional.fbo.msaa.renderbuffer_resize.ms_to_ms
-dEQP-GLES3.functional.fbo.msaa.renderbuffer_resize.ms_to_nonms
-
+# Tests to be temporarily skipped for Android CI, but still enforced in CTS.
index 19940c1..39b560b 100644 (file)
@@ -150,27 +150,5 @@ dEQP-GLES3.functional.shaders.texture_functions.texturegrad.isamplercube_fragmen
 # Bug 26651667
 dEQP-GLES3.functional.draw.draw_elements_instanced.indices.buffer.index_byte
 
-# Bug 28767510
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.lowp_vertex.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.lowp_vertex.vec4
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.lowp_fragment.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.lowp_fragment.vec4
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.mediump_vertex.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.mediump_vertex.vec4
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.mediump_fragment.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_vertex.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_fragment.vec3
-
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_vertex.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_vertex.vec4
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_fragment.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.lowp_fragment.vec4
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.mediump_vertex.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.mediump_vertex.vec4
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.mediump_fragment.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.mediump_fragment.vec4
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.highp_vertex.vec3
-dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.highp_fragment.vec3
-
 # b/73070970
 dEQP-GLES3.functional.shaders.declarations.unspecified_precision.*
index e69de29..2974117 100644 (file)
@@ -0,0 +1 @@
+# Tests to be temporarily skipped for Android CI, but still enforced in CTS.
index 545ba85..f0181d4 100644 (file)
@@ -36,16 +36,3 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexim
 
 # Bug 28813504
 dEQP-GLES31.functional.ubo.random.all_per_block_buffers.41
-
-# Bug 28767510
-dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.vec3
-dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.vec4
-dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.vec3
-dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.vec4
-dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.highp_compute.vec3
-
-dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.vec3
-dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.vec4
-dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.mediump_compute.vec3
-dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.mediump_compute.vec4
-dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.highp_compute.vec3
index 7c74e94..2974117 100644 (file)
@@ -1,93 +1 @@
-# Tests temporarily excluded for evergreen policy, but intended to be enforced
-# for release
-
-# b/77139965
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate_separate
-
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate_separate
-
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate_separate
-
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate_separate
-
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate_separate
-
-# b/77319653
-dEQP-VK.protected_memory.interaction.wsi.android.swapchain.create.min_image_count
-
-# b/77321170
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_1
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_10
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_2
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_3
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_4
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_5
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_6
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_7
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_8
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_9
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_1
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_10
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_2
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_3
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_4
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_5
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_6
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_7
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_8
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_9
-
-# b/77582727
-dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.host_visible.import_twice
-dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.host_visible.import_twice
-
-# b/77596051
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.a2b10g10r10_unorm_pack32
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r16g16b16a16_sfloat
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r8g8b8_unorm
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r5g6b5_unorm_pack16
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r8g8b8a8_unorm
+# Tests to be temporarily skipped for Android CI, but still enforced in CTS.
index a5f5b59..8b13789 100644 (file)
@@ -1,77 +1 @@
-dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.host_visible.import_twice
-dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.host_visible.import_twice
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r8g8b8_unorm
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r8g8b8a8_unorm
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r5g6b5_unorm_pack16
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r16g16b16a16_sfloat
-dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.a2b10g10r10_unorm_pack32
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.simple
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.remap
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.flush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush_overlapping
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.invalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate_separate
-dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate_overlapping
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_1
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_2
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_3
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_4
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_5
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_6
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_7
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_8
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_9
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_10
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_1
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_2
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_3
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_4
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_5
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_6
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_7
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_8
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_9
-dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_10
-dEQP-VK.protected_memory.interaction.wsi.android.swapchain.create.min_image_count
+
index 39a5827..a930216 100755 (executable)
@@ -71338,6 +71338,7 @@ dEQP-VK.api.external.memory.opaque_win32_kmt.dedicated.image.export_bind_import_
 dEQP-VK.api.external.memory.opaque_win32_kmt.dedicated.image.export_import_bind_bind
 dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.device_only.import_twice
 dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.device_only.import_multiple_times
+dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.host_visible.import_twice
 dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.host_visible.import_multiple_times
 dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.buffer.info
 dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.buffer.bind_export_import_bind
@@ -71349,6 +71350,7 @@ dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.image.export_bi
 dEQP-VK.api.external.memory.android_hardware_buffer.suballocated.image.export_import_bind_bind
 dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.device_only.import_twice
 dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.device_only.import_multiple_times
+dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.host_visible.import_twice
 dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.host_visible.import_multiple_times
 dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.buffer.info
 dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.buffer.bind_export_import_bind
@@ -71358,6 +71360,11 @@ dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.image.info
 dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.image.bind_export_import_bind
 dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.image.export_bind_import_bind
 dEQP-VK.api.external.memory.android_hardware_buffer.dedicated.image.export_import_bind_bind
+dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r8g8b8_unorm
+dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r8g8b8a8_unorm
+dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r5g6b5_unorm_pack16
+dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.r16g16b16a16_sfloat
+dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.a2b10g10r10_unorm_pack32
 dEQP-VK.api.external.fence.sync_fd.info
 dEQP-VK.api.external.fence.sync_fd.import_twice_temporary
 dEQP-VK.api.external.fence.sync_fd.reimport_temporary
@@ -73374,7 +73381,56 @@ dEQP-VK.memory.mapping.dedicated_alloc.buffer.sub.1048577.offset_32769.size_4085
 dEQP-VK.memory.mapping.dedicated_alloc.buffer.sub.1048577.offset_32769.size_4085.subinvalidate
 dEQP-VK.memory.mapping.dedicated_alloc.buffer.sub.1048577.offset_32769.size_4085.subinvalidate_separate
 dEQP-VK.memory.mapping.dedicated_alloc.buffer.sub.1048577.offset_32769.size_4085.subinvalidate_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.simple
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.remap
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.flush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subflush_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.invalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.33.subinvalidate_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.simple
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.remap
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.flush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subflush
 dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subflush_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subflush_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.invalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.257.subinvalidate_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.simple
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.remap
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.flush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subflush_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.invalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.4087.subinvalidate_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.simple
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.remap
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.flush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subflush_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.invalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.8095.subinvalidate_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.simple
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.remap
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.flush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subflush_overlapping
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.invalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate_separate
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.1048577.subinvalidate_overlapping
 dEQP-VK.memory.mapping.dedicated_alloc.image.sub.33.offset_0.size_31.simple
 dEQP-VK.memory.mapping.dedicated_alloc.image.sub.33.offset_0.size_31.remap
 dEQP-VK.memory.mapping.dedicated_alloc.image.sub.33.offset_0.size_31.flush
@@ -281722,6 +281778,16 @@ dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.static.atomic_compsw
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.static.atomic_compswap_2
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.static.atomic_compswap_3
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.static.atomic_compswap_4
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_1
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_2
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_3
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_4
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_5
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_6
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_7
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_8
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_9
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.fragment.compswap.random.atomic_compswap_10
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.add.static.atomic_add_1
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.add.static.atomic_add_2
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.add.static.atomic_add_3
@@ -281824,6 +281890,16 @@ dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.static.atomic_compswa
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.static.atomic_compswap_2
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.static.atomic_compswap_3
 dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.static.atomic_compswap_4
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_1
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_2
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_3
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_4
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_5
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_6
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_7
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_8
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_9
+dEQP-VK.protected_memory.ssbo.ssbo_atomic.compute.compswap.random.atomic_compswap_10
 dEQP-VK.protected_memory.interaction.wsi.xlib.swapchain.create.min_image_count
 dEQP-VK.protected_memory.interaction.wsi.xlib.swapchain.create.image_format
 dEQP-VK.protected_memory.interaction.wsi.xlib.swapchain.create.image_extent
@@ -281868,6 +281944,7 @@ dEQP-VK.protected_memory.interaction.wsi.mir.swapchain.create.composite_alpha
 dEQP-VK.protected_memory.interaction.wsi.mir.swapchain.create.present_mode
 dEQP-VK.protected_memory.interaction.wsi.mir.swapchain.create.clipped
 dEQP-VK.protected_memory.interaction.wsi.mir.swapchain.render.basic
+dEQP-VK.protected_memory.interaction.wsi.android.swapchain.create.min_image_count
 dEQP-VK.protected_memory.interaction.wsi.android.swapchain.create.image_format
 dEQP-VK.protected_memory.interaction.wsi.android.swapchain.create.image_extent
 dEQP-VK.protected_memory.interaction.wsi.android.swapchain.create.image_array_layers
diff --git a/android/cts/runner/Android.mk b/android/cts/runner/Android.mk
deleted file mode 100644 (file)
index cb61b2a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-# Build all sub-directories
-include $(call all-makefiles-under,$(LOCAL_PATH))
index 3721712..8874194 100644 (file)
@@ -38,7 +38,6 @@ import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 import com.android.tradefed.testtype.IRuntimeHintProvider;
 import com.android.tradefed.testtype.IShardableTest;
-import com.android.tradefed.testtype.IStrictShardableTest;
 import com.android.tradefed.testtype.ITestCollector;
 import com.android.tradefed.testtype.ITestFilterReceiver;
 import com.android.tradefed.util.AbiUtils;
@@ -77,7 +76,7 @@ import java.util.regex.Pattern;
 @OptionClass(alias="deqp-test-runner")
 public class DeqpTestRunner implements IBuildReceiver, IDeviceTest,
         ITestFilterReceiver, IAbiReceiver, IShardableTest, ITestCollector,
-        IRuntimeHintProvider, IStrictShardableTest {
+        IRuntimeHintProvider {
     private static final String DEQP_ONDEVICE_APK = "com.drawelements.deqp.apk";
     private static final String DEQP_ONDEVICE_PKG = "com.drawelements.deqp";
     private static final String INCOMPLETE_LOG_MESSAGE = "Crash: Incomplete test log";
@@ -2101,6 +2100,22 @@ public class DeqpTestRunner implements IBuildReceiver, IDeviceTest,
      * {@inheritDoc}
      */
     @Override
+    public Set<String> getIncludeFilters() {
+        return new HashSet<>(mIncludeFilters);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void clearIncludeFilters() {
+        mIncludeFilters.clear();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
     public void addExcludeFilter(String filter) {
         mExcludeFilters.add(filter);
     }
@@ -2117,6 +2132,22 @@ public class DeqpTestRunner implements IBuildReceiver, IDeviceTest,
      * {@inheritDoc}
      */
     @Override
+    public Set<String> getExcludeFilters() {
+        return new HashSet<>(mExcludeFilters);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void clearExcludeFilters() {
+        mExcludeFilters.clear();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
     public void setCollectTestsOnly(boolean collectTests) {
         mCollectTestsOnly = collectTests;
     }
@@ -2193,51 +2224,6 @@ public class DeqpTestRunner implements IBuildReceiver, IDeviceTest,
     }
 
     /**
-     * This sharding should be deterministic for the same input and independent.
-     * Through this API, each shard could be executed on different machine.
-     */
-    @Override
-    public IRemoteTest getTestShard(int shardCount, int shardIndex) {
-        // TODO: refactor getTestshard and split to share some logic.
-        if (mTestInstances == null) {
-            loadTests();
-        }
-
-        List<IRemoteTest> runners = new ArrayList<>();
-        // NOTE: Use linked hash map to keep the insertion order in iteration
-        Map<TestDescription, Set<BatchRunConfiguration>> currentSet = new LinkedHashMap<>();
-        Map<TestDescription, Set<BatchRunConfiguration>> iterationSet = this.mTestInstances;
-
-        int batchLimit = iterationSet.keySet().size() / shardCount;
-        int i = 1;
-        // Go through tests, split
-        for (TestDescription test: iterationSet.keySet()) {
-            currentSet.put(test, iterationSet.get(test));
-            if (currentSet.size() >= batchLimit && i < shardCount) {
-                runners.add(new DeqpTestRunner(this, currentSet));
-                i++;
-                // NOTE: Use linked hash map to keep the insertion order in iteration
-                currentSet = new LinkedHashMap<>();
-            }
-        }
-        runners.add(new DeqpTestRunner(this, currentSet));
-
-        // Compute new runtime hints
-        updateRuntimeHint(iterationSet.size(), runners);
-
-        // If too many shards were requested, we complete with placeholder.
-        if (runners.size() < shardCount) {
-            for (int j = runners.size(); j < shardCount; j++) {
-                runners.add(new DeqpTestRunner(this,
-                        new LinkedHashMap<TestDescription, Set<BatchRunConfiguration>>()));
-            }
-        }
-
-        CLog.i("Split deqp tests into %d shards, return shard: %s", runners.size(), shardIndex);
-        return runners.get(shardIndex);
-    }
-
-    /**
      * {@inheritDoc}
      */
     @Override
diff --git a/android/cts/runner/tests/Android.bp b/android/cts/runner/tests/Android.bp
new file mode 100644 (file)
index 0000000..987cea8
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright (C) 2010 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+java_test_host {
+    name: "CtsDeqpRunnerTests",
+
+    // Only compile source java files in this lib.
+    srcs: ["src/**/*.java"],
+
+    libs: [
+        "cts-tradefed",
+        "compatibility-host-util",
+        "tradefed",
+        "CtsDeqpTestCases",
+    ],
+    static_libs: ["easymock"],
+}
diff --git a/android/cts/runner/tests/Android.mk b/android/cts/runner/tests/Android.mk
deleted file mode 100644 (file)
index 81ba834..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (C) 2010 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-# Only compile source java files in this lib.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_MODULE := CtsDeqpRunnerTests
-LOCAL_MODULE_TAGS := optional
-LOCAL_JAVA_LIBRARIES := cts-tradefed compatibility-host-util tradefed CtsDeqpTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := easymock
-
-include $(BUILD_HOST_JAVA_LIBRARY)
index 5aaae41..c3eca58 100644 (file)
@@ -2147,100 +2147,6 @@ public class DeqpTestRunnerTest extends TestCase {
                  ((IRuntimeHintProvider)shards.get(1)).getRuntimeHint());
     }
 
-    /**
-     * Test that strict shardable is able to split deterministically the set of tests.
-     */
-    public void testGetTestShard() throws Exception {
-        final int TEST_COUNT = 2237;
-        final int SHARD_COUNT = 4;
-
-        ArrayList<TestDescription> testIds = new ArrayList<>(TEST_COUNT);
-        for (int i = 0; i < TEST_COUNT; i++) {
-            testIds.add(new TestDescription("dEQP-GLES3.funny.group", String.valueOf(i)));
-        }
-
-        DeqpTestRunner deqpTest = buildGlesTestRunner(3, 0, testIds, mTestsDir);
-        OptionSetter setter = new OptionSetter(deqpTest);
-        final long fullRuntimeMs = testIds.size()*100;
-        setter.setOptionValue("runtime-hint", String.valueOf(fullRuntimeMs));
-
-        DeqpTestRunner shard1 = (DeqpTestRunner)deqpTest.getTestShard(SHARD_COUNT, 0);
-        assertEquals(559, shard1.getTestInstance().size());
-        int j = 0;
-        // Ensure numbers, and that order is stable
-        for (TestDescription t : shard1.getTestInstance().keySet()) {
-            assertEquals(String.format("dEQP-GLES3.funny.group#%s", j),
-                    String.format("%s#%s", t.getClassName(), t.getTestName()));
-            j++;
-        }
-        DeqpTestRunner shard2 = (DeqpTestRunner)deqpTest.getTestShard(SHARD_COUNT, 1);
-        assertEquals(559, shard2.getTestInstance().size());
-        for (TestDescription t : shard2.getTestInstance().keySet()) {
-            assertEquals(String.format("dEQP-GLES3.funny.group#%s", j),
-                    String.format("%s#%s", t.getClassName(), t.getTestName()));
-            j++;
-        }
-        DeqpTestRunner shard3 = (DeqpTestRunner)deqpTest.getTestShard(SHARD_COUNT, 2);
-        assertEquals(559, shard3.getTestInstance().size());
-        for (TestDescription t : shard3.getTestInstance().keySet()) {
-            assertEquals(String.format("dEQP-GLES3.funny.group#%s", j),
-                    String.format("%s#%s", t.getClassName(), t.getTestName()));
-            j++;
-        }
-        DeqpTestRunner shard4 = (DeqpTestRunner)deqpTest.getTestShard(SHARD_COUNT, 3);
-        assertEquals(560, shard4.getTestInstance().size());
-        for (TestDescription t : shard4.getTestInstance().keySet()) {
-            assertEquals(String.format("dEQP-GLES3.funny.group#%s", j),
-                    String.format("%s#%s", t.getClassName(), t.getTestName()));
-            j++;
-        }
-        assertEquals(TEST_COUNT, j);
-    }
-
-    /**
-     * Test that strict shardable is creating an empty shard of the runner when too many shards
-     * are requested.
-     */
-    public void testGetTestShard_tooManyShardRequested() throws Exception {
-        final int TEST_COUNT = 2;
-        final int SHARD_COUNT = 3;
-
-        ArrayList<TestDescription> testIds = new ArrayList<>(TEST_COUNT);
-        for (int i = 0; i < TEST_COUNT; i++) {
-            testIds.add(new TestDescription("dEQP-GLES3.funny.group", String.valueOf(i)));
-        }
-        DeqpTestRunner deqpTest = buildGlesTestRunner(3, 0, testIds, mTestsDir);
-        OptionSetter setter = new OptionSetter(deqpTest);
-        final long fullRuntimeMs = testIds.size()*100;
-        setter.setOptionValue("runtime-hint", String.valueOf(fullRuntimeMs));
-        DeqpTestRunner shard1 = (DeqpTestRunner)deqpTest.getTestShard(SHARD_COUNT, 0);
-        assertEquals(1, shard1.getTestInstance().size());
-        int j = 0;
-        // Ensure numbers, and that order is stable
-        for (TestDescription t : shard1.getTestInstance().keySet()) {
-            assertEquals(String.format("dEQP-GLES3.funny.group#%s", j),
-                    String.format("%s#%s", t.getClassName(), t.getTestName()));
-            j++;
-        }
-        DeqpTestRunner shard2 = (DeqpTestRunner)deqpTest.getTestShard(SHARD_COUNT, 1);
-        assertEquals(1, shard2.getTestInstance().size());
-        for (TestDescription t : shard2.getTestInstance().keySet()) {
-            assertEquals(String.format("dEQP-GLES3.funny.group#%s", j),
-                    String.format("%s#%s", t.getClassName(), t.getTestName()));
-            j++;
-        }
-        DeqpTestRunner shard3 = (DeqpTestRunner)deqpTest.getTestShard(SHARD_COUNT, 2);
-        assertTrue(shard3.getTestInstance().isEmpty());
-        assertEquals(TEST_COUNT, j);
-        ITestInvocationListener mockListener
-                = EasyMock.createStrictMock(ITestInvocationListener.class);
-        mockListener.testRunStarted(EasyMock.anyObject(), EasyMock.eq(0));
-        mockListener.testRunEnded(EasyMock.anyLong(), (Map<String, String>) EasyMock.anyObject());
-        EasyMock.replay(mockListener);
-        shard3.run(mockListener);
-        EasyMock.verify(mockListener);
-    }
-
     public void testRuntimeHint_optionNotSet() throws Exception {
         final TestDescription[] testIds = {
                 new TestDescription("dEQP-GLES3.info", "vendor"),
index 322ad47..5d52274 100644 (file)
@@ -34,8 +34,7 @@
                </activity>
        </application>
 
-       <uses-sdk android:minSdkVersion="13"/>
-       <uses-sdk android:targetSdkVersion="19"/>
+       <uses-sdk android:minSdkVersion="13" android:targetSdkVersion="19"/>
        <uses-feature android:glEsVersion="0x00020000"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.GET_TASKS" />
index b593acc..0803920 100644 (file)
@@ -7800,8 +7800,20 @@ dEQP-GLES2.functional.shaders.struct.local.nested_struct_array_dynamic_index_ver
 dEQP-GLES2.functional.shaders.struct.local.nested_struct_array_dynamic_index_fragment
 dEQP-GLES2.functional.shaders.struct.local.parameter_vertex
 dEQP-GLES2.functional.shaders.struct.local.parameter_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_lowp_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_lowp_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_mediump_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_mediump_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_highp_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_inout_highp_fragment
 dEQP-GLES2.functional.shaders.struct.local.parameter_nested_vertex
 dEQP-GLES2.functional.shaders.struct.local.parameter_nested_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_lowp_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_lowp_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_mediump_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_mediump_fragment
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_highp_vertex
+dEQP-GLES2.functional.shaders.struct.local.parameter_out_highp_fragment
 dEQP-GLES2.functional.shaders.struct.local.return_vertex
 dEQP-GLES2.functional.shaders.struct.local.return_fragment
 dEQP-GLES2.functional.shaders.struct.local.return_nested_vertex
index e37db5d..c300c8c 100644 (file)
@@ -16431,8 +16431,20 @@ dEQP-GLES3.functional.shaders.struct.local.nested_struct_array_dynamic_index_ver
 dEQP-GLES3.functional.shaders.struct.local.nested_struct_array_dynamic_index_fragment
 dEQP-GLES3.functional.shaders.struct.local.parameter_vertex
 dEQP-GLES3.functional.shaders.struct.local.parameter_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_lowp_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_lowp_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_mediump_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_mediump_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_highp_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_inout_highp_fragment
 dEQP-GLES3.functional.shaders.struct.local.parameter_nested_vertex
 dEQP-GLES3.functional.shaders.struct.local.parameter_nested_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_lowp_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_lowp_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_mediump_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_mediump_fragment
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_highp_vertex
+dEQP-GLES3.functional.shaders.struct.local.parameter_out_highp_fragment
 dEQP-GLES3.functional.shaders.struct.local.return_vertex
 dEQP-GLES3.functional.shaders.struct.local.return_fragment
 dEQP-GLES3.functional.shaders.struct.local.return_nested_vertex
index f1fb2d5..d175c0c 100644 (file)
@@ -98,7 +98,10 @@ public:
        {
                return m_driver;
        }
-
+       const tcu::FunctionLibrary&             getFunctionLibrary              (void) const
+       {
+               return m_library;
+       }
 private:
        const tcu::DynamicFunctionLibrary       m_library;
        const vk::PlatformDriver                        m_driver;
index d0fb3c3..c42af7f 100644 (file)
@@ -545,8 +545,6 @@ Vec3 setLumSat (const Vec3& cbase, const Vec3& csat, const Vec3& clum)
 
        if (sbase > 0.0f)
                color = (cbase - minbase) * ssat / sbase;
-       else
-               color = color;
 
        return setLum(color, clum);
 }
index 21d84c5..b7354d8 100644 (file)
@@ -56,6 +56,7 @@ enum CaseFlags
        FLAG_USES_TEXTURES                              = (1<<0),
        FLAG_REQUIRES_DYNAMIC_LOOPS             = (1<<1),
        FLAG_REQUIRES_DYNAMIC_INDEXING  = (1<<2),
+       FLAG_REQUIRES_HIGHP_FRAGMENT    = (1<<3),
 };
 
 typedef void (*SetupUniformsFunc) (const glw::Functions& gl, deUint32 programID, const tcu::Vec4& constCoords);
@@ -122,6 +123,10 @@ void ShaderStructCase::init (void)
                if (m_flags & FLAG_REQUIRES_DYNAMIC_INDEXING)
                        throw tcu::NotSupportedError("Dynamic indexing not supported");
 
+               if (!m_isVertexCase && (m_flags & FLAG_REQUIRES_HIGHP_FRAGMENT) &&
+                       !m_ctxInfo.isFragmentHighPrecisionSupported())
+                       throw tcu::NotSupportedError("Highp in fragment shaders not supported");
+
                throw;
        }
 
@@ -148,7 +153,7 @@ void ShaderStructCase::setupUniforms (int programID, const tcu::Vec4& constCoord
                m_setupUniforms(m_renderCtx.getFunctions(), programID, constCoords);
 }
 
-static ShaderStructCase* createStructCase (Context& context, const char* name, const char* description, bool isVertexCase, deUint32 flags, ShaderEvalFunc evalFunc, SetupUniformsFunc setupUniforms, const LineStream& shaderSrc)
+static ShaderStructCase* createStructCase (Context& context, const char* name, const char* description, bool isVertexCase, deUint32 flags, ShaderEvalFunc evalFunc, SetupUniformsFunc setupUniforms, const LineStream& shaderSrc, const std::map<std::string, std::string>* additionalParams)
 {
        static const char* defaultVertSrc =
                "attribute highp vec4 a_position;\n"
@@ -185,6 +190,8 @@ static ShaderStructCase* createStructCase (Context& context, const char* name, c
                spParams["DST"]                         = "gl_FragColor";
                spParams["ASSIGN_POS"]          = "";
        }
+       if (additionalParams)
+               spParams.insert(additionalParams->begin(), additionalParams->end());
 
        if (isVertexCase)
                return new ShaderStructCase(context, name, description, isVertexCase, flags, evalFunc, setupUniforms, StringTemplate(shaderSrc.str()).specialize(spParams).c_str(), defaultFragSrc);
@@ -209,13 +216,16 @@ public:
 
 void LocalStructTests::init (void)
 {
-       #define LOCAL_STRUCT_CASE(NAME, DESCRIPTION, FLAGS, SHADER_SRC, EVAL_FUNC_BODY)                                                                                                                         \
+       #define LOCAL_STRUCT_CASE_PARAMETERIZED(NAME, DESCRIPTION, FLAGS, SHADER_SRC, EVAL_FUNC_BODY, PARAMS)                                                                           \
                do {                                                                                                                                                                                                                                                                    \
                        struct Eval_##NAME { static void eval (ShaderEvalContext& c) EVAL_FUNC_BODY };  /* NOLINT(EVAL_FUNC_BODY) */                                            \
-                       addChild(createStructCase(m_context, #NAME "_vertex", DESCRIPTION, true, FLAGS, &Eval_##NAME::eval, DE_NULL, SHADER_SRC));                      \
-                       addChild(createStructCase(m_context, #NAME "_fragment", DESCRIPTION, false, FLAGS,&Eval_##NAME::eval, DE_NULL, SHADER_SRC));            \
+                       addChild(createStructCase(m_context, #NAME "_vertex", DESCRIPTION, true, FLAGS, &Eval_##NAME::eval, DE_NULL, SHADER_SRC, PARAMS));      \
+                       addChild(createStructCase(m_context, #NAME "_fragment", DESCRIPTION, false, FLAGS,&Eval_##NAME::eval, DE_NULL, SHADER_SRC, PARAMS));\
                } while (deGetFalse())
 
+       #define LOCAL_STRUCT_CASE(NAME, DESCRIPTION, FLAGS, SHADER_SRC, EVAL_FUNC_BODY) \
+               LOCAL_STRUCT_CASE_PARAMETERIZED(NAME, DESCRIPTION, FLAGS, SHADER_SRC, EVAL_FUNC_BODY, DE_NULL)
+
        LOCAL_STRUCT_CASE(basic, "Basic struct usage", 0,
                LineStream()
                << "${DECLARATIONS}"
@@ -526,6 +536,61 @@ void LocalStructTests::init (void)
                        c.color.xyz() = c.coords.swizzle(0,1,2);
                });
 
+       LineStream inoutSrc;
+       inoutSrc
+                       << "${DECLARATIONS}"
+                       << ""
+                       << "struct S {"
+                       << "    ${PRECISION} vec3 red;"
+                       << "    ${PRECISION} vec3 blue;"
+                       << "};"
+                       << ""
+                       << "void modify (inout S s)"
+                       << "{"
+                       << "    s.red += vec3(0.5, 0.0, 0.0);"
+                       << "    s.blue += vec3(0.0, 0.0, 0.5);"
+                       << "}"
+                       << ""
+                       << "void main (void)"
+                       << "{"
+                       << "    S s;"
+                       << "    s.red = vec3(0.5, 0.0, 0.0);"
+                       << "    s.blue = vec3(0.0, 0.0, 0.5);"
+                       << "    modify(s);"
+                       << "    ${DST} = vec4(0.0, 0.0, 0.0, 1.0);"
+                       << "    if (s.red == vec3(1.0, 0.0, 0.0) && s.blue == vec3(0.0, 0.0, 1.0))"
+                       << "            ${DST} = vec4(1.0, 1.0, 1.0, 1.0);"
+                       << "    ${ASSIGN_POS}"
+                       << "}";
+
+       std::map<std::string, std::string> precisionParams;
+       precisionParams["PRECISION"] = "lowp";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_inout_lowp, "Struct with lowp members as an inout function parameter", 0,
+               inoutSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
+       precisionParams["PRECISION"] = "mediump";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_inout_mediump, "Struct with mediump members as an inout function parameter", 0,
+               inoutSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
+       precisionParams["PRECISION"] = "highp";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_inout_highp, "Struct with highp members as an inout function parameter", FLAG_REQUIRES_HIGHP_FRAGMENT,
+               inoutSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
        LOCAL_STRUCT_CASE(parameter_nested, "Nested struct as a function parameter", 0,
                LineStream()
                << "${DECLARATIONS}"
@@ -558,6 +623,58 @@ void LocalStructTests::init (void)
                        c.color.xyz() = c.coords.swizzle(0,1,2);
                });
 
+       LineStream outSrc;
+       outSrc
+                       << "${DECLARATIONS}"
+                       << ""
+                       << "struct S {"
+                       << "    ${PRECISION} vec3 red;"
+                       << "    ${PRECISION} vec3 blue;"
+                       << "};"
+                       << ""
+                       << "void modify (out S s)"
+                       << "{"
+                       << "    s.red = vec3(1.0, 0.0, 0.0);"
+                       << "    s.blue = vec3(0.0, 0.0, 1.0);"
+                       << "}"
+                       << ""
+                       << "void main (void)"
+                       << "{"
+                       << "    S s;"
+                       << "    modify(s);"
+                       << "    ${DST} = vec4(0.0, 0.0, 0.0, 1.0);"
+                       << "    if (s.red == vec3(1.0, 0.0, 0.0) && s.blue == vec3(0.0, 0.0, 1.0))"
+                       << "            ${DST} = vec4(1.0, 1.0, 1.0, 1.0);"
+                       << "    ${ASSIGN_POS}"
+                       << "}",
+
+
+       precisionParams["PRECISION"] = "lowp";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_out_lowp, "Struct with lowp members as an out function parameter", 0,
+               outSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
+       precisionParams["PRECISION"] = "mediump";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(parameter_out_mediump, "Struct with mediump members as an out function parameter", 0,
+               outSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
+       precisionParams["PRECISION"] = "highp";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_out_highp, "Struct with highp members as an out function parameter", FLAG_REQUIRES_HIGHP_FRAGMENT,
+               outSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
        LOCAL_STRUCT_CASE(return, "Struct as a return value", 0,
                LineStream()
                << "${DECLARATIONS}"
@@ -1221,8 +1338,8 @@ void UniformStructTests::init (void)
                                 static void setUniforms (const glw::Functions& gl, deUint32 programID, const tcu::Vec4& constCoords) SET_UNIFORMS_BODY /* NOLINT(SET_UNIFORMS_BODY) */ \
                        };                                                                                                                                                                                                                                                                                                                      \
                        struct Eval_##NAME { static void eval (ShaderEvalContext& c) EVAL_FUNC_BODY };  /* NOLINT(EVAL_FUNC_BODY) */                                                                                            \
-                       addChild(createStructCase(m_context, #NAME "_vertex", DESCRIPTION, true, FLAGS, Eval_##NAME::eval, SetUniforms_##NAME::setUniforms, SHADER_SRC));                       \
-                       addChild(createStructCase(m_context, #NAME "_fragment", DESCRIPTION, false, FLAGS, Eval_##NAME::eval, SetUniforms_##NAME::setUniforms, SHADER_SRC));            \
+                       addChild(createStructCase(m_context, #NAME "_vertex", DESCRIPTION, true, FLAGS, Eval_##NAME::eval, SetUniforms_##NAME::setUniforms, SHADER_SRC, DE_NULL));      \
+                       addChild(createStructCase(m_context, #NAME "_fragment", DESCRIPTION, false, FLAGS, Eval_##NAME::eval, SetUniforms_##NAME::setUniforms, SHADER_SRC, DE_NULL));\
                } while (deGetFalse())
 
        UNIFORM_STRUCT_CASE(basic, "Basic struct usage", 0,
index 9e202ca..6b7516b 100644 (file)
@@ -124,7 +124,7 @@ Texture2DSizeCase::IterateResult Texture2DSizeCase::iterate (void)
        tcu::Surface                    referenceFrame  (viewport.width, viewport.height);
        const tcu::IVec4                texBits                 = tcu::getTextureFormatBitDepth(glu::mapGLTransferFormat(m_format, m_dataType));
        const tcu::PixelFormat& rtFmt                   = m_renderCtx.getRenderTarget().getPixelFormat();
-       const tcu::PixelFormat  thresholdFormat(std::min(texBits[0], rtFmt.redBits), std::min(texBits[1], rtFmt.greenBits), std::min(texBits[2], rtFmt.blueBits), std::min(texBits[3], rtFmt.alphaBits));
+       const tcu::PixelFormat  thresholdFormat(de::min(texBits[0], rtFmt.redBits), de::min(texBits[1], rtFmt.greenBits), de::min(texBits[2], rtFmt.blueBits), de::min(texBits[3], rtFmt.alphaBits));
        tcu::RGBA                               threshold               = thresholdFormat.getColorThreshold() + tcu::RGBA(7,7,7,7);
        deUint32                                wrapS                   = GL_CLAMP_TO_EDGE;
        deUint32                                wrapT                   = GL_CLAMP_TO_EDGE;
@@ -272,7 +272,7 @@ bool TextureCubeSizeCase::testFace (tcu::CubeFace face)
        tcu::Surface                    referenceFrame  (viewport.width, viewport.height);
        const tcu::IVec4                texBits                 = tcu::getTextureFormatBitDepth(glu::mapGLTransferFormat(m_format, m_dataType));
        const tcu::PixelFormat& rtFmt                   = m_renderCtx.getRenderTarget().getPixelFormat();
-       const tcu::PixelFormat  thresholdFormat(std::min(texBits[0], rtFmt.redBits), std::min(texBits[1], rtFmt.greenBits), std::min(texBits[2], rtFmt.blueBits), std::min(texBits[3], rtFmt.alphaBits));
+       const tcu::PixelFormat  thresholdFormat(de::min(texBits[0], rtFmt.redBits), de::min(texBits[1], rtFmt.greenBits), de::min(texBits[2], rtFmt.blueBits), de::min(texBits[3], rtFmt.alphaBits));
        tcu::RGBA                               threshold               = thresholdFormat.getColorThreshold() + tcu::RGBA(7,7,7,7);
        deUint32                                wrapS                   = GL_CLAMP_TO_EDGE;
        deUint32                                wrapT                   = GL_CLAMP_TO_EDGE;
index 70e61b4..15013bf 100644 (file)
@@ -214,7 +214,7 @@ float computeFloatingPointError (const float value, const int numAccurateBits)
 {
        const int               numGarbageBits  = 23-numAccurateBits;
        const deUint32  mask                    = (1u<<numGarbageBits)-1u;
-       const int               exp                             = tcu::Float32(value).exponent();
+       const int               exp                             = (tcu::Float32(value).exponent() < -3) ? -3 : tcu::Float32(value).exponent();
 
        return tcu::Float32::construct(+1, exp, (1u<<23) | mask).asFloat() - tcu::Float32::construct(+1, exp, 1u<<23).asFloat();
 }
@@ -323,6 +323,20 @@ enum
        INTERPOLATION_LOST_BITS = 3, // number mantissa of bits allowed to be lost in varying interpolation
 };
 
+static int getInterpolationLostBitsWarning (const glu::Precision precision)
+{
+       // number mantissa of bits allowed to be lost in varying interpolation
+       switch (precision)
+       {
+               case glu::PRECISION_HIGHP:              return 9;
+               case glu::PRECISION_MEDIUMP:    return 3;
+               case glu::PRECISION_LOWP:               return 3;
+               default:
+                       DE_ASSERT(false);
+                       return 0;
+       }
+}
+
 static inline tcu::Vec4 getDerivateThreshold (const glu::Precision precision, const tcu::Vec4& valueMin, const tcu::Vec4& valueMax, const tcu::Vec4& expectedDerivate)
 {
        const int                       baseBits                = getNumMantissaBits(precision);
@@ -337,6 +351,21 @@ static inline tcu::Vec4 getDerivateThreshold (const glu::Precision precision, co
                                         computeFloatingPointError(expectedDerivate[3], numAccurateBits[3]));
 }
 
+static inline tcu::Vec4 getDerivateThresholdWarning (const glu::Precision precision, const tcu::Vec4& valueMin, const tcu::Vec4& valueMax, const tcu::Vec4& expectedDerivate)
+{
+       const int                       baseBits                = getNumMantissaBits(precision);
+       const tcu::UVec4        derivExp                = getCompExpBits(expectedDerivate);
+       const tcu::UVec4        maxValueExp             = max(getCompExpBits(valueMin), getCompExpBits(valueMax));
+       const tcu::UVec4        numBitsLost             = maxValueExp - min(maxValueExp, derivExp);
+       const tcu::IVec4        numAccurateBits = max(baseBits - numBitsLost.asInt() - getInterpolationLostBitsWarning(precision), tcu::IVec4(0));
+
+       return tcu::Vec4(computeFloatingPointError(expectedDerivate[0], numAccurateBits[0]),
+                                        computeFloatingPointError(expectedDerivate[1], numAccurateBits[1]),
+                                        computeFloatingPointError(expectedDerivate[2], numAccurateBits[2]),
+                                        computeFloatingPointError(expectedDerivate[3], numAccurateBits[3]));
+}
+
+
 namespace
 {
 
@@ -369,7 +398,7 @@ enum VerificationLogging
        LOG_NOTHING
 };
 
-static bool verifyConstantDerivate (tcu::TestLog&                                              log,
+static qpTestResult verifyConstantDerivate (tcu::TestLog&                              log,
                                                                        const tcu::ConstPixelBufferAccess&      result,
                                                                        const tcu::PixelBufferAccess&           errorMask,
                                                                        glu::DataType                                           dataType,
@@ -412,7 +441,7 @@ static bool verifyConstantDerivate (tcu::TestLog&                                           log,
        if (numFailedPixels > 0 && logPolicy == LOG_ALL)
                log << TestLog::Message << "FAIL: found " << numFailedPixels << " failed pixels" << TestLog::EndMessage;
 
-       return numFailedPixels == 0;
+       return (numFailedPixels == 0) ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL;
 }
 
 struct Linear2DFunctionEvaluator
@@ -433,7 +462,7 @@ tcu::Vec4 Linear2DFunctionEvaluator::evaluateAt (float screenX, float screenY) c
        return matrix * position;
 }
 
-static bool reverifyConstantDerivateWithFlushRelaxations (tcu::TestLog&                                                        log,
+static qpTestResult reverifyConstantDerivateWithFlushRelaxations (tcu::TestLog&                                                        log,
                                                                                                                  const tcu::ConstPixelBufferAccess&    result,
                                                                                                                  const tcu::PixelBufferAccess&                 errorMask,
                                                                                                                  glu::DataType                                                 dataType,
@@ -551,7 +580,7 @@ static bool reverifyConstantDerivateWithFlushRelaxations (tcu::TestLog&                                                     lo
        if (numFailedPixels > 0)
                log << TestLog::Message << "FAIL: found " << numFailedPixels << " failed pixels" << TestLog::EndMessage;
 
-       return numFailedPixels == 0;
+       return (numFailedPixels == 0) ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL;
 }
 
 // TriangleDerivateCase
@@ -559,34 +588,34 @@ static bool reverifyConstantDerivateWithFlushRelaxations (tcu::TestLog&                                                   lo
 class TriangleDerivateCase : public TestCase
 {
 public:
-                                               TriangleDerivateCase    (Context& context, const char* name, const char* description);
-                                               ~TriangleDerivateCase   (void);
+                                                       TriangleDerivateCase    (Context& context, const char* name, const char* description);
+                                                       ~TriangleDerivateCase   (void);
 
-       IterateResult           iterate                                 (void);
+       IterateResult                   iterate                                 (void);
 
 protected:
-       virtual void            setupRenderState                (deUint32 program) { DE_UNREF(program); }
-       virtual bool            verify                                  (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask) = DE_NULL;
+       virtual void                    setupRenderState                (deUint32 program) { DE_UNREF(program); }
+       virtual qpTestResult    verify                                  (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask) = DE_NULL;
 
-       tcu::IVec2                      getViewportSize                 (void) const;
-       tcu::Vec4                       getSurfaceThreshold             (void) const;
+       tcu::IVec2                              getViewportSize                 (void) const;
+       tcu::Vec4                               getSurfaceThreshold             (void) const;
 
-       glu::DataType           m_dataType;
-       glu::Precision          m_precision;
+       glu::DataType                   m_dataType;
+       glu::Precision                  m_precision;
 
-       glu::DataType           m_coordDataType;
-       glu::Precision          m_coordPrecision;
+       glu::DataType                   m_coordDataType;
+       glu::Precision                  m_coordPrecision;
 
-       std::string                     m_fragmentSrc;
+       std::string                             m_fragmentSrc;
 
-       tcu::Vec4                       m_coordMin;
-       tcu::Vec4                       m_coordMax;
-       tcu::Vec4                       m_derivScale;
-       tcu::Vec4                       m_derivBias;
+       tcu::Vec4                               m_coordMin;
+       tcu::Vec4                               m_coordMax;
+       tcu::Vec4                               m_derivScale;
+       tcu::Vec4                               m_derivBias;
 
-       SurfaceType                     m_surfaceType;
-       int                                     m_numSamples;
-       deUint32                        m_hint;
+       SurfaceType                             m_surfaceType;
+       int                                             m_numSamples;
+       deUint32                                m_hint;
 };
 
 TriangleDerivateCase::TriangleDerivateCase (Context& context, const char* name, const char* description)
@@ -825,18 +854,24 @@ TriangleDerivateCase::IterateResult TriangleDerivateCase::iterate (void)
                tcu::Surface errorMask(result.getWidth(), result.getHeight());
                tcu::clear(errorMask.getAccess(), tcu::RGBA::green().toVec());
 
-               const bool isOk = verify(result.getAccess(), errorMask.getAccess());
+               const qpTestResult testResult = verify(result.getAccess(), errorMask.getAccess());
+               const char* failStr = "Fail";
 
                m_testCtx.getLog() << TestLog::ImageSet("Result", "Result images")
                                                   << TestLog::Image("Rendered", "Rendered image", result);
 
-               if (!isOk)
+               if (testResult != QP_TEST_RESULT_PASS)
                        m_testCtx.getLog() << TestLog::Image("ErrorMask", "Error mask", errorMask);
 
                m_testCtx.getLog() << TestLog::EndImageSet;
 
-               m_testCtx.setTestResult(isOk ? QP_TEST_RESULT_PASS      : QP_TEST_RESULT_FAIL,
-                                                               isOk ? "Pass"                           : "Image comparison failed");
+               if (testResult == QP_TEST_RESULT_PASS)
+                       failStr = "Pass";
+               else if (testResult == QP_TEST_RESULT_QUALITY_WARNING)
+                       failStr = "QualityWarning";
+
+               m_testCtx.setTestResult(testResult, failStr);
+
        }
 
        return STOP;
@@ -875,7 +910,7 @@ public:
        void                            init                                            (void);
 
 protected:
-       bool                            verify                                          (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask);
+       qpTestResult            verify                                          (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask);
 
 private:
        DerivateFunc            m_func;
@@ -922,7 +957,7 @@ void ConstantDerivateCase::init (void)
        m_derivBias             = tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f);
 }
 
-bool ConstantDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask)
+qpTestResult ConstantDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask)
 {
        const tcu::Vec4 reference       (0.0f); // Derivate of constant argument should always be 0
        const tcu::Vec4 threshold       = getSurfaceThreshold() / abs(m_derivScale);
@@ -942,7 +977,7 @@ public:
        void                            init                                    (void);
 
 protected:
-       bool                            verify                                  (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask);
+       qpTestResult            verify                                  (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask);
 
 private:
        DerivateFunc            m_func;
@@ -1049,7 +1084,7 @@ void LinearDerivateCase::init (void)
        }
 }
 
-bool LinearDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask)
+qpTestResult LinearDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask)
 {
        const tcu::Vec4         xScale                          = tcu::Vec4(1.0f, 0.0f, 0.5f, -0.5f);
        const tcu::Vec4         yScale                          = tcu::Vec4(0.0f, 1.0f, 0.5f, -0.5f);
@@ -1057,13 +1092,15 @@ bool LinearDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, cons
 
        if (m_func == DERIVATE_DFDX || m_func == DERIVATE_DFDY)
        {
-               const bool                      isX                     = m_func == DERIVATE_DFDX;
-               const float                     div                     = isX ? float(result.getWidth()) : float(result.getHeight());
-               const tcu::Vec4         scale           = isX ? xScale : yScale;
-               const tcu::Vec4         reference       = ((m_coordMax - m_coordMin) / div) * scale;
-               const tcu::Vec4         opThreshold     = getDerivateThreshold(m_precision, m_coordMin*scale, m_coordMax*scale, reference);
-               const tcu::Vec4         threshold       = max(surfaceThreshold, opThreshold);
-               const int                       numComps        = glu::getDataTypeFloatScalars(m_dataType);
+               const bool                      isX                             = m_func == DERIVATE_DFDX;
+               const float                     div                             = isX ? float(result.getWidth()) : float(result.getHeight());
+               const tcu::Vec4         scale                   = isX ? xScale : yScale;
+               const tcu::Vec4         reference               = ((m_coordMax - m_coordMin) / div) * scale;
+               const tcu::Vec4         opThreshold             = getDerivateThreshold(m_precision, m_coordMin*scale, m_coordMax*scale, reference);
+               const tcu::Vec4         opThresholdW    = getDerivateThresholdWarning(m_precision, m_coordMin*scale, m_coordMax*scale, reference);
+               const tcu::Vec4         threshold               = max(surfaceThreshold, opThreshold);
+               const tcu::Vec4         thresholdW              = max(surfaceThreshold, opThresholdW);
+               const int                       numComps                = glu::getDataTypeFloatScalars(m_dataType);
 
                m_testCtx.getLog()
                        << tcu::TestLog::Message
@@ -1075,14 +1112,27 @@ bool LinearDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, cons
                // This improves performance significantly.
                if (verifyConstantDerivate(m_testCtx.getLog(), result, errorMask, m_dataType,
                                                                   reference, threshold, m_derivScale, m_derivBias,
-                                                                  LOG_NOTHING))
+                                                                  LOG_NOTHING) == QP_TEST_RESULT_PASS)
                {
                        m_testCtx.getLog()
                                << tcu::TestLog::Message
                                << "No incorrect derivatives found, result valid."
                                << tcu::TestLog::EndMessage;
 
-                       return true;
+                       return QP_TEST_RESULT_PASS;
+               }
+
+               // Check with relaxed threshold value
+               if (verifyConstantDerivate(m_testCtx.getLog(), result, errorMask, m_dataType,
+                                                                  reference, thresholdW, m_derivScale, m_derivBias,
+                                                                  LOG_NOTHING) == QP_TEST_RESULT_PASS)
+               {
+                       m_testCtx.getLog()
+                               << tcu::TestLog::Message
+                               << "No incorrect derivatives found, result valid with quality warning."
+                               << tcu::TestLog::EndMessage;
+
+                       return QP_TEST_RESULT_QUALITY_WARNING;
                }
 
                // some pixels exceed error bounds calculated for normal values. Verify that these
@@ -1115,18 +1165,36 @@ bool LinearDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, cons
        else
        {
                DE_ASSERT(m_func == DERIVATE_FWIDTH);
-               const float                     w                       = float(result.getWidth());
-               const float                     h                       = float(result.getHeight());
+               const float                     w                               = float(result.getWidth());
+               const float                     h                               = float(result.getHeight());
+
+               const tcu::Vec4         dx                              = ((m_coordMax - m_coordMin) / w) * xScale;
+               const tcu::Vec4         dy                              = ((m_coordMax - m_coordMin) / h) * yScale;
+               const tcu::Vec4         reference               = tcu::abs(dx) + tcu::abs(dy);
+               const tcu::Vec4         dxThreshold             = getDerivateThreshold(m_precision, m_coordMin*xScale, m_coordMax*xScale, dx);
+               const tcu::Vec4         dyThreshold             = getDerivateThreshold(m_precision, m_coordMin*yScale, m_coordMax*yScale, dy);
+               const tcu::Vec4         dxThresholdW    = getDerivateThresholdWarning(m_precision, m_coordMin*xScale, m_coordMax*xScale, dx);
+               const tcu::Vec4         dyThresholdW    = getDerivateThresholdWarning(m_precision, m_coordMin*yScale, m_coordMax*yScale, dy);
+               const tcu::Vec4         threshold               = max(surfaceThreshold, max(dxThreshold, dyThreshold));
+               const tcu::Vec4         thresholdW              = max(surfaceThreshold, max(dxThresholdW, dyThresholdW));
+               qpTestResult        testResult          = QP_TEST_RESULT_FAIL;
+
+               testResult = verifyConstantDerivate(m_testCtx.getLog(), result, errorMask, m_dataType,
+                                                                         reference, threshold, m_derivScale, m_derivBias);
 
-               const tcu::Vec4         dx                      = ((m_coordMax - m_coordMin) / w) * xScale;
-               const tcu::Vec4         dy                      = ((m_coordMax - m_coordMin) / h) * yScale;
-               const tcu::Vec4         reference       = tcu::abs(dx) + tcu::abs(dy);
-               const tcu::Vec4         dxThreshold     = getDerivateThreshold(m_precision, m_coordMin*xScale, m_coordMax*xScale, dx);
-               const tcu::Vec4         dyThreshold     = getDerivateThreshold(m_precision, m_coordMin*yScale, m_coordMax*yScale, dy);
-               const tcu::Vec4         threshold       = max(surfaceThreshold, max(dxThreshold, dyThreshold));
+               // return if result is pass
+               if (testResult == QP_TEST_RESULT_PASS)
+                       return testResult;
 
-               return verifyConstantDerivate(m_testCtx.getLog(), result, errorMask, m_dataType,
-                                                                         reference, threshold, m_derivScale, m_derivBias);
+               // re-check with relaxed threshold
+               testResult = verifyConstantDerivate(m_testCtx.getLog(), result, errorMask, m_dataType,
+                                                                         reference, thresholdW, m_derivScale, m_derivBias);
+
+               // if with relaxed threshold test is passing then mark the result with quality warning.
+               if (testResult == QP_TEST_RESULT_PASS)
+                       testResult = QP_TEST_RESULT_QUALITY_WARNING;
+
+               return testResult;
        }
 }
 
@@ -1143,7 +1211,7 @@ public:
 
 protected:
        void                            setupRenderState                (deUint32 program);
-       bool                            verify                                  (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask);
+       qpTestResult            verify                                  (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask);
 
 private:
        DerivateFunc            m_func;
@@ -1335,7 +1403,7 @@ void TextureDerivateCase::setupRenderState (deUint32 program)
        gl.uniform1i            (gl.getUniformLocation(program, "u_sampler"), texUnit);
 }
 
-bool TextureDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask)
+qpTestResult TextureDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, const tcu::PixelBufferAccess& errorMask)
 {
        // \note Edges are ignored in comparison
        if (result.getWidth() < 2 || result.getHeight() < 2)
@@ -1352,13 +1420,15 @@ bool TextureDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, con
 
        if (m_func == DERIVATE_DFDX || m_func == DERIVATE_DFDY)
        {
-               const bool                      isX                     = m_func == DERIVATE_DFDX;
-               const float                     div                     = isX ? w : h;
-               const tcu::Vec4         scale           = isX ? xScale : yScale;
-               const tcu::Vec4         reference       = ((m_texValueMax - m_texValueMin) / div) * scale;
-               const tcu::Vec4         opThreshold     = getDerivateThreshold(m_precision, m_texValueMin*scale, m_texValueMax*scale, reference);
-               const tcu::Vec4         threshold       = max(surfaceThreshold, opThreshold);
-               const int                       numComps        = glu::getDataTypeFloatScalars(m_dataType);
+               const bool                      isX                             = m_func == DERIVATE_DFDX;
+               const float                     div                             = isX ? w : h;
+               const tcu::Vec4         scale                   = isX ? xScale : yScale;
+               const tcu::Vec4         reference               = ((m_texValueMax - m_texValueMin) / div) * scale;
+               const tcu::Vec4         opThreshold             = getDerivateThreshold(m_precision, m_texValueMin*scale, m_texValueMax*scale, reference);
+               const tcu::Vec4         opThresholdW    = getDerivateThresholdWarning(m_precision, m_texValueMin*scale, m_texValueMax*scale, reference);
+               const tcu::Vec4         threshold               = max(surfaceThreshold, opThreshold);
+               const tcu::Vec4         thresholdW              = max(surfaceThreshold, opThresholdW);
+               const int                       numComps                = glu::getDataTypeFloatScalars(m_dataType);
 
                m_testCtx.getLog()
                        << tcu::TestLog::Message
@@ -1370,16 +1440,36 @@ bool TextureDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, con
                // This improves performance significantly.
                if (verifyConstantDerivate(m_testCtx.getLog(), compareArea, maskArea, m_dataType,
                                                                   reference, threshold, m_derivScale, m_derivBias,
-                                                                  LOG_NOTHING))
+                                                                  LOG_NOTHING) == QP_TEST_RESULT_PASS)
                {
                        m_testCtx.getLog()
                                << tcu::TestLog::Message
                                << "No incorrect derivatives found, result valid."
                                << tcu::TestLog::EndMessage;
 
-                       return true;
+                       return QP_TEST_RESULT_PASS;
                }
 
+               m_testCtx.getLog()
+                       << tcu::TestLog::Message
+                       << "Verifying result image.\n"
+                       << "\tValid derivative is " << LogVecComps(reference, numComps) << " with Warning threshold " << LogVecComps(thresholdW, numComps)
+                       << tcu::TestLog::EndMessage;
+
+               // Re-check with relaxed threshold
+               if (verifyConstantDerivate(m_testCtx.getLog(), compareArea, maskArea, m_dataType,
+                                                                  reference, thresholdW, m_derivScale, m_derivBias,
+                                                                  LOG_NOTHING) == QP_TEST_RESULT_PASS)
+               {
+                       m_testCtx.getLog()
+                               << tcu::TestLog::Message
+                               << "No incorrect derivatives found, result valid with quality warning."
+                               << tcu::TestLog::EndMessage;
+
+                       return QP_TEST_RESULT_QUALITY_WARNING;
+               }
+
+
                // some pixels exceed error bounds calculated for normal values. Verify that these
                // potentially invalid pixels are in fact valid due to (for example) subnorm flushing.
 
@@ -1407,15 +1497,32 @@ bool TextureDerivateCase::verify (const tcu::ConstPixelBufferAccess& result, con
        else
        {
                DE_ASSERT(m_func == DERIVATE_FWIDTH);
-               const tcu::Vec4 dx                      = ((m_texValueMax - m_texValueMin) / w) * xScale;
-               const tcu::Vec4 dy                      = ((m_texValueMax - m_texValueMin) / h) * yScale;
-               const tcu::Vec4 reference       = tcu::abs(dx) + tcu::abs(dy);
-               const tcu::Vec4 dxThreshold     = getDerivateThreshold(m_precision, m_texValueMin*xScale, m_texValueMax*xScale, dx);
-               const tcu::Vec4 dyThreshold     = getDerivateThreshold(m_precision, m_texValueMin*yScale, m_texValueMax*yScale, dy);
-               const tcu::Vec4 threshold       = max(surfaceThreshold, max(dxThreshold, dyThreshold));
-
-               return verifyConstantDerivate(m_testCtx.getLog(), compareArea, maskArea, m_dataType,
+               const tcu::Vec4 dx                              = ((m_texValueMax - m_texValueMin) / w) * xScale;
+               const tcu::Vec4 dy                              = ((m_texValueMax - m_texValueMin) / h) * yScale;
+               const tcu::Vec4 reference               = tcu::abs(dx) + tcu::abs(dy);
+               const tcu::Vec4 dxThreshold             = getDerivateThreshold(m_precision, m_texValueMin*xScale, m_texValueMax*xScale, dx);
+               const tcu::Vec4 dyThreshold             = getDerivateThreshold(m_precision, m_texValueMin*yScale, m_texValueMax*yScale, dy);
+               const tcu::Vec4 dxThresholdW    = getDerivateThresholdWarning(m_precision, m_texValueMin*xScale, m_texValueMax*xScale, dx);
+               const tcu::Vec4 dyThresholdW    = getDerivateThresholdWarning(m_precision, m_texValueMin*yScale, m_texValueMax*yScale, dy);
+               const tcu::Vec4 threshold               = max(surfaceThreshold, max(dxThreshold, dyThreshold));
+               const tcu::Vec4 thresholdW              = max(surfaceThreshold, max(dxThresholdW, dyThresholdW));
+               qpTestResult    testResult              = QP_TEST_RESULT_FAIL;
+
+               testResult = verifyConstantDerivate(m_testCtx.getLog(), compareArea, maskArea, m_dataType,
                                                                          reference, threshold, m_derivScale, m_derivBias);
+
+               if (testResult == QP_TEST_RESULT_PASS)
+                       return testResult;
+
+               // Re-Check with relaxed threshold
+               testResult = verifyConstantDerivate(m_testCtx.getLog(), compareArea, maskArea, m_dataType,
+                                                                         reference, thresholdW, m_derivScale, m_derivBias);
+
+               // If test is passing with relaxed threshold then mark quality warning
+               if (testResult == QP_TEST_RESULT_PASS)
+                       testResult = QP_TEST_RESULT_QUALITY_WARNING;
+
+               return testResult;
        }
 }
 
index 66b9559..526db73 100644 (file)
@@ -115,7 +115,7 @@ void ShaderStructCase::setupUniforms (int programID, const tcu::Vec4& constCoord
                m_setupUniforms(m_renderCtx.getFunctions(), programID, constCoords);
 }
 
-static ShaderStructCase* createStructCase (Context& context, const char* name, const char* description, bool isVertexCase, bool usesTextures, ShaderEvalFunc evalFunc, SetupUniformsFunc setupUniforms, const LineStream& shaderSrc)
+static ShaderStructCase* createStructCase (Context& context, const char* name, const char* description, bool isVertexCase, bool usesTextures, ShaderEvalFunc evalFunc, SetupUniformsFunc setupUniforms, const LineStream& shaderSrc, const std::map<std::string, std::string>* additionalParams)
 {
        static const char* defaultVertSrc =
                "#version 300 es\n"
@@ -159,6 +159,8 @@ static ShaderStructCase* createStructCase (Context& context, const char* name, c
                spParams["DST"]                         = "o_color";
                spParams["ASSIGN_POS"]          = "";
        }
+       if (additionalParams)
+               spParams.insert(additionalParams->begin(), additionalParams->end());
 
        if (isVertexCase)
                return new ShaderStructCase(context, name, description, isVertexCase, usesTextures, evalFunc, setupUniforms, StringTemplate(shaderSrc.str()).specialize(spParams).c_str(), defaultFragSrc);
@@ -183,13 +185,16 @@ public:
 
 void LocalStructTests::init (void)
 {
-       #define LOCAL_STRUCT_CASE(NAME, DESCRIPTION, SHADER_SRC, EVAL_FUNC_BODY)                                                                                                                                        \
+       #define LOCAL_STRUCT_CASE_PARAMETERIZED(NAME, DESCRIPTION, SHADER_SRC, EVAL_FUNC_BODY, PARAMS)                                                                                          \
                do {                                                                                                                                                                                                                                                                    \
                        struct Eval_##NAME { static void eval (ShaderEvalContext& c) EVAL_FUNC_BODY };  /* NOLINT(EVAL_FUNC_BODY) */                                            \
-                       addChild(createStructCase(m_context, #NAME "_vertex", DESCRIPTION, true, false, &Eval_##NAME::eval, DE_NULL, SHADER_SRC));                      \
-                       addChild(createStructCase(m_context, #NAME "_fragment", DESCRIPTION, false, false,&Eval_##NAME::eval, DE_NULL, SHADER_SRC));            \
+                       addChild(createStructCase(m_context, #NAME "_vertex", DESCRIPTION, true, false, &Eval_##NAME::eval, DE_NULL, SHADER_SRC, PARAMS));      \
+                       addChild(createStructCase(m_context, #NAME "_fragment", DESCRIPTION, false, false,&Eval_##NAME::eval, DE_NULL, SHADER_SRC, PARAMS));\
                } while (deGetFalse())
 
+       #define LOCAL_STRUCT_CASE(NAME, DESCRIPTION, SHADER_SRC, EVAL_FUNC_BODY) \
+               LOCAL_STRUCT_CASE_PARAMETERIZED(NAME, DESCRIPTION, SHADER_SRC, EVAL_FUNC_BODY, DE_NULL)
+
        LOCAL_STRUCT_CASE(basic, "Basic struct usage",
                LineStream()
                << "${HEADER}"
@@ -500,6 +505,63 @@ void LocalStructTests::init (void)
                        c.color.xyz() = c.coords.swizzle(0,1,2);
                });
 
+       LineStream inoutSrc;
+       inoutSrc
+                       << "${HEADER}"
+                       << ""
+                       << "struct S {"
+                       << "    ${PRECISION} vec3 red;"
+                       << "    ${PRECISION} vec3 blue;"
+                       << "};"
+                       << ""
+                       << "void modify (inout S s)"
+                       << "{"
+                       << "    s.red += vec3(0.5, 0.0, 0.0);"
+                       << "    s.blue += vec3(0.0, 0.0, 0.5);"
+                       << "}"
+                       << ""
+                       << "void main (void)"
+                       << "{"
+                       << "    S s;"
+                       << "    s.red = vec3(0.5, 0.0, 0.0);"
+                       << "    s.blue = vec3(0.0, 0.0, 0.5);"
+                       << "    modify(s);"
+                       << "    ${DST} = vec4(0.0, 0.0, 0.0, 1.0);"
+                       << "    if (s.red == vec3(1.0, 0.0, 0.0) && s.blue == vec3(0.0, 0.0, 1.0))"
+                       << "            ${DST} = vec4(1.0, 1.0, 1.0, 1.0);"
+                       << "    ${ASSIGN_POS}"
+                       << "}";
+
+
+       std::map<std::string, std::string> precisionParams;
+
+       precisionParams["PRECISION"] = "lowp";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_inout_lowp, "Struct with lowp members as an inout function parameter",
+               inoutSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
+       precisionParams["PRECISION"] = "mediump";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_inout_mediump, "Struct with mediump members as an inout function parameter",
+               inoutSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
+       precisionParams["PRECISION"] = "highp";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_inout_highp, "Struct with highp members as an inout function parameter",
+               inoutSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
        LOCAL_STRUCT_CASE(parameter_nested, "Nested struct as a function parameter",
                LineStream()
                << "${HEADER}"
@@ -532,6 +594,58 @@ void LocalStructTests::init (void)
                        c.color.xyz() = c.coords.swizzle(0,1,2);
                });
 
+       LineStream outSrc;
+       outSrc
+                       << "${HEADER}"
+                       << ""
+                       << "struct S {"
+                       << "    ${PRECISION} vec3 red;"
+                       << "    ${PRECISION} vec3 blue;"
+                       << "};"
+                       << ""
+                       << "void modify (out S s)"
+                       << "{"
+                       << "    s.red = vec3(1.0, 0.0, 0.0);"
+                       << "    s.blue = vec3(0.0, 0.0, 1.0);"
+                       << "}"
+                       << ""
+                       << "void main (void)"
+                       << "{"
+                       << "    S s;"
+                       << "    modify(s);"
+                       << "    ${DST} = vec4(0.0, 0.0, 0.0, 1.0);"
+                       << "    if (s.red == vec3(1.0, 0.0, 0.0) && s.blue == vec3(0.0, 0.0, 1.0))"
+                       << "            ${DST} = vec4(1.0, 1.0, 1.0, 1.0);"
+                       << "    ${ASSIGN_POS}"
+                       << "}";
+
+       precisionParams["PRECISION"] = "lowp";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_out_lowp, "Struct with lowp members as an out function parameter",
+               outSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
+       precisionParams["PRECISION"] = "mediump";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_out_mediump, "Struct with mediump members as an out function parameter",
+               outSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
+       precisionParams["PRECISION"] = "highp";
+       LOCAL_STRUCT_CASE_PARAMETERIZED(
+               parameter_out_highp, "Struct with highp members as an out function parameter",
+               outSrc,
+               {
+                       c.color.xyz() = tcu::Vec3(1.0, 1.0, 1.0);
+               },
+               &precisionParams);
+
        LOCAL_STRUCT_CASE(return, "Struct as a return value",
                LineStream()
                << "${HEADER}"
@@ -1228,8 +1342,8 @@ void UniformStructTests::init (void)
                                 static void setUniforms (const glw::Functions& gl, deUint32 programID, const tcu::Vec4& constCoords) SET_UNIFORMS_BODY /* NOLINT(SET_UNIFORMS_BODY) */ \
                        };                                                                                                                                                                                                                                                                                                                      \
                        struct Eval_##NAME { static void eval (ShaderEvalContext& c) EVAL_FUNC_BODY };  /* NOLINT(EVAL_FUNC_BODY) */                                                                                            \
-                       addChild(createStructCase(m_context, #NAME "_vertex", DESCRIPTION, true, TEXTURES, Eval_##NAME::eval, SetUniforms_##NAME::setUniforms, SHADER_SRC));            \
-                       addChild(createStructCase(m_context, #NAME "_fragment", DESCRIPTION, false, TEXTURES, Eval_##NAME::eval, SetUniforms_##NAME::setUniforms, SHADER_SRC));         \
+                       addChild(createStructCase(m_context, #NAME "_vertex", DESCRIPTION, true, TEXTURES, Eval_##NAME::eval, SetUniforms_##NAME::setUniforms, SHADER_SRC, DE_NULL));\
+                       addChild(createStructCase(m_context, #NAME "_fragment", DESCRIPTION, false, TEXTURES, Eval_##NAME::eval, SetUniforms_##NAME::setUniforms, SHADER_SRC, DE_NULL));\
                } while (deGetFalse())
 
        UNIFORM_STRUCT_CASE(basic, "Basic struct usage", false,
index fa0bbc5..79c960d 100644 (file)
@@ -125,7 +125,7 @@ Texture2DSizeCase::IterateResult Texture2DSizeCase::iterate (void)
        tcu::Surface                    referenceFrame  (viewport.width, viewport.height);
        const tcu::IVec4                texBits                 = tcu::getTextureFormatBitDepth(glu::mapGLTransferFormat(m_format, m_dataType));
        const tcu::PixelFormat& rtFmt                   = m_renderCtx.getRenderTarget().getPixelFormat();
-       const tcu::PixelFormat  thresholdFormat(std::min(texBits[0], rtFmt.redBits), std::min(texBits[1], rtFmt.greenBits), std::min(texBits[2], rtFmt.blueBits), std::min(texBits[3], rtFmt.alphaBits));
+       const tcu::PixelFormat  thresholdFormat(de::min(texBits[0], rtFmt.redBits), de::min(texBits[1], rtFmt.greenBits), de::min(texBits[2], rtFmt.blueBits), de::min(texBits[3], rtFmt.alphaBits));
        tcu::RGBA                               threshold               = thresholdFormat.getColorThreshold() + tcu::RGBA(7,7,7,7);
        deUint32                                wrapS                   = GL_CLAMP_TO_EDGE;
        deUint32                                wrapT                   = GL_CLAMP_TO_EDGE;
@@ -273,7 +273,7 @@ bool TextureCubeSizeCase::testFace (tcu::CubeFace face)
        tcu::Surface                    referenceFrame  (viewport.width, viewport.height);
        const tcu::IVec4                texBits                 = tcu::getTextureFormatBitDepth(glu::mapGLTransferFormat(m_format, m_dataType));
        const tcu::PixelFormat& rtFmt                   = m_renderCtx.getRenderTarget().getPixelFormat();
-       const tcu::PixelFormat  thresholdFormat(std::min(texBits[0], rtFmt.redBits), std::min(texBits[1], rtFmt.greenBits), std::min(texBits[2], rtFmt.blueBits), std::min(texBits[3], rtFmt.alphaBits));
+       const tcu::PixelFormat  thresholdFormat(de::min(texBits[0], rtFmt.redBits), de::min(texBits[1], rtFmt.greenBits), de::min(texBits[2], rtFmt.blueBits), de::min(texBits[3], rtFmt.alphaBits));
        tcu::RGBA                               threshold               = thresholdFormat.getColorThreshold() + tcu::RGBA(7,7,7,7);
        deUint32                                wrapS                   = GL_CLAMP_TO_EDGE;
        deUint32                                wrapT                   = GL_CLAMP_TO_EDGE;