Merge vk-gl-cts/master into vk-gl-cts/vulkan-cts-next-dev
Change-Id: If0522fee34abd42178dce1878d65f663c60a5d5a
diff --git a/Android.mk b/Android.mk
index 5f8a27d..d82732b 100644
--- a/Android.mk
+++ b/Android.mk
@@ -51,6 +51,11 @@
LOCAL_NDK_STL_VARIANT := gnustl_static
LOCAL_RTTI_FLAG := -frtti -fexceptions
LOCAL_MULTILIB := both
+LOCAL_TIDY_CHECKS := \
+ -google-build-explicit-make-pair, \
+ -google-global-names-in-headers, \
+ -google-runtime-member-string-references, \
+ -google-runtime-operator, \
include $(BUILD_SHARED_LIBRARY)
diff --git a/AndroidGen.mk b/AndroidGen.mk
index 17ae902..50c7b29 100644
--- a/AndroidGen.mk
+++ b/AndroidGen.mk
@@ -215,6 +215,7 @@
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmTests.cpp \
+ external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUboMatrixPaddingTests.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp \
external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp \
diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt
index 779afb9..5dccf9b 100644
--- a/android/cts/master/vk-master.txt
+++ b/android/cts/master/vk-master.txt
@@ -161947,6 +161947,7 @@
dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.scalar_uint
dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.vector_sint
dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.vector_uint
+dEQP-VK.spirv_assembly.instruction.compute.ubo_padding.mat2x2
dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opselect_single_buffer
dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opfunctioncall_single_buffer
dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opphi_single_buffer
@@ -163984,6 +163985,11 @@
dEQP-VK.spirv_assembly.instruction.graphics.16bit_storage.push_constant_int_16_to_32.uint_vector_tesse
dEQP-VK.spirv_assembly.instruction.graphics.16bit_storage.push_constant_int_16_to_32.uint_vector_geom
dEQP-VK.spirv_assembly.instruction.graphics.16bit_storage.push_constant_int_16_to_32.uint_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_frag
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.reads_opselect_single_buffer_vert
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.reads_opselect_single_buffer_tessc
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.reads_opselect_single_buffer_tesse
@@ -199463,6 +199469,34 @@
dEQP-VK.image.atomic_operations.exchange.cube_array.r32ui_intermediate_values
dEQP-VK.image.atomic_operations.exchange.cube_array.r32i_end_result
dEQP-VK.image.atomic_operations.exchange.cube_array.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32i_intermediate_values
dEQP-VK.image.texel_view_compatible.compute.image_load.bc1_rgb_unorm_block.r16g16b16a16_unorm
dEQP-VK.image.texel_view_compatible.compute.image_load.bc1_rgb_unorm_block.r16g16b16a16_snorm
dEQP-VK.image.texel_view_compatible.compute.image_load.bc1_rgb_unorm_block.r16g16b16a16_uscaled
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/gl30-khr-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/gl30-khr-master.txt
new file mode 100644
index 0000000..ead6f7c
--- /dev/null
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/gl30-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.gl30.no_error.create_context
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/noctx-khr-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/gl45-khr-master.txt
similarity index 90%
rename from external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/noctx-khr-master.txt
rename to external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/gl45-khr-master.txt
index f86fed4..62e8d73 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/noctx-khr-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/gl45-khr-master.txt
@@ -1,4 +1,3 @@
-KHR-NoContext.gl30.no_error.create_context
KHR-NoContext.gl45.robustness.no_reset_notification
KHR-NoContext.gl45.robustness.lose_context_on_reset
KHR-NoContext.gl45.robustness.getnuniform
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/mustpass.xml b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/mustpass.xml
index f61d5a7..cf19eaa 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/mustpass.xml
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/mustpass.xml
@@ -18,7 +18,7 @@
* be lost! Modify the generating script instead.
*/-->
<TestPackage name="Khronos Mustpass GL NoContext">
- <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
- <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=113 --deqp-surface-height=47 --deqp-base-seed=2 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="gl30-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="gl45-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
</TestPackage>
</Mustpass>
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/gl30-khr-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/gl30-khr-master.txt
new file mode 100644
index 0000000..415e7ce
--- /dev/null
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/gl30-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.gl30.*
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/gl45-khr-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/gl45-khr-master.txt
new file mode 100644
index 0000000..ff9df88
--- /dev/null
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/gl45-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.gl45.*
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/noctx-khr-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/noctx-khr-master.txt
deleted file mode 100644
index 706eb29..0000000
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/noctx-khr-master.txt
+++ /dev/null
@@ -1 +0,0 @@
-KHR-NoContext.gl*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/gles2-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/gles2-khr-master.txt
new file mode 100644
index 0000000..e363547
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/gles2-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.es2.no_error.create_context
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/gles32-khr-master.txt
similarity index 90%
rename from external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt
rename to external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/gles32-khr-master.txt
index 317a0a0..985fc13 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/gles32-khr-master.txt
@@ -1,4 +1,3 @@
-KHR-NoContext.es2.no_error.create_context
KHR-NoContext.es32.robustness.no_reset_notification
KHR-NoContext.es32.robustness.lose_context_on_reset
KHR-NoContext.es32.robustness.getnuniform
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/mustpass.xml b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/mustpass.xml
index 56b29ce..5528e4d 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/mustpass.xml
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/mustpass.xml
@@ -18,7 +18,7 @@
* be lost! Modify the generating script instead.
*/-->
<TestPackage name="Khronos Mustpass ES NoContext">
- <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
- <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=113 --deqp-surface-height=47 --deqp-base-seed=2 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="gles2-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="gles32-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
</TestPackage>
</Mustpass>
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/gles2-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/gles2-khr-master.txt
new file mode 100644
index 0000000..b794ccb
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/gles2-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.es2.*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/gles32-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/gles32-khr-master.txt
new file mode 100644
index 0000000..ed73a1c
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/gles32-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.es32.*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/noctx-khr-master.txt
deleted file mode 100644
index 8b3a676..0000000
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/noctx-khr-master.txt
+++ /dev/null
@@ -1 +0,0 @@
-KHR-NoContext.es*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/gles2-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/gles2-khr-master.txt
new file mode 100644
index 0000000..e363547
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/gles2-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.es2.no_error.create_context
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/gles32-khr-master.txt
similarity index 90%
copy from external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt
copy to external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/gles32-khr-master.txt
index 317a0a0..985fc13 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/gles32-khr-master.txt
@@ -1,4 +1,3 @@
-KHR-NoContext.es2.no_error.create_context
KHR-NoContext.es32.robustness.no_reset_notification
KHR-NoContext.es32.robustness.lose_context_on_reset
KHR-NoContext.es32.robustness.getnuniform
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/mustpass.xml b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/mustpass.xml
index 6c41041..5bc5063 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/mustpass.xml
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/mustpass.xml
@@ -18,7 +18,7 @@
* be lost! Modify the generating script instead.
*/-->
<TestPackage name="Khronos Mustpass ES NoContext">
- <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
- <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=113 --deqp-surface-height=47 --deqp-base-seed=2 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="gles2-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="gles32-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
</TestPackage>
</Mustpass>
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/noctx-khr-master.txt
deleted file mode 100644
index 317a0a0..0000000
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/noctx-khr-master.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-KHR-NoContext.es2.no_error.create_context
-KHR-NoContext.es32.robustness.no_reset_notification
-KHR-NoContext.es32.robustness.lose_context_on_reset
-KHR-NoContext.es32.robustness.getnuniform
-KHR-NoContext.es32.robustness.readnpixels
-KHR-NoContext.es32.context_flags.no_flags_set_case
-KHR-NoContext.es32.context_flags.debug_flag_set_case
-KHR-NoContext.es32.context_flags.robust_flag_set_case
-KHR-NoContext.es32.context_flags.all_flags_set_case
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/gles2-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/gles2-khr-master.txt
new file mode 100644
index 0000000..b794ccb
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/gles2-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.es2.*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/gles32-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/gles32-khr-master.txt
new file mode 100644
index 0000000..ed73a1c
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/gles32-khr-master.txt
@@ -0,0 +1 @@
+KHR-NoContext.es32.*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/noctx-khr-master.txt
deleted file mode 100644
index 8b3a676..0000000
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/noctx-khr-master.txt
+++ /dev/null
@@ -1 +0,0 @@
-KHR-NoContext.es*
diff --git a/external/openglcts/modules/common/glcPolygonOffsetClampTests.cpp b/external/openglcts/modules/common/glcPolygonOffsetClampTests.cpp
index 68caa2a..65c8e19 100644
--- a/external/openglcts/modules/common/glcPolygonOffsetClampTests.cpp
+++ b/external/openglcts/modules/common/glcPolygonOffsetClampTests.cpp
@@ -353,7 +353,7 @@
GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer");
bool result = true;
- for (uint32_t i = 0; i < m_testValues.size(); ++i)
+ for (GLuint i = 0; i < m_testValues.size(); ++i)
{
// Prepare verification variables
GLfloat depthValue = 0.0f;
@@ -522,7 +522,7 @@
* @param offsetDepth Case iteration number
* @param offsetClampDepth Case iteration number
*/
-bool PolygonOffsetClampMinMaxTestCase::verify(uint32_t caseNo, GLfloat depth, GLfloat offsetDepth,
+bool PolygonOffsetClampMinMaxTestCase::verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth,
GLfloat offsetClampDepth)
{
// Min offset case
@@ -584,7 +584,7 @@
m_testValues.push_back(PolygonOffsetClampValues(0.0f, 1000.0f, INFINITY)); // Max Offset, infinity clamp case
}
-bool PolygonOffsetClampZeroInfinityTestCase::verify(uint32_t caseNo, GLfloat depth, GLfloat offsetDepth,
+bool PolygonOffsetClampZeroInfinityTestCase::verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth,
GLfloat offsetClampDepth)
{
DE_UNREF(caseNo);
diff --git a/external/openglcts/modules/common/glcPolygonOffsetClampTests.hpp b/external/openglcts/modules/common/glcPolygonOffsetClampTests.hpp
index 999957d..7eaefe2 100644
--- a/external/openglcts/modules/common/glcPolygonOffsetClampTests.hpp
+++ b/external/openglcts/modules/common/glcPolygonOffsetClampTests.hpp
@@ -102,7 +102,7 @@
float readDepthValue(const glw::Functions& gl, const GLuint readDepthProgramId);
- virtual bool verify(uint32_t caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth) = DE_NULL;
+ virtual bool verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth) = DE_NULL;
};
/** Test verifies if polygon offset clamp works as expected for zero and infinite clamp values
@@ -117,10 +117,10 @@
protected:
/* Protected methods */
- bool verify(uint32_t caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth);
+ bool verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth);
};
-/** Test verifies ...
+/** Test verifies if polygon offset clamp works as expected for zero and infinite clamp values
**/
class PolygonOffsetClampZeroInfinityTestCase : public PolygonOffsetClampValueTestCaseBase
{
@@ -132,7 +132,7 @@
protected:
/* Protected methods */
- bool verify(uint32_t caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth);
+ bool verify(GLuint caseNo, GLfloat depth, GLfloat offsetDepth, GLfloat offsetClampDepth);
};
/** Test group which encapsulates all ARB_shader_group_vote conformance tests */
diff --git a/external/openglcts/modules/gl/gl4cDirectStateAccessXFBTests.cpp b/external/openglcts/modules/gl/gl4cDirectStateAccessXFBTests.cpp
index f71b258..026fda0 100644
--- a/external/openglcts/modules/gl/gl4cDirectStateAccessXFBTests.cpp
+++ b/external/openglcts/modules/gl/gl4cDirectStateAccessXFBTests.cpp
@@ -588,7 +588,7 @@
is_ok &= testStart(1, 0, "glTransformFeedbackBufferRange");
is_ok &= testStart(2, s_bo_size / 2, "glTransformFeedbackBufferRange");
- is_ok &= testSize(0, s_bo_size, "glTransformFeedbackBufferBase");
+ is_ok &= testSize(0, 0, "glTransformFeedbackBufferBase");
is_ok &= testSize(1, s_bo_size / 2, "glTransformFeedbackBufferRange");
is_ok &= testSize(2, s_bo_size / 2, "glTransformFeedbackBufferRange");
}
diff --git a/external/openglcts/modules/gl/gl4cProgramInterfaceQueryTests.cpp b/external/openglcts/modules/gl/gl4cProgramInterfaceQueryTests.cpp
index 8bfd856..648aea0 100644
--- a/external/openglcts/modules/gl/gl4cProgramInterfaceQueryTests.cpp
+++ b/external/openglcts/modules/gl/gl4cProgramInterfaceQueryTests.cpp
@@ -2748,8 +2748,8 @@
{
long error = NO_ERROR;
- GLint res;
- GLsizei len;
+ GLint res = 0;
+ GLsizei len = 0;
GLchar name[100] = { '\0' };
GLenum props[1] = { GL_NAME_LENGTH };
@@ -2833,8 +2833,8 @@
long error = NO_ERROR;
- GLint res;
- GLsizei len;
+ GLint res = 0;
+ GLsizei len = 0;
GLchar name[100] = { '\0' };
GLenum props[1] = { GL_TEXTURE_1D };
@@ -2895,8 +2895,8 @@
LinkProgram(program);
const GLuint sh = glCreateShader(GL_FRAGMENT_SHADER);
- GLint res;
- GLsizei len;
+ GLint res = 0;
+ GLsizei len = 0;
GLchar name[100] = { '\0' };
GLenum props[1] = { GL_OFFSET };
diff --git a/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp b/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp
index 4b61afa..b4130de 100644
--- a/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp
+++ b/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp
@@ -22,8 +22,8 @@
const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/";
static const RunParams khronos_mustpass_es_nocontext_first_cfg[] = {
- { glu::ApiType(), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
- { glu::ApiType(), "khr-master", DE_NULL, "unspecified", 2, DE_NULL, 113, 47 },
+ { glu::ApiType::es(2, 0), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
+ { glu::ApiType::es(3, 2), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
};
#endif // _GLCKHRONOSMUSTPASSESNOCONTEXT_HPP
diff --git a/external/openglcts/modules/runner/glcKhronosMustpassGlNocontext.hpp b/external/openglcts/modules/runner/glcKhronosMustpassGlNocontext.hpp
index 2a51d14..9939b61 100644
--- a/external/openglcts/modules/runner/glcKhronosMustpassGlNocontext.hpp
+++ b/external/openglcts/modules/runner/glcKhronosMustpassGlNocontext.hpp
@@ -22,8 +22,8 @@
const char* mustpassDir = "gl_cts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/";
static const RunParams khronos_mustpass_gl_nocontext_first_cfg[] = {
- { glu::ApiType(), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
- { glu::ApiType(), "khr-master", DE_NULL, "unspecified", 2, DE_NULL, 113, 47 },
+ { glu::ApiType::core(3, 0), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
+ { glu::ApiType::core(4, 5), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
};
#endif // _GLCKHRONOSMUSTPASSGLNOCONTEXT_HPP
diff --git a/external/openglcts/modules/runner/glcTestRunner.cpp b/external/openglcts/modules/runner/glcTestRunner.cpp
index afbd316..4b94179 100644
--- a/external/openglcts/modules/runner/glcTestRunner.cpp
+++ b/external/openglcts/modules/runner/glcTestRunner.cpp
@@ -363,14 +363,17 @@
}
}
-static void getTestRunsForNoContext(vector<TestRunParams>& runs, const ConfigList& configs, const RunParams* runParams,
+static void getTestRunsForNoContext(glu::ApiType type, vector<TestRunParams>& runs, const ConfigList& configs, const RunParams* runParams,
const int numRunParams, const char* mustpassDir)
{
vector<Config>::const_iterator cfgIter = configs.configs.begin();
for (int i = 0; i < numRunParams; ++i)
{
- const char* apiName = "noctx";
+ if (!glu::contextSupports(glu::ContextType(type), runParams[i].apiType))
+ continue;
+
+ const char* apiName = getApiName(runParams[i].apiType);
const int width = runParams[i].surfaceWidth;
const int height = runParams[i].surfaceHeight;
@@ -390,10 +393,10 @@
}
}
-static void getTestRunsForNoContextES(vector<TestRunParams>& runs, const ConfigList& configs)
+static void getTestRunsForNoContextES(glu::ApiType type, vector<TestRunParams>& runs, const ConfigList& configs)
{
#include "glcKhronosMustpassEsNocontext.hpp"
- getTestRunsForNoContext(runs, configs, khronos_mustpass_es_nocontext_first_cfg,
+ getTestRunsForNoContext(type, runs, configs, khronos_mustpass_es_nocontext_first_cfg,
DE_LENGTH_OF_ARRAY(khronos_mustpass_es_nocontext_first_cfg), mustpassDir);
}
@@ -401,7 +404,7 @@
{
getTestRunsForAOSPEGL(runs, configs);
getTestRunsForAOSPES(runs, configs, type);
- getTestRunsForNoContextES(runs, configs);
+ getTestRunsForNoContextES(type, runs, configs);
#include "glcKhronosMustpassEs.hpp"
@@ -439,16 +442,16 @@
}
}
-static void getTestRunsForNoContextGL(vector<TestRunParams>& runs, const ConfigList& configs)
+static void getTestRunsForNoContextGL(glu::ApiType type, vector<TestRunParams>& runs, const ConfigList& configs)
{
#include "glcKhronosMustpassGlNocontext.hpp"
- getTestRunsForNoContext(runs, configs, khronos_mustpass_gl_nocontext_first_cfg,
+ getTestRunsForNoContext(type, runs, configs, khronos_mustpass_gl_nocontext_first_cfg,
DE_LENGTH_OF_ARRAY(khronos_mustpass_gl_nocontext_first_cfg), mustpassDir);
}
static void getTestRunsForGL(glu::ApiType type, const ConfigList& configs, vector<TestRunParams>& runs)
{
- getTestRunsForNoContextGL(runs, configs);
+ getTestRunsForNoContextGL(type, runs, configs);
#include "glcKhronosMustpassGl.hpp"
for (vector<Config>::const_iterator cfgIter = configs.configs.begin(); cfgIter != configs.configs.end(); ++cfgIter)
diff --git a/external/openglcts/scripts/build_caselists.py b/external/openglcts/scripts/build_caselists.py
index 8c30f55..bf84af2 100644
--- a/external/openglcts/scripts/build_caselists.py
+++ b/external/openglcts/scripts/build_caselists.py
@@ -48,11 +48,11 @@
Module("KHR-GLES2", "GLES2"),
Module("KHR-GLES31", "GLES31"),
Module("KHR-GLES32", "GLES32"),
- Module("KHR-NoContext", "NOCTX"),
+ Module("KHR-NOCTX-ES2", "GLES2"),
+ Module("KHR-NOCTX-ES32","GLES32"),
Module("GTF-GLES2", "GLES2" ),
Module("GTF-GLES3", "GLES3" ),
Module("GTF-GLES31", "GLES31"),
- Module("KHR-NoContext", "NOCTX"),
Module("KHR-GL45", "GL45"),
Module("KHR-GL44", "GL44"),
Module("KHR-GL43", "GL43"),
@@ -73,6 +73,8 @@
Module("GTF-GL32", "GL32"),
Module("GTF-GL31", "GL31"),
Module("GTF-GL30", "GL30"),
+ Module("KHR-NOCTX-GL30","GL30"),
+ Module("KHR-NOCTX-GL45","GL45"),
]
GLCTS_BIN_NAME = "glcts"
GLCTS_DIR_NAME = "external/openglcts/modules/"
@@ -97,7 +99,10 @@
return os.path.join(buildCfg.getBuildDir(), GLCTS_DIR_NAME)
def getCaseListFileName (module, caseListType):
- return "%s-cases.%s" % (module.name, caseListType)
+ mname = module.name
+ if mname == "KHR-NOCTX-ES2" or mname == "KHR-NOCTX-ES32" or mname == "KHR-NOCTX-GL30" or mname == "KHR-NOCTX-GL45":
+ mname = "KHR-NoContext"
+ return "%s-cases.%s" % (mname, caseListType)
def getCaseListPath (buildCfg, module, caseListType):
workDir = getModulesPath(buildCfg)
diff --git a/external/openglcts/scripts/build_mustpass.py b/external/openglcts/scripts/build_mustpass.py
index 3a44d56..488d9de 100644
--- a/external/openglcts/scripts/build_mustpass.py
+++ b/external/openglcts/scripts/build_mustpass.py
@@ -88,7 +88,8 @@
ES3KHR_MODULE = getModuleByName("KHR-GLES3")
ES31KHR_MODULE = getModuleByName("KHR-GLES31")
ES32KHR_MODULE = getModuleByName("KHR-GLES32")
-NOCTXKHR_MODULE = getModuleByName("KHR-NoContext")
+NOCTX_ES2_KHR_MODULE = getModuleByName("KHR-NOCTX-ES2")
+NOCTX_ES32_KHR_MODULE = getModuleByName("KHR-NOCTX-ES32")
ES2GTF_MODULE = getModuleByName("GTF-GLES2")
ES3GTF_MODULE = getModuleByName("GTF-GLES3")
@@ -851,18 +852,22 @@
filters = [include("gles32-khr-master.txt")]),
])
-GLCTS_NOCTX_KHR_PKG_1CFG = Package(module = NOCTXKHR_MODULE, configurations = [
+GLCTS_NOCTX_ES2_KHR_PKG = Package(module = NOCTX_ES2_KHR_MODULE, configurations = [
# Master
Configuration(name = "khr-master",
surfacewidth = "64",
surfaceheight = "64",
baseseed = "1",
- filters = [include("noctx-khr-master.txt")]),
+ filters = [include("gles2-khr-master.txt")]),
+ ])
+
+GLCTS_NOCTX_ES32_KHR_PKG = Package(module = NOCTX_ES32_KHR_MODULE, configurations = [
+ # Master
Configuration(name = "khr-master",
- surfacewidth = "113",
- surfaceheight = "47",
- baseseed = "2",
- filters = [include("noctx-khr-master.txt")]),
+ surfacewidth = "64",
+ surfaceheight = "64",
+ baseseed = "1",
+ filters = [include("gles32-khr-master.txt")]),
])
ES_MUSTPASS_LISTS = [
@@ -931,7 +936,7 @@
Mustpass(project = CTS_KHR_MP_NOCTX_ES_PROJECT, version = "3.2.4.x", isCurrent=True,
- packages = [GLCTS_NOCTX_KHR_PKG_1CFG]),
+ packages = [GLCTS_NOCTX_ES2_KHR_PKG, GLCTS_NOCTX_ES32_KHR_PKG]),
Mustpass(project = CTS_AOSP_MP_ES_PROJECT, version = "3.2.4.x", isCurrent=True,
packages = [GLCTS_3_2_3_GLES2_PKG, GLCTS_3_2_3_GLES3_PKG, GLCTS_3_2_3_GLES31_PKG]),
@@ -953,7 +958,7 @@
]),
Mustpass(project = CTS_KHR_MP_NOCTX_ES_PROJECT, version = "master", isCurrent=False,
- packages = [GLCTS_NOCTX_KHR_PKG_1CFG]),
+ packages = [GLCTS_NOCTX_ES2_KHR_PKG, GLCTS_NOCTX_ES32_KHR_PKG]),
Mustpass(project = CTS_AOSP_MP_ES_PROJECT, version = "master", isCurrent=False,
packages = [MASTER_GLES2_PKG, MASTER_GLES3_PKG, MASTER_GLES31_PKG]),
@@ -1004,6 +1009,27 @@
('GTF-GL30', ['gtf-master', [include('gl30-gtf-master.txt')]])
])
+NOCTX_GL30_KHR_MODULE = getModuleByName("KHR-NOCTX-GL30")
+NOCTX_GL45_KHR_MODULE = getModuleByName("KHR-NOCTX-GL45")
+
+GLCTS_NOCTX_GL30_KHR_PKG = Package(module = NOCTX_GL30_KHR_MODULE, configurations = [
+ # Master
+ Configuration(name = "khr-master",
+ surfacewidth = "64",
+ surfaceheight = "64",
+ baseseed = "1",
+ filters = [include("gl30-khr-master.txt")]),
+ ])
+
+GLCTS_NOCTX_GL45_KHR_PKG = Package(module = NOCTX_GL45_KHR_MODULE, configurations = [
+ # Master
+ Configuration(name = "khr-master",
+ surfacewidth = "64",
+ surfaceheight = "64",
+ baseseed = "1",
+ filters = [include("gl45-khr-master.txt")]),
+ ])
+
def generateGLMustpass():
gl_packages = []
for packageName in GL_MODULES:
@@ -1031,7 +1057,7 @@
gl_packages.append(pkg1)
mustpass = [Mustpass(project = GL_CTS_KHR_MP_PROJECT, version = "4.5.5.x", isCurrent=True, packages = gl_packages),
- Mustpass(project = GL_CTS_NOCTX_PROJECT, version = "4.5.5.x", isCurrent=True, packages = [GLCTS_NOCTX_KHR_PKG_1CFG]),
+ Mustpass(project = GL_CTS_NOCTX_PROJECT, version = "4.5.5.x", isCurrent=True, packages = [GLCTS_NOCTX_GL30_KHR_PKG, GLCTS_NOCTX_GL45_KHR_PKG]),
]
return mustpass
diff --git a/external/openglcts/scripts/mustpass.py b/external/openglcts/scripts/mustpass.py
index c8292c8..c73b82d 100644
--- a/external/openglcts/scripts/mustpass.py
+++ b/external/openglcts/scripts/mustpass.py
@@ -285,7 +285,7 @@
return "glu::ApiType::core(3, 1)"
if apiName == "GL30":
return "glu::ApiType::core(3, 0)"
- if apiName == "EGL" or apiName == "NOCTX":
+ if apiName == "EGL":
return "glu::ApiType()"
raise Exception("Unknown API %s" % apiName)
diff --git a/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
index 7166e14..e9f311d 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
@@ -82,6 +82,7 @@
ATOMIC_OPERATION_OR,
ATOMIC_OPERATION_XOR,
ATOMIC_OPERATION_EXCHANGE,
+ ATOMIC_OPERATION_COMPARE_EXCHANGE,
ATOMIC_OPERATION_LAST
};
@@ -126,6 +127,7 @@
case ATOMIC_OPERATION_XOR:
return string("(" + x + "*" + x + " + " + y + "*" + y + " + " + z + "*" + z + ")");
case ATOMIC_OPERATION_EXCHANGE:
+ case ATOMIC_OPERATION_COMPARE_EXCHANGE:
return string("((" + z + "*" + toString(gridSize.x()) + " + " + x + ")*" + toString(gridSize.y()) + " + " + y + ")");
default:
DE_ASSERT(false);
@@ -137,13 +139,14 @@
{
switch (op)
{
- case ATOMIC_OPERATION_ADD: return string("add");
- case ATOMIC_OPERATION_MIN: return string("min");
- case ATOMIC_OPERATION_MAX: return string("max");
- case ATOMIC_OPERATION_AND: return string("and");
- case ATOMIC_OPERATION_OR: return string("or");
- case ATOMIC_OPERATION_XOR: return string("xor");
- case ATOMIC_OPERATION_EXCHANGE: return string("exchange");
+ case ATOMIC_OPERATION_ADD: return string("add");
+ case ATOMIC_OPERATION_MIN: return string("min");
+ case ATOMIC_OPERATION_MAX: return string("max");
+ case ATOMIC_OPERATION_AND: return string("and");
+ case ATOMIC_OPERATION_OR: return string("or");
+ case ATOMIC_OPERATION_XOR: return string("xor");
+ case ATOMIC_OPERATION_EXCHANGE: return string("exchange");
+ case ATOMIC_OPERATION_COMPARE_EXCHANGE: return string("compare_exchange");
default:
DE_ASSERT(false);
return DE_NULL;
@@ -154,13 +157,14 @@
{
switch (op)
{
- case ATOMIC_OPERATION_ADD: return string("imageAtomicAdd");
- case ATOMIC_OPERATION_MIN: return string("imageAtomicMin");
- case ATOMIC_OPERATION_MAX: return string("imageAtomicMax");
- case ATOMIC_OPERATION_AND: return string("imageAtomicAnd");
- case ATOMIC_OPERATION_OR: return string("imageAtomicOr");
- case ATOMIC_OPERATION_XOR: return string("imageAtomicXor");
- case ATOMIC_OPERATION_EXCHANGE: return string("imageAtomicExchange");
+ case ATOMIC_OPERATION_ADD: return string("imageAtomicAdd");
+ case ATOMIC_OPERATION_MIN: return string("imageAtomicMin");
+ case ATOMIC_OPERATION_MAX: return string("imageAtomicMax");
+ case ATOMIC_OPERATION_AND: return string("imageAtomicAnd");
+ case ATOMIC_OPERATION_OR: return string("imageAtomicOr");
+ case ATOMIC_OPERATION_XOR: return string("imageAtomicXor");
+ case ATOMIC_OPERATION_EXCHANGE: return string("imageAtomicExchange");
+ case ATOMIC_OPERATION_COMPARE_EXCHANGE: return string("imageAtomicCompSwap");
default:
DE_ASSERT(false);
return DE_NULL;
@@ -172,13 +176,14 @@
switch (op)
{
// \note 18 is just an arbitrary small nonzero value.
- case ATOMIC_OPERATION_ADD: return 18;
- case ATOMIC_OPERATION_MIN: return (1 << 15) - 1;
- case ATOMIC_OPERATION_MAX: return 18;
- case ATOMIC_OPERATION_AND: return (1 << 15) - 1;
- case ATOMIC_OPERATION_OR: return 18;
- case ATOMIC_OPERATION_XOR: return 18;
- case ATOMIC_OPERATION_EXCHANGE: return 18;
+ case ATOMIC_OPERATION_ADD: return 18;
+ case ATOMIC_OPERATION_MIN: return (1 << 15) - 1;
+ case ATOMIC_OPERATION_MAX: return 18;
+ case ATOMIC_OPERATION_AND: return (1 << 15) - 1;
+ case ATOMIC_OPERATION_OR: return 18;
+ case ATOMIC_OPERATION_XOR: return 18;
+ case ATOMIC_OPERATION_EXCHANGE: return 18;
+ case ATOMIC_OPERATION_COMPARE_EXCHANGE: return 18;
default:
DE_ASSERT(false);
return -1;
@@ -202,6 +207,7 @@
case ATOMIC_OPERATION_XOR:
return x*x + y*y + z*z;
case ATOMIC_OPERATION_EXCHANGE:
+ case ATOMIC_OPERATION_COMPARE_EXCHANGE:
return (z*gridSize.x() + x)*gridSize.y() + y;
default:
DE_ASSERT(false);
@@ -225,13 +231,14 @@
{
switch (op)
{
- case ATOMIC_OPERATION_ADD: return a + b;
- case ATOMIC_OPERATION_MIN: return de::min(a, b);
- case ATOMIC_OPERATION_MAX: return de::max(a, b);
- case ATOMIC_OPERATION_AND: return a & b;
- case ATOMIC_OPERATION_OR: return a | b;
- case ATOMIC_OPERATION_XOR: return a ^ b;
- case ATOMIC_OPERATION_EXCHANGE: return b;
+ case ATOMIC_OPERATION_ADD: return a + b;
+ case ATOMIC_OPERATION_MIN: return de::min(a, b);
+ case ATOMIC_OPERATION_MAX: return de::max(a, b);
+ case ATOMIC_OPERATION_AND: return a & b;
+ case ATOMIC_OPERATION_OR: return a | b;
+ case ATOMIC_OPERATION_XOR: return a ^ b;
+ case ATOMIC_OPERATION_EXCHANGE: return b;
+ case ATOMIC_OPERATION_COMPARE_EXCHANGE: return (a == 18) ? b : a;
default:
DE_ASSERT(false);
return -1;
@@ -290,7 +297,8 @@
const string atomicArgExpr = (uintFormat ? "uint" : intFormat ? "int" : "float")
+ getAtomicFuncArgumentShaderStr(m_operation, "gx", "gy", "gz", IVec3(NUM_INVOCATIONS_PER_PIXEL*gridSize.x(), gridSize.y(), gridSize.z()));
- const string atomicInvocation = getAtomicOperationShaderFuncName(m_operation) + "(u_resultImage, " + atomicCoord + ", " + atomicArgExpr + ")";
+ const string compareExchangeStr = (m_operation == ATOMIC_OPERATION_COMPARE_EXCHANGE) ? ", 18" + string(uintFormat ? "u" : "") : "";
+ const string atomicInvocation = getAtomicOperationShaderFuncName(m_operation) + "(u_resultImage, " + atomicCoord + compareExchangeStr + ", " + atomicArgExpr + ")";
const string shaderImageFormatStr = getShaderImageFormatQualifier(m_format);
const string shaderImageTypeStr = getShaderImageType(m_format, m_imageType);
@@ -364,7 +372,8 @@
const string atomicArgExpr = (uintFormat ? "uint" : intFormat ? "int" : "float")
+ getAtomicFuncArgumentShaderStr(m_operation, "gx", "gy", "gz", IVec3(NUM_INVOCATIONS_PER_PIXEL*gridSize.x(), gridSize.y(), gridSize.z()));
- const string atomicInvocation = getAtomicOperationShaderFuncName(m_operation) + "(u_resultImage, " + atomicCoord + ", " + atomicArgExpr + ")";
+ const string compareExchangeStr = (m_operation == ATOMIC_OPERATION_COMPARE_EXCHANGE) ? ", 18" + string(uintFormat ? "u" : "") : "";
+ const string atomicInvocation = getAtomicOperationShaderFuncName(m_operation) + "(u_resultImage, " + atomicCoord + compareExchangeStr + ", " + atomicArgExpr + ")";
const string shaderImageFormatStr = getShaderImageFormatQualifier(m_format);
const string shaderImageTypeStr = getShaderImageType(m_format, m_imageType);
@@ -693,6 +702,20 @@
if (!matchFound)
return false;
}
+ else if (m_operation == ATOMIC_OPERATION_COMPARE_EXCHANGE)
+ {
+ // Check if the end result equals one of the atomic args.
+ bool matchFound = false;
+
+ for (deInt32 i = 0; i < static_cast<deInt32>(NUM_INVOCATIONS_PER_PIXEL) && !matchFound; i++)
+ {
+ const IVec3 gid(x + i*gridSize.x(), y, z);
+ matchFound = (resultValue == getAtomicFuncArgument(m_operation, gid, extendedGridSize));
+ }
+
+ if (!matchFound)
+ return false;
+ }
else
DE_ASSERT(false);
}
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt b/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
index 31c82a4..5717740 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
@@ -5,6 +5,8 @@
set(DEQP_VK_SPIRV_ASSEMBLY_SRCS
vktSpvAsm16bitStorageTests.cpp
vktSpvAsm16bitStorageTests.hpp
+ vktSpvAsmUboMatrixPaddingTests.cpp
+ vktSpvAsmUboMatrixPaddingTests.hpp
vktSpvAsmComputeShaderCase.cpp
vktSpvAsmComputeShaderCase.hpp
vktSpvAsmComputeShaderTestUtil.cpp
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp
index c727aa3..12f837b 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp
@@ -100,6 +100,11 @@
flushMappedMemoryRange(vkdi, device, destAlloc->getMemory(), destAlloc->getOffset(), numBytes);
}
+void invalidateMemory (const DeviceInterface& vkdi, const VkDevice& device, Allocation* srcAlloc, size_t numBytes)
+{
+ invalidateMappedMemoryRange(vkdi, device, srcAlloc->getMemory(), srcAlloc->getOffset(), numBytes);
+}
+
/*--------------------------------------------------------------------*//*!
* \brief Create a descriptor set layout with the given descriptor types
*
@@ -455,6 +460,12 @@
VK_CHECK(vkdi.queueSubmit(queue, 1, &submitInfo, *cmdCompleteFence));
VK_CHECK(vkdi.waitForFences(device, 1, &cmdCompleteFence.get(), 0u, infiniteTimeout)); // \note: timeout is failure
+ // Invalidate output memory ranges before checking on host.
+ for (size_t outputNdx = 0; outputNdx < m_shaderSpec.outputs.size(); ++outputNdx)
+ {
+ invalidateMemory(vkdi, device, outputAllocs[outputNdx].get(), m_shaderSpec.outputs[outputNdx]->getNumBytes());
+ }
+
// Check output.
if (m_shaderSpec.verifyIO)
{
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
index a796f63..eb32c24 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
@@ -51,6 +51,7 @@
#include "tcuStringTemplate.hpp"
#include "vktSpvAsm16bitStorageTests.hpp"
+#include "vktSpvAsmUboMatrixPaddingTests.hpp"
#include "vktSpvAsmComputeShaderCase.hpp"
#include "vktSpvAsmComputeShaderTestUtil.hpp"
#include "vktSpvAsmGraphicsShaderTestUtil.hpp"
@@ -7840,6 +7841,7 @@
}
computeTests->addChild(create16BitStorageComputeGroup(testCtx));
+ computeTests->addChild(createUboMatrixPaddingComputeGroup(testCtx));
computeTests->addChild(createVariablePointersComputeGroup(testCtx));
graphicsTests->addChild(createOpNopTests(testCtx));
graphicsTests->addChild(createOpSourceTests(testCtx));
@@ -7875,6 +7877,7 @@
}
graphicsTests->addChild(create16BitStorageGraphicsGroup(testCtx));
+ graphicsTests->addChild(createUboMatrixPaddingGraphicsGroup(testCtx));
graphicsTests->addChild(createVariablePointersGraphicsGroup(testCtx));
instructionTests->addChild(computeTests.release());
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUboMatrixPaddingTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUboMatrixPaddingTests.cpp
new file mode 100644
index 0000000..fbe2cac
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUboMatrixPaddingTests.cpp
@@ -0,0 +1,265 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2017 Google Inc.
+ *
+ * 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.
+ *
+ *//*!
+ * \file
+ * \brief SPIR-V Assembly Tests for UBO matrix padding.
+ *//*--------------------------------------------------------------------*/
+
+#include "vktSpvAsmUboMatrixPaddingTests.hpp"
+#include "vktSpvAsmComputeShaderCase.hpp"
+#include "vktSpvAsmComputeShaderTestUtil.hpp"
+#include "vktSpvAsmGraphicsShaderTestUtil.hpp"
+
+namespace vkt
+{
+namespace SpirVAssembly
+{
+
+using namespace vk;
+using std::map;
+using std::string;
+using std::vector;
+using tcu::IVec3;
+using tcu::RGBA;
+using tcu::Vec4;
+
+namespace
+{
+
+void addComputeUboMatrixPaddingTest (tcu::TestCaseGroup* group)
+{
+ tcu::TestContext& testCtx = group->getTestContext();
+ de::Random rnd (deStringHash(group->getName()));
+ const int numElements = 128;
+
+ // Read input UBO containing and array of mat2x2 using no padding inside matrix. Output
+ // into output buffer containing floats. The input and output buffer data should match.
+ const string shaderSource =
+ " OpCapability Shader\n"
+ " %1 = OpExtInstImport \"GLSL.std.450\"\n"
+ " OpMemoryModel Logical GLSL450\n"
+ " OpEntryPoint GLCompute %main \"main\" %id\n"
+ " OpExecutionMode %main LocalSize 1 1 1\n"
+ " OpSource GLSL 430\n"
+ " OpDecorate %id BuiltIn GlobalInvocationId\n"
+ " OpDecorate %_arr_v4 ArrayStride 16\n"
+ " OpMemberDecorate %Output 0 Offset 0\n"
+ " OpDecorate %Output BufferBlock\n"
+ " OpDecorate %dataOutput DescriptorSet 0\n"
+ " OpDecorate %dataOutput Binding 1\n"
+ " OpDecorate %_arr_mat2v2 ArrayStride 16\n"
+ " OpMemberDecorate %Input 0 ColMajor\n"
+ " OpMemberDecorate %Input 0 Offset 0\n"
+ " OpMemberDecorate %Input 0 MatrixStride 8\n"
+ " OpDecorate %Input Block\n"
+ " OpDecorate %dataInput DescriptorSet 0\n"
+ " OpDecorate %dataInput Binding 0\n"
+ " %void = OpTypeVoid\n"
+ " %3 = OpTypeFunction %void\n"
+ " %u32 = OpTypeInt 32 0\n"
+ " %_ptr_Function_uint = OpTypePointer Function %u32\n"
+ " %v3uint = OpTypeVector %u32 3\n"
+ " %_ptr_Input_v3uint = OpTypePointer Input %v3uint\n"
+ " %id = OpVariable %_ptr_Input_v3uint Input\n"
+ " %i32 = OpTypeInt 32 1\n"
+ " %int_0 = OpConstant %i32 0\n"
+ " %int_1 = OpConstant %i32 1\n"
+ " %uint_0 = OpConstant %u32 0\n"
+ " %uint_1 = OpConstant %u32 1\n"
+ " %uint_2 = OpConstant %u32 2\n"
+ " %uint_3 = OpConstant %u32 3\n"
+ " %_ptr_Input_uint = OpTypePointer Input %u32\n"
+ " %f32 = OpTypeFloat 32\n"
+ " %v4float = OpTypeVector %f32 4\n"
+ " %uint_128 = OpConstant %u32 128\n"
+ " %_arr_v4 = OpTypeArray %v4float %uint_128\n"
+ " %Output = OpTypeStruct %_arr_v4\n"
+ "%_ptr_Uniform_Output = OpTypePointer Uniform %Output\n"
+ " %dataOutput = OpVariable %_ptr_Uniform_Output Uniform\n"
+ " %v2float = OpTypeVector %f32 2\n"
+ " %mat2v2float = OpTypeMatrix %v2float 2\n"
+ " %_arr_mat2v2 = OpTypeArray %mat2v2float %uint_128\n"
+ " %Input = OpTypeStruct %_arr_mat2v2\n"
+ " %_ptr_Uniform_Input = OpTypePointer Uniform %Input\n"
+ " %dataInput = OpVariable %_ptr_Uniform_Input Uniform\n"
+ " %_ptr_Uniform_float = OpTypePointer Uniform %f32\n"
+ " %main = OpFunction %void None %3\n"
+ " %5 = OpLabel\n"
+ " %i = OpVariable %_ptr_Function_uint Function\n"
+ " %14 = OpAccessChain %_ptr_Input_uint %id %uint_0\n"
+ " %15 = OpLoad %u32 %14\n"
+ " OpStore %i %15\n"
+ " %idx = OpLoad %u32 %i\n"
+ " %34 = OpAccessChain %_ptr_Uniform_float %dataInput %int_0 %idx %int_0 %uint_0\n"
+ " %35 = OpLoad %f32 %34\n"
+ " %36 = OpAccessChain %_ptr_Uniform_float %dataOutput %int_0 %idx %uint_0\n"
+ " OpStore %36 %35\n"
+ " %40 = OpAccessChain %_ptr_Uniform_float %dataInput %int_0 %idx %int_0 %uint_1\n"
+ " %41 = OpLoad %f32 %40\n"
+ " %42 = OpAccessChain %_ptr_Uniform_float %dataOutput %int_0 %idx %uint_1\n"
+ " OpStore %42 %41\n"
+ " %46 = OpAccessChain %_ptr_Uniform_float %dataInput %int_0 %idx %int_1 %uint_0\n"
+ " %47 = OpLoad %f32 %46\n"
+ " %49 = OpAccessChain %_ptr_Uniform_float %dataOutput %int_0 %idx %uint_2\n"
+ " OpStore %49 %47\n"
+ " %52 = OpAccessChain %_ptr_Uniform_float %dataInput %int_0 %idx %int_1 %uint_1\n"
+ " %53 = OpLoad %f32 %52\n"
+ " %55 = OpAccessChain %_ptr_Uniform_float %dataOutput %int_0 %idx %uint_3\n"
+ " OpStore %55 %53\n"
+ " OpReturn\n"
+ " OpFunctionEnd\n";
+
+ vector<tcu::Vec4> inputData;
+ ComputeShaderSpec spec;
+
+ inputData.reserve(numElements);
+ for (deUint32 numIdx = 0; numIdx < numElements; ++numIdx)
+ inputData.push_back(tcu::Vec4(rnd.getFloat(), rnd.getFloat(), rnd.getFloat(), rnd.getFloat()));
+
+ spec.assembly = shaderSource;
+ spec.numWorkGroups = IVec3(numElements, 1, 1);
+ spec.inputTypes[0] = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+
+ spec.inputs.push_back(BufferSp(new Vec4Buffer(inputData)));
+ // Shader is expected to pass the input data by treating the input vec4 as mat2x2
+ spec.outputs.push_back(BufferSp(new Vec4Buffer(inputData)));
+
+ group->addChild(new SpvAsmComputeShaderCase(testCtx, "mat2x2", "Tests mat2x2 member in UBO struct without padding (treated as vec4).", spec));
+ }
+}
+
+void addGraphicsUboMatrixPaddingTest (tcu::TestCaseGroup* group)
+{
+ de::Random rnd (deStringHash(group->getName()));
+ map<string, string> fragments;
+ const deUint32 numDataPoints = 128;
+ RGBA defaultColors[4];
+ GraphicsResources resources;
+ vector<tcu::Vec4> inputData;
+
+ inputData.reserve(numDataPoints);
+ for (deUint32 numIdx = 0; numIdx < numDataPoints; ++numIdx)
+ inputData.push_back(tcu::Vec4(rnd.getFloat(), rnd.getFloat(), rnd.getFloat(), rnd.getFloat()));
+
+ resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, BufferSp(new Vec4Buffer(inputData))));
+ // Shader is expected to pass the input data by treating the input vec4 as mat2x2
+ resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Vec4Buffer(inputData))));
+
+ getDefaultColors(defaultColors);
+
+ fragments["pre_main"] =
+ " %uint_128 = OpConstant %u32 128\n"
+ " %_arr_v4f_uint_128 = OpTypeArray %v4f32 %uint_128\n"
+ " %Output = OpTypeStruct %_arr_v4f_uint_128\n"
+ " %_ptr_Uniform_Output = OpTypePointer Uniform %Output\n"
+ " %dataOutput = OpVariable %_ptr_Uniform_Output Uniform\n"
+ " %mat2v2f = OpTypeMatrix %v2f32 2\n"
+ "%_arr_mat2v2f_uint_128 = OpTypeArray %mat2v2f %uint_128\n"
+ " %Input = OpTypeStruct %_arr_mat2v2f_uint_128\n"
+ " %_ptr_Uniform_Input = OpTypePointer Uniform %Input\n"
+ " %dataInput = OpVariable %_ptr_Uniform_Input Uniform\n"
+ " %_ptr_Uniform_f = OpTypePointer Uniform %f32\n"
+ " %c_i32_128 = OpConstant %i32 128\n";
+
+ fragments["decoration"] =
+ " OpDecorate %_arr_v4f_uint_128 ArrayStride 16\n"
+ " OpMemberDecorate %Output 0 Offset 0\n"
+ " OpDecorate %Output BufferBlock\n"
+ " OpDecorate %dataOutput DescriptorSet 0\n"
+ " OpDecorate %dataOutput Binding 1\n"
+ " OpDecorate %_arr_mat2v2f_uint_128 ArrayStride 16\n"
+ " OpMemberDecorate %Input 0 ColMajor\n"
+ " OpMemberDecorate %Input 0 Offset 0\n"
+ " OpMemberDecorate %Input 0 MatrixStride 8\n"
+ " OpDecorate %Input Block\n"
+ " OpDecorate %dataInput DescriptorSet 0\n"
+ " OpDecorate %dataInput Binding 0\n";
+
+ // Read input UBO containing and array of mat2x2 using no padding inside matrix. Output
+ // into output buffer containing floats. The input and output buffer data should match.
+ // The whole array is handled inside a for loop.
+ fragments["testfun"] =
+ " %test_code = OpFunction %v4f32 None %v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+
+ " %entry = OpLabel\n"
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %15 = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %15 %c_i32_128\n"
+ " OpLoopMerge %merge %inc None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %30 = OpLoad %i32 %i\n"
+ " %34 = OpAccessChain %_ptr_Uniform_f %dataInput %c_i32_0 %30 %c_i32_0 %c_u32_0\n"
+ " %35 = OpLoad %f32 %34\n"
+ " %36 = OpAccessChain %_ptr_Uniform_f %dataOutput %c_i32_0 %30 %c_u32_0\n"
+ " OpStore %36 %35\n"
+ " %40 = OpAccessChain %_ptr_Uniform_f %dataInput %c_i32_0 %30 %c_i32_0 %c_u32_1\n"
+ " %41 = OpLoad %f32 %40\n"
+ " %42 = OpAccessChain %_ptr_Uniform_f %dataOutput %c_i32_0 %30 %c_u32_1\n"
+ " OpStore %42 %41\n"
+ " %46 = OpAccessChain %_ptr_Uniform_f %dataInput %c_i32_0 %30 %c_i32_1 %c_u32_0\n"
+ " %47 = OpLoad %f32 %46\n"
+ " %49 = OpAccessChain %_ptr_Uniform_f %dataOutput %c_i32_0 %30 %c_u32_2\n"
+ " OpStore %49 %47\n"
+ " %52 = OpAccessChain %_ptr_Uniform_f %dataInput %c_i32_0 %30 %c_i32_1 %c_u32_1\n"
+ " %53 = OpLoad %f32 %52\n"
+ " %55 = OpAccessChain %_ptr_Uniform_f %dataOutput %c_i32_0 %30 %c_u32_3\n"
+ " OpStore %55 %53\n"
+ " OpBranch %inc\n"
+
+ " %inc = OpLabel\n"
+ " %37 = OpLoad %i32 %i\n"
+ " %39 = OpIAdd %i32 %37 %c_i32_1\n"
+ " OpStore %i %39\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpReturnValue %param\n"
+
+ " OpFunctionEnd\n";
+
+ resources.inputs.back().first = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+
+ createTestsForAllStages("mat2x2", defaultColors, defaultColors, fragments, resources, vector<string>(), group);
+}
+
+tcu::TestCaseGroup* createUboMatrixPaddingComputeGroup (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "ubo_padding", "Compute tests for UBO struct member packing."));
+ addComputeUboMatrixPaddingTest(group.get());
+
+ return group.release();
+}
+
+tcu::TestCaseGroup* createUboMatrixPaddingGraphicsGroup (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "ubo_padding", "Graphics tests for UBO struct member packing."));
+ addGraphicsUboMatrixPaddingTest(group.get());
+
+ return group.release();
+}
+
+} // SpirVAssembly
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUboMatrixPaddingTests.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUboMatrixPaddingTests.hpp
new file mode 100644
index 0000000..5fdf719
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUboMatrixPaddingTests.hpp
@@ -0,0 +1,40 @@
+#ifndef _VKTSPVASMUBOMATRIXPADDINGTESTS_HPP
+#define _VKTSPVASMUBOMATRIXPADDINGTESTS_HPP
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2017 Google Inc.
+ *
+ * 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.
+ *
+ *//*!
+ * \file
+ * \brief SPIR-V Assembly Tests for UBO matrix padding.
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestCase.hpp"
+
+namespace vkt
+{
+namespace SpirVAssembly
+{
+
+tcu::TestCaseGroup* createUboMatrixPaddingComputeGroup (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createUboMatrixPaddingGraphicsGroup (tcu::TestContext& testCtx);
+
+} // SpirVAssembly
+} // vkt
+
+#endif // _VKTSPVASMUBOMATRIXPADDINGTESTS_HPP
diff --git a/external/vulkancts/mustpass/1.0.3/vk-default.txt b/external/vulkancts/mustpass/1.0.3/vk-default.txt
index a35cf1f..05d1595 100644
--- a/external/vulkancts/mustpass/1.0.3/vk-default.txt
+++ b/external/vulkancts/mustpass/1.0.3/vk-default.txt
@@ -161948,6 +161948,7 @@
dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.scalar_uint
dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.vector_sint
dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.vector_uint
+dEQP-VK.spirv_assembly.instruction.compute.ubo_padding.mat2x2
dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opselect_single_buffer
dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opfunctioncall_single_buffer
dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opphi_single_buffer
@@ -163965,6 +163966,11 @@
dEQP-VK.spirv_assembly.instruction.graphics.16bit_storage.push_constant_int_16_to_32.uint_vector_tesse
dEQP-VK.spirv_assembly.instruction.graphics.16bit_storage.push_constant_int_16_to_32.uint_vector_geom
dEQP-VK.spirv_assembly.instruction.graphics.16bit_storage.push_constant_int_16_to_32.uint_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_frag
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.reads_opselect_single_buffer_vert
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.reads_opselect_single_buffer_tessc
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.reads_opselect_single_buffer_tesse
@@ -199448,6 +199454,34 @@
dEQP-VK.image.atomic_operations.exchange.cube_array.r32ui_intermediate_values
dEQP-VK.image.atomic_operations.exchange.cube_array.r32i_end_result
dEQP-VK.image.atomic_operations.exchange.cube_array.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32i_intermediate_values
dEQP-VK.image.texel_view_compatible.compute.image_load.bc1_rgb_unorm_block.r16g16b16a16_unorm
dEQP-VK.image.texel_view_compatible.compute.image_load.bc1_rgb_unorm_block.r16g16b16a16_snorm
dEQP-VK.image.texel_view_compatible.compute.image_load.bc1_rgb_unorm_block.r16g16b16a16_uscaled
diff --git a/framework/common/tcuFuzzyImageCompare.cpp b/framework/common/tcuFuzzyImageCompare.cpp
index 596ab83..4e76476 100644
--- a/framework/common/tcuFuzzyImageCompare.cpp
+++ b/framework/common/tcuFuzzyImageCompare.cpp
@@ -318,7 +318,7 @@
for (int y = 1; y < height-1; y++)
{
- for (int x = 1; x < width-1; x += params.maxSampleSkip > 0 ? (int)rnd.getInt(0, params.maxSampleSkip) : 1)
+ for (int x = 1; x < width-1; x += 1 + (int)rnd.getInt(0, params.maxSampleSkip))
{
const deUint32 minDist2RefToCmp = distSquaredToNeighbor<4>(rnd, readUnorm8<4>(refAccess, x, y), cmpAccess, x, y);
const deUint32 minDist2CmpToRef = distSquaredToNeighbor<4>(rnd, readUnorm8<4>(cmpAccess, x, y), refAccess, x, y);
diff --git a/modules/egl/teglBufferAgeTests.cpp b/modules/egl/teglBufferAgeTests.cpp
index 7aac350..e1a3dc2 100644
--- a/modules/egl/teglBufferAgeTests.cpp
+++ b/modules/egl/teglBufferAgeTests.cpp
@@ -345,6 +345,10 @@
const ColoredRect& coloredRect = frame.draws[drawNdx].rect;
if (frame.draws[drawNdx].drawType == BufferAgeTest::DRAWTYPE_GLES2_RENDER || frame.draws[drawNdx].drawType == BufferAgeTest::DRAWTYPE_GLES2_CLEAR)
{
+ // tcu does not support degenerate subregions. Since they correspond to no-op rendering, just skip them.
+ if (coloredRect.bottomLeft.x() == coloredRect.topRight.x() || coloredRect.bottomLeft.y() == coloredRect.topRight.y())
+ continue;
+
const tcu::UVec4 color(coloredRect.color.x(), coloredRect.color.y(), coloredRect.color.z(), 255);
tcu::clear(tcu::getSubregion(target->getAccess(), coloredRect.bottomLeft.x(), coloredRect.bottomLeft.y(),
coloredRect.topRight.x()-coloredRect.bottomLeft.x(), coloredRect.topRight.y()-coloredRect.bottomLeft.y()), color);
diff --git a/modules/egl/teglPartialUpdateTests.cpp b/modules/egl/teglPartialUpdateTests.cpp
index 097701a..a70374a 100644
--- a/modules/egl/teglPartialUpdateTests.cpp
+++ b/modules/egl/teglPartialUpdateTests.cpp
@@ -334,6 +334,10 @@
const ColoredRect& coloredRect = frame.draws[drawNdx].rect;
if (frame.draws[drawNdx].drawType == PartialUpdateTest::DRAWTYPE_GLES2_RENDER || frame.draws[drawNdx].drawType == PartialUpdateTest::DRAWTYPE_GLES2_CLEAR)
{
+ // tcu does not support degenerate subregions. Since they correspond to no-op rendering, just skip them.
+ if (coloredRect.bottomLeft.x() == coloredRect.topRight.x() || coloredRect.bottomLeft.y() == coloredRect.topRight.y())
+ continue;
+
const tcu::UVec4 color(coloredRect.color.x(), coloredRect.color.y(), coloredRect.color.z(), 255);
tcu::clear(tcu::getSubregion(target->getAccess(), coloredRect.bottomLeft.x(), coloredRect.bottomLeft.y(),
coloredRect.topRight.x()-coloredRect.bottomLeft.x(), coloredRect.topRight.y()-coloredRect.bottomLeft.y()), color);
diff --git a/modules/gles31/functional/es31fDrawElementsBaseVertexTests.cpp b/modules/gles31/functional/es31fDrawElementsBaseVertexTests.cpp
index 11764c1..7b47e13 100644
--- a/modules/gles31/functional/es31fDrawElementsBaseVertexTests.cpp
+++ b/modules/gles31/functional/es31fDrawElementsBaseVertexTests.cpp
@@ -218,6 +218,13 @@
void VertexIDCase::init (void)
{
+ if (m_method == deqp::gls::DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_BASEVERTEX ||
+ m_method == gls::DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_RANGED_BASEVERTEX ||
+ m_method == gls::DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_INSTANCED_BASEVERTEX)
+ {
+ TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+ }
+
m_testCtx.getLog() << TestLog::Message
<< "gl_VertexID should be the index of the vertex that is being passed to the shader. i.e. indices[i] + basevertex"
<< TestLog::EndMessage;
diff --git a/modules/gles31/functional/es31fNegativeSampleVariablesTests.cpp b/modules/gles31/functional/es31fNegativeSampleVariablesTests.cpp
index ea68a5a..54b77da 100644
--- a/modules/gles31/functional/es31fNegativeSampleVariablesTests.cpp
+++ b/modules/gles31/functional/es31fNegativeSampleVariablesTests.cpp
@@ -137,6 +137,12 @@
{
checkSupported(ctx);
+ if ((!ctx.isExtensionSupported("GL_EXT_tessellation_shader") && !ctx.isExtensionSupported("GL_OES_tessellation_shader")) ||
+ (!ctx.isExtensionSupported("GL_EXT_geometry_shader") && !ctx.isExtensionSupported("GL_OES_geometry_shader")))
+ {
+ TCU_THROW(NotSupportedError, "tessellation and geometry shader extensions not supported");
+ }
+
std::ostringstream shader;
struct testConfig
@@ -356,4 +362,4 @@
} // NegativeTestShared
} // Functional
} // gles31
-} // deqp
\ No newline at end of file
+} // deqp
diff --git a/modules/gles31/functional/es31fShaderFramebufferFetchTests.cpp b/modules/gles31/functional/es31fShaderFramebufferFetchTests.cpp
index 9d77831..c9b0c69 100644
--- a/modules/gles31/functional/es31fShaderFramebufferFetchTests.cpp
+++ b/modules/gles31/functional/es31fShaderFramebufferFetchTests.cpp
@@ -1144,7 +1144,7 @@
private:
void create2DTextureArrayMipMaps (const vector<tcu::Vec4>& colors);
tcu::TextureLevel genReferenceTexture (int level, const vector<tcu::Vec4>& colors, const tcu::Vec4& uniformColor);
- void genReferenceMipmap (int level, const tcu::Vec4& color, tcu::TextureLevel& reference);
+ void genReferenceMipmap (const tcu::Vec4& color, tcu::TextureLevel& reference);
};
TextureLevelTestCase::TextureLevelTestCase (Context& context, const char* name, const char* desc, deUint32 format)
@@ -1180,30 +1180,19 @@
tcu::TextureLevel TextureLevelTestCase::genReferenceTexture (int level, const vector<tcu::Vec4>& colors, const tcu::Vec4& uniformColor)
{
- tcu::TextureLevel reference (glu::mapGLTransferFormat(m_transferFmt.format, m_transferFmt.dataType), VIEWPORT_WIDTH, VIEWPORT_HEIGHT, 1);
+ tcu::TextureLevel reference (glu::mapGLTransferFormat(m_transferFmt.format, m_transferFmt.dataType), VIEWPORT_WIDTH >> level, VIEWPORT_HEIGHT >> level, 1);
- // calculate reference image based on current mipmap level and previously
- // rendered mipmaps in framebuffer
- for (int ndx = 0; ndx <= level; ++ndx)
- genReferenceMipmap(ndx, colors[ndx] + uniformColor, reference);
+ genReferenceMipmap(colors[level] + uniformColor, reference);
return reference;
}
-void TextureLevelTestCase::genReferenceMipmap (int level, const tcu::Vec4& color, tcu::TextureLevel& reference)
+void TextureLevelTestCase::genReferenceMipmap (const tcu::Vec4& color, tcu::TextureLevel& reference)
{
- int width = reference.getAccess().getWidth();
- int height = reference.getAccess().getHeight();
- int left = width /2;
- int top = height/2;
-
- for (int i = 0; i < level; ++i)
- {
- width = de::max(1, width / 2);
- height = de::max(1, height / 2);
- left = width /2;
- top = height/2;
- }
+ const int width = reference.getAccess().getWidth();
+ const int height = reference.getAccess().getHeight();
+ const int left = width / 2;
+ const int top = height / 2;
clear(getSubregion(reference.getAccess(), left, 0, 0, width-left, top, 1), color);
clear(getSubregion(reference.getAccess(), 0, top, 0, left, height-top, 1), color);
@@ -1214,7 +1203,6 @@
TextureLevelTestCase::IterateResult TextureLevelTestCase::iterate (void)
{
const tcu::Vec4 uniformColor = scaleColorValue(m_texFmt, tcu::Vec4(0.1f, 0.0f, 0.0f, 1.0f));
- tcu::TextureLevel result (getReadPixelFormat(m_texFmt), VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
vector<tcu::Vec4> levelColors;
levelColors.push_back(scaleColorValue(m_texFmt, tcu::Vec4(0.4f, 0.0f, 0.0f, 1.0f)));
@@ -1233,10 +1221,11 @@
name << "Level " << level;
desc << "Mipmap level " << level;
- const tcu::ScopedLogSection section (m_testCtx.getLog(), name.str(), desc.str());
+ const tcu::ScopedLogSection section (m_testCtx.getLog(), name.str(), desc.str());
+ tcu::TextureLevel result (getReadPixelFormat(m_texFmt), VIEWPORT_WIDTH >> level, VIEWPORT_HEIGHT >> level);
tcu::TextureLevel reference = genReferenceTexture(level, levelColors, uniformColor);
- m_gl.framebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_texColorBuffer, level);
+ m_gl.framebufferTextureLayer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_texColorBuffer, level, 0);
genUniformColor(uniformColor);
render();
diff --git a/modules/glshared/glsDrawTest.cpp b/modules/glshared/glsDrawTest.cpp
index 155bd35..472c5ea 100644
--- a/modules/glshared/glsDrawTest.cpp
+++ b/modules/glshared/glsDrawTest.cpp
@@ -3150,10 +3150,18 @@
DrawTest::IterateResult DrawTest::iterate (void)
{
const int specNdx = (m_iteration / 2);
+ const DrawTestSpec& spec = m_specs[specNdx];
+
+ if (spec.drawMethod == DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_BASEVERTEX ||
+ spec.drawMethod == DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_INSTANCED_BASEVERTEX ||
+ spec.drawMethod == DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_RANGED_BASEVERTEX)
+ {
+ TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_renderCtx.getType(), glu::ApiType::es(3, 2)), "Tests requires a 3.2 context or higher context version.");
+ }
+
const bool drawStep = (m_iteration % 2) == 0;
const bool compareStep = (m_iteration % 2) == 1;
const IterateResult iterateResult = ((size_t)m_iteration + 1 == m_specs.size()*2) ? (STOP) : (CONTINUE);
- const DrawTestSpec& spec = m_specs[specNdx];
const bool updateProgram = (m_iteration == 0) || (drawStep && !checkSpecsShaderCompatible(m_specs[specNdx], m_specs[specNdx-1])); // try to use the same shader in all iterations
IterationLogSectionEmitter sectionEmitter (m_testCtx.getLog(), specNdx, m_specs.size(), m_iteration_descriptions[specNdx], drawStep && m_specs.size()!=1);
diff --git a/scripts/check_build_sanity.py b/scripts/check_build_sanity.py
index 620b07a..c35aafc 100644
--- a/scripts/check_build_sanity.py
+++ b/scripts/check_build_sanity.py
@@ -189,6 +189,10 @@
RunScript(os.path.join("external", "vulkancts", "scripts", "build_mustpass.py"),
lambda env: ["--build-dir", os.path.join(env.tmpDir, "vulkan-mustpass")]),
]),
+ ('spirv-binaries', [
+ RunScript(os.path.join("external", "vulkancts", "scripts", "build_spirv_binaries.py"),
+ lambda env: ["--build-dir", os.path.join(env.tmpDir, "spirv-binaries")]),
+ ]),
('gen-inl-files', [
RunScript(os.path.join("scripts", "gen_egl.py")),
RunScript(os.path.join("scripts", "opengl", "gen_all.py")),