Merge branch 'jekstrand_renderpass_transfer_bit_fix' into 'master'
authorPyry Haulos <phaulos@google.com>
Fri, 15 Jan 2016 16:52:48 +0000 (11:52 -0500)
committerPyry Haulos <phaulos@google.com>
Fri, 15 Jan 2016 16:52:48 +0000 (11:52 -0500)
dEQP-VK.renderpass: Set IMAGE_USAGE_TRANSFER_SRC_BIT when needed

Later on in the test, if "lazy" is not set, we try and download the image.

See merge request !266

109 files changed:
Android.mk
execserver/xsPosixTestProcess.cpp
external/fetch_sources.py
external/vulkancts/build_mustpass.py [new file with mode: 0644]
external/vulkancts/data/vulkan/glsl/es310/linkage.test
external/vulkancts/framework/vulkan/vkAllocationCallbackUtil.cpp
external/vulkancts/framework/vulkan/vkBasicTypes.inl
external/vulkancts/framework/vulkan/vkBuilderUtil.cpp
external/vulkancts/framework/vulkan/vkBuilderUtil.hpp
external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
external/vulkancts/framework/vulkan/vkImageUtil.cpp
external/vulkancts/framework/vulkan/vkImageUtil.hpp
external/vulkancts/framework/vulkan/vkNullDriver.cpp
external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
external/vulkancts/framework/vulkan/vkRefUtil.cpp
external/vulkancts/framework/vulkan/vkStrUtil.inl
external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
external/vulkancts/framework/vulkan/vkStructTypes.inl
external/vulkancts/framework/vulkan/vkTypeUtil.inl
external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
external/vulkancts/gen_framework.py
external/vulkancts/modules/vulkan/api/vktApiBufferTests.cpp
external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp
external/vulkancts/modules/vulkan/api/vktApiBufferViewCreateTests.cpp
external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp
external/vulkancts/modules/vulkan/api/vktApiComputeInstanceResultBuffer.hpp
external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp
external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
external/vulkancts/modules/vulkan/api/vktApiSmokeTests.cpp
external/vulkancts/modules/vulkan/binding_model/vktBindingShaderAccessTests.cpp
external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp
external/vulkancts/modules/vulkan/compute/vktComputeIndirectComputeDispatchTests.cpp
external/vulkancts/modules/vulkan/compute/vktComputeShaderBuiltinVarTests.cpp
external/vulkancts/modules/vulkan/compute/vktComputeTestsUtil.cpp
external/vulkancts/modules/vulkan/draw/vktDrawCreateInfoUtil.cpp
external/vulkancts/modules/vulkan/draw/vktDrawCreateInfoUtil.hpp
external/vulkancts/modules/vulkan/draw/vktDrawImageObjectUtil.cpp
external/vulkancts/modules/vulkan/draw/vktDrawIndexedTest.cpp
external/vulkancts/modules/vulkan/draw/vktDrawIndirectTest.cpp
external/vulkancts/modules/vulkan/draw/vktDrawSimpleTest.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateBaseClass.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateCBTests.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateCreateInfoUtil.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateCreateInfoUtil.hpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateDSTests.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateGeneralTests.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateImageObjectUtil.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateVPTests.cpp
external/vulkancts/modules/vulkan/image/vktImageLoadStoreTests.cpp
external/vulkancts/modules/vulkan/image/vktImageQualifiersTests.cpp
external/vulkancts/modules/vulkan/image/vktImageSizeTests.cpp
external/vulkancts/modules/vulkan/image/vktImageTestsUtil.cpp
external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp
external/vulkancts/modules/vulkan/memory/vktMemoryPipelineBarrierTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.hpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineImageTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.hpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineImageViewTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineReferenceRenderer.hpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp
external/vulkancts/modules/vulkan/query_pool/vktQueryPoolCreateInfoUtil.cpp
external/vulkancts/modules/vulkan/query_pool/vktQueryPoolCreateInfoUtil.hpp
external/vulkancts/modules/vulkan/query_pool/vktQueryPoolImageObjectUtil.cpp
external/vulkancts/modules/vulkan/query_pool/vktQueryPoolOcclusionTests.cpp
external/vulkancts/modules/vulkan/shaderexecutor/CMakeLists.txt
external/vulkancts/modules/vulkan/shaderexecutor/vktOpaqueTypeIndexingTests.cpp
external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinConstantTests.cpp [deleted file]
external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinConstantTests.hpp [deleted file]
external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinTests.cpp
external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp
external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.hpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderIndexingTests.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderLoopTests.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderOperatorTests.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderReturnTests.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderStructTests.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderSwitchTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp
external/vulkancts/modules/vulkan/ubo/vktUniformBlockCase.cpp
external/vulkancts/modules/vulkan/vktRenderPassTests.cpp
external/vulkancts/modules/vulkan/vktShaderLibrary.cpp
external/vulkancts/modules/vulkan/vktTestCase.cpp
external/vulkancts/mustpass/1.0.0/.gitignore [new file with mode: 0644]
external/vulkancts/mustpass/1.0.0/src/excluded-tests.txt [new file with mode: 0644]
external/vulkancts/mustpass/1.0.0/src/master.txt [new file with mode: 0644]
external/vulkancts/mustpass/1.0.0/src/test-issues.txt [new file with mode: 0644]
framework/platform/win32/tcuWin32Platform.cpp
modules/gles2/functional/es2fFboRenderTest.cpp
scripts/build_android_mustpass.py
scripts/mustpass.py [new file with mode: 0644]

index 586308c..0183bb0 100644 (file)
@@ -734,13 +734,15 @@ LOCAL_SHARED_LIBRARIES := \
                liblog \
                libm \
                libc \
-               libpng \
                libz \
                libdl
 
+LOCAL_STATIC_LIBRARIES := \
+               libpng_ndk \
+
 LOCAL_CFLAGS += \
        $(deqp_compile_flags) \
-       -Wno-date-time
+       -Wno-error=date-time
 
 LOCAL_SDK_VERSION := 9
 LOCAL_CPPFLAGS += -Wno-non-virtual-dtor
index 5c9dcb6..9f4d21d 100644 (file)
@@ -200,7 +200,7 @@ void PosixTestProcess::start (const char* name, const char* params, const char*
        }
 
        // Construct command line.
-       string cmdLine = de::FilePath(name).isAbsolutePath() ? name : de::FilePath::join(workingDir, name).normalize().getPath();
+       string cmdLine = de::FilePath(name).isAbsolutePath() ? name : de::FilePath::join(workingDir, name).getPath();
        cmdLine += string(" --deqp-log-filename=") + logFilePath.getBaseName();
 
        if (hasCaseList)
index 1c7fa19..642cd31 100644 (file)
@@ -134,11 +134,10 @@ class SourcePackage (Source):
                        self.postExtract(dstPath)
 
 class GitRepo (Source):
-       def __init__(self, url, revision, baseDir, extractDir = "src", postCheckout = None):
+       def __init__(self, url, revision, baseDir, extractDir = "src"):
                Source.__init__(self, baseDir, extractDir)
-               self.url                        = url
-               self.revision           = revision
-               self.postCheckout       = postCheckout
+               self.url                = url
+               self.revision   = revision
 
        def update (self):
                fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
@@ -150,9 +149,6 @@ class GitRepo (Source):
                try:
                        execute(["git", "fetch", self.url, "+refs/heads/*:refs/remotes/origin/*"])
                        execute(["git", "checkout", self.revision])
-
-                       if self.postCheckout:
-                               self.postCheckout(fullDstPath)
                finally:
                        popWorkingDir()
 
@@ -160,12 +156,6 @@ def postExtractLibpng (path):
        shutil.copy(os.path.join(path, "scripts", "pnglibconf.h.prebuilt"),
                                os.path.join(path, "pnglibconf.h"))
 
-def postCheckoutGlslang (path):
-       srcPath = os.path.join(path, "SPIRV", "SpvBuilder.cpp");
-       origSrc = readFile(srcPath)
-       patched = origSrc.replace("exit(1)", "throw std::runtime_error(fun)")
-       writeFile(srcPath, patched)
-
 PACKAGES = [
        SourcePackage(
                "http://zlib.net/zlib-1.2.8.tar.gz",
@@ -184,9 +174,8 @@ PACKAGES = [
                "spirv-tools"),
        GitRepo(
                "git@gitlab.khronos.org:GLSL/glslang.git",
-               "41daec718f4868d956ca7d339a15aebe65879442",
-               "glslang",
-               postCheckout = postCheckoutGlslang),
+               "cafd6cc2f1b9987a0948c1653363f2e76a5fa6b1",
+               "glslang"),
 ]
 
 def parseArgs ():
diff --git a/external/vulkancts/build_mustpass.py b/external/vulkancts/build_mustpass.py
new file mode 100644 (file)
index 0000000..c669904
--- /dev/null
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+
+#-------------------------------------------------------------------------
+# Vulkan CTS
+# ----------
+#
+# Copyright (c) 2016 Google Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and/or associated documentation files (the
+# "Materials"), to deal in the Materials without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Materials, and to
+# permit persons to whom the Materials are furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice(s) and this permission notice shall be
+# included in all copies or substantial portions of the Materials.
+#
+# The Materials are Confidential Information as defined by the
+# Khronos Membership Agreement until designated non-confidential by
+# Khronos, at which point this condition clause shall be removed.
+#
+# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+#
+#-------------------------------------------------------------------------
+
+import os
+import sys
+
+sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "scripts"))
+
+from build.common import DEQP_DIR
+from build.config import ANY_GENERATOR
+from build_caselists import Module, getModuleByName, getBuildConfig, DEFAULT_BUILD_DIR, DEFAULT_TARGET
+from mustpass import Project, Package, Mustpass, Configuration, include, exclude, genMustpassLists
+
+COPYRIGHT_DECLARATION = """
+     Permission is hereby granted, free of charge, to any person obtaining a
+     copy of this software and/or associated documentation files (the
+     "Materials"), to deal in the Materials without restriction, including
+     without limitation the rights to use, copy, modify, merge, publish,
+     distribute, sublicense, and/or sell copies of the Materials, and to
+     permit persons to whom the Materials are furnished to do so, subject to
+     the following conditions:
+
+     The above copyright notice(s) and this permission notice shall be
+     included in all copies or substantial portions of the Materials.
+
+     The Materials are Confidential Information as defined by the
+     Khronos Membership Agreement until designated non-confidential by
+     Khronos, at which point this condition clause shall be removed.
+
+     THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+     MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+     """
+
+MUSTPASS_PATH          = os.path.join(DEQP_DIR, "external", "vulkancts", "mustpass")
+PROJECT                                = Project(path = MUSTPASS_PATH, copyright = COPYRIGHT_DECLARATION)
+VULKAN_MODULE          = getModuleByName("dEQP-VK")
+BUILD_CONFIG           = getBuildConfig(DEFAULT_BUILD_DIR, DEFAULT_TARGET, "Debug")
+
+# 1.0.0
+
+VULKAN_1_0_0_PKG       = Package(module = VULKAN_MODULE, configurations = [
+               # Master
+               Configuration(name              = "default",
+                                         filters       = [include("master.txt"),
+                                                                  exclude("test-issues.txt"),
+                                                                  exclude("excluded-tests.txt")]),
+       ])
+
+MUSTPASS_LISTS         = [
+               Mustpass(project = PROJECT, version = "1.0.0",          packages = [VULKAN_1_0_0_PKG])
+       ]
+
+if __name__ == "__main__":
+       genMustpassLists(MUSTPASS_LISTS, ANY_GENERATOR, BUILD_CONFIG)
index d0cec0f..21c62b0 100644 (file)
@@ -20,7 +20,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                precision mediump float;
-                               in mediump float var;
+                               layout(location = 0) in mediump float var;
                                ${FRAGMENT_DECLARATIONS}
                                void main()
                                {
@@ -37,7 +37,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump float var;
+                               layout(location = 0) out mediump float var;
                                void main()
                                {
                                        ${VERTEX_OUTPUT}
@@ -60,7 +60,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump float var;
+                               layout(location = 0) out mediump float var;
                                void main()
                                {
                                        ${VERTEX_OUTPUT}
@@ -68,7 +68,7 @@ group varying "Varying linkage"
                        ""
                        fragment ""
                                #version 310 es
-                               in mediump float var;
+                               layout(location = 0) in mediump float var;
                                ${FRAGMENT_DECLARATIONS}
                                void main()
                                {
@@ -85,7 +85,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump float var;
+                               layout(location = 0) out mediump float var;
                                void main()
                                {
                                        ${VERTEX_OUTPUT}
@@ -93,7 +93,7 @@ group varying "Varying linkage"
                        ""
                        fragment ""
                                #version 310 es
-                               in mediump float var;
+                               layout(location = 0) in mediump float var;
                                ${FRAGMENT_DECLARATIONS}
                                void main()
                                {
@@ -113,7 +113,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump float var;
+                               layout(location = 0) out mediump float var;
                                void main()
                                {
                                        if (u_false)
@@ -139,7 +139,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump float var;
+                               layout(location = 0) out mediump float var;
                                void main()
                                {
                                        if (u_false)
@@ -149,7 +149,7 @@ group varying "Varying linkage"
                        ""
                        fragment ""
                                #version 310 es
-                               in mediump float var;
+                               layout(location = 0) in mediump float var;
                                ${FRAGMENT_DECLARATIONS}
                                void main()
                                {
@@ -166,7 +166,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump float var;
+                               layout(location = 0) out mediump float var;
                                void main()
                                {
                                        if (u_false)
@@ -177,7 +177,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               in mediump float var;
+                               layout(location = 0) in mediump float var;
                                void main()
                                {
                                        if (u_false)
@@ -201,7 +201,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out highp float var;
+                               layout(location = 0) out highp float var;
                                void main()
                                {
                                        var = in0;
@@ -212,7 +212,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mediump float var;
+                               layout(location = 0) in mediump float var;
                                void main()
                                {
                                        out0 = var;
@@ -234,7 +234,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out highp vec2 var;
+                               layout(location = 0) out highp vec2 var;
                                void main()
                                {
                                        var = vec2(in0, 2.0*in0);
@@ -245,7 +245,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in lowp vec2 var;
+                               layout(location = 0) in lowp vec2 var;
                                void main()
                                {
                                        out0 = var.y - var.x;
@@ -267,7 +267,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out lowp vec4 var;
+                               layout(location = 0) out lowp vec4 var;
                                void main()
                                {
                                        var = vec4(in0, 2.0*in0, -in0, -in0);
@@ -278,7 +278,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mediump vec4 var;
+                               layout(location = 0) in mediump vec4 var;
                                void main()
                                {
                                        out0 = var.x + var.y + var.z + var.w;
@@ -300,7 +300,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               smooth out mediump float var;
+                               layout(location = 0) smooth out mediump float var;
                                void main()
                                {
                                        var = in0;
@@ -311,7 +311,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               centroid in mediump float var;
+                               layout(location = 0) centroid in mediump float var;
                                void main()
                                {
                                        out0 = var;
@@ -334,7 +334,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump float var;
+                               layout(location = 0) out mediump float var;
                                void main()
                                {
                                        var = in0;
@@ -345,7 +345,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in float var;
+                               layout(location = 0) in float var;
                                void main()
                                {
                                        out0 = var;
@@ -365,7 +365,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump vec2 var;
+                               layout(location = 0) out mediump vec2 var;
                                void main()
                                {
                                        var = in0;
@@ -376,7 +376,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in vec2 var;
+                               layout(location = 0) in vec2 var;
                                void main()
                                {
                                        out0 = var;
@@ -396,7 +396,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump vec3 var;
+                               layout(location = 0) out mediump vec3 var;
                                void main()
                                {
                                        var = in0;
@@ -407,7 +407,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in vec3 var;
+                               layout(location = 0) in vec3 var;
                                void main()
                                {
                                        out0 = var;
@@ -427,7 +427,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump vec4 var;
+                               layout(location = 0) out mediump vec4 var;
                                void main()
                                {
                                        var = in0;
@@ -438,7 +438,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in vec4 var;
+                               layout(location = 0) in vec4 var;
                                void main()
                                {
                                        out0 = var;
@@ -458,7 +458,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat2 var;
+                               layout(location = 0) out mediump mat2 var;
                                void main()
                                {
                                        var = in0;
@@ -469,7 +469,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat2 var;
+                               layout(location = 0) in mat2 var;
                                void main()
                                {
                                        out0 = var;
@@ -489,7 +489,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat2x3 var;
+                               layout(location = 0) out mediump mat2x3 var;
                                void main()
                                {
                                        var = in0;
@@ -500,7 +500,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat2x3 var;
+                               layout(location = 0) in mat2x3 var;
                                void main()
                                {
                                        out0 = var;
@@ -520,7 +520,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat2x4 var;
+                               layout(location = 0) out mediump mat2x4 var;
                                void main()
                                {
                                        var = in0;
@@ -531,7 +531,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat2x4 var;
+                               layout(location = 0) in mat2x4 var;
                                void main()
                                {
                                        out0 = var;
@@ -551,7 +551,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat3x2 var;
+                               layout(location = 0) out mediump mat3x2 var;
                                void main()
                                {
                                        var = in0;
@@ -562,7 +562,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat3x2 var;
+                               layout(location = 0) in mat3x2 var;
                                void main()
                                {
                                        out0 = var;
@@ -582,7 +582,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat3 var;
+                               layout(location = 0) out mediump mat3 var;
                                void main()
                                {
                                        var = in0;
@@ -593,7 +593,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat3 var;
+                               layout(location = 0) in mat3 var;
                                void main()
                                {
                                        out0 = var;
@@ -613,7 +613,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat3x4 var;
+                               layout(location = 0) out mediump mat3x4 var;
                                void main()
                                {
                                        var = in0;
@@ -624,7 +624,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat3x4 var;
+                               layout(location = 0) in mat3x4 var;
                                void main()
                                {
                                        out0 = var;
@@ -644,7 +644,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat4x2 var;
+                               layout(location = 0) out mediump mat4x2 var;
                                void main()
                                {
                                        var = in0;
@@ -655,7 +655,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat4x2 var;
+                               layout(location = 0) in mat4x2 var;
                                void main()
                                {
                                        out0 = var;
@@ -675,7 +675,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat4x3 var;
+                               layout(location = 0) out mediump mat4x3 var;
                                void main()
                                {
                                        var = in0;
@@ -686,7 +686,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat4x3 var;
+                               layout(location = 0) in mat4x3 var;
                                void main()
                                {
                                        out0 = var;
@@ -706,7 +706,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               out mediump mat4 var;
+                               layout(location = 0) out mediump mat4 var;
                                void main()
                                {
                                        var = in0;
@@ -717,7 +717,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in mat4 var;
+                               layout(location = 0) in mat4 var;
                                void main()
                                {
                                        out0 = var;
@@ -737,7 +737,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump int var;
+                               layout(location = 0) flat out mediump int var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -748,7 +748,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               flat in int var;
+                               layout(location = 0) flat in int var;
                                void main()
                                {
                                        out0 = var;
@@ -768,7 +768,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump ivec2 var;
+                               layout(location = 0) flat out mediump ivec2 var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -779,7 +779,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               flat in ivec2 var;
+                               layout(location = 0) flat in ivec2 var;
                                void main()
                                {
                                        out0 = var;
@@ -799,7 +799,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump ivec3 var;
+                               layout(location = 0) flat out mediump ivec3 var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -810,7 +810,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               flat in ivec3 var;
+                               layout(location = 0) flat in ivec3 var;
                                void main()
                                {
                                        out0 = var;
@@ -830,7 +830,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump ivec4 var;
+                               layout(location = 0) flat out mediump ivec4 var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -841,7 +841,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               flat in ivec4 var;
+                               layout(location = 0) flat in ivec4 var;
                                void main()
                                {
                                        out0 = var;
@@ -861,7 +861,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump uint var;
+                               layout(location = 0) flat out mediump uint var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -872,7 +872,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               flat in uint var;
+                               layout(location = 0) flat in uint var;
                                void main()
                                {
                                        out0 = var;
@@ -892,7 +892,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump uvec2 var;
+                               layout(location = 0) flat out mediump uvec2 var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -903,7 +903,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               flat in uvec2 var;
+                               layout(location = 0) flat in uvec2 var;
                                void main()
                                {
                                        out0 = var;
@@ -923,7 +923,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump uvec3 var;
+                               layout(location = 0) flat out mediump uvec3 var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -934,7 +934,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               flat in uvec3 var;
+                               layout(location = 0) flat in uvec3 var;
                                void main()
                                {
                                        out0 = var;
@@ -954,7 +954,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump uvec4 var;
+                               layout(location = 0) flat out mediump uvec4 var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -965,7 +965,7 @@ group varying "Varying linkage"
                        fragment ""
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
-                               flat in uvec4 var;
+                               layout(location = 0) flat in uvec4 var;
                                void main()
                                {
                                        out0 = var;
@@ -988,7 +988,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump float a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1000,7 +1000,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump float a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1021,7 +1021,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump vec2 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1033,7 +1033,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump vec2 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1054,7 +1054,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump vec3 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1066,7 +1066,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump vec3 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1087,7 +1087,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump vec4 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1099,7 +1099,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump vec4 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1120,7 +1120,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat2 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1132,7 +1132,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat2 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1153,7 +1153,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat2x3 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1165,7 +1165,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat2x3 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1186,7 +1186,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat2x4 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1198,7 +1198,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat2x4 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1219,7 +1219,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat3x2 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1231,7 +1231,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat3x2 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1252,7 +1252,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat3 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1264,7 +1264,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat3 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1285,7 +1285,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat3x4 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1297,7 +1297,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat3x4 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1318,7 +1318,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat4x2 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1330,7 +1330,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat4x2 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1351,7 +1351,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat4x3 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1363,7 +1363,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat4x3 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1384,7 +1384,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump mat4 a; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1396,7 +1396,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump mat4 a; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1417,7 +1417,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump int a; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1429,7 +1429,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump int a; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1450,7 +1450,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump ivec2 a; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1462,7 +1462,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump ivec2 a; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1483,7 +1483,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump ivec3 a; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1495,7 +1495,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump ivec3 a; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1516,7 +1516,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump ivec4 a; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1528,7 +1528,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump ivec4 a; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1549,7 +1549,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump uint a; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1561,7 +1561,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump uint a; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1582,7 +1582,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump uvec2 a; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1594,7 +1594,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump uvec2 a; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1615,7 +1615,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump uvec3 a; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1627,7 +1627,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump uvec3 a; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1648,7 +1648,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump uvec4 a; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1660,7 +1660,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump uvec4 a; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1683,7 +1683,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump float a; highp vec3 b; };
-                               out S var;
+                               layout(location = 0) out S var;
                                void main()
                                {
                                        var.a = in0;
@@ -1696,7 +1696,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump float a; highp vec3 b; };
-                               in S var;
+                               layout(location = 0) in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1722,7 +1722,7 @@ group varying "Varying linkage"
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
                                struct S { mediump float a; highp uvec2 b; highp vec3 c; };
-                               flat out S var;
+                               layout(location = 0) flat out S var;
                                void main()
                                {
                                        ${VERTEX_SETUP}
@@ -1737,7 +1737,7 @@ group varying "Varying linkage"
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
                                struct S { mediump float a; highp uvec2 b; highp vec3 c; };
-                               flat in S var;
+                               layout(location = 0) flat in S var;
                                void main()
                                {
                                        out0 = var.a;
@@ -1761,7 +1761,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               smooth out mediump vec4 var;
+                               layout(location = 0) smooth out mediump vec4 var;
                                void main()
                                {
                                        var = in0;
@@ -1772,7 +1772,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               smooth in vec4 var;
+                               layout(location = 0) smooth in vec4 var;
                                void main()
                                {
                                        out0 = var;
@@ -1792,7 +1792,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               centroid out mediump vec4 var;
+                               layout(location = 0) centroid out mediump vec4 var;
                                void main()
                                {
                                        var = in0;
@@ -1803,7 +1803,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               centroid in vec4 var;
+                               layout(location = 0) centroid in vec4 var;
                                void main()
                                {
                                        out0 = var;
@@ -1823,7 +1823,7 @@ group varying "Varying linkage"
                        vertex ""
                                #version 310 es
                                ${VERTEX_DECLARATIONS}
-                               flat out mediump vec4 var;
+                               layout(location = 0) flat out mediump vec4 var;
                                void main()
                                {
                                        var = in0;
@@ -1834,7 +1834,7 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               flat in vec4 var;
+                               layout(location = 0) flat in vec4 var;
                                void main()
                                {
                                        out0 = var;
@@ -1857,8 +1857,8 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${VERTEX_DECLARATIONS}
-                               out float var1;
-                               out float var2;
+                               layout(location = 0) out float var1;
+                               layout(location = 1) out float var2;
 
                                void main()
                                {
@@ -1871,8 +1871,8 @@ group varying "Varying linkage"
                                #version 310 es
                                precision mediump float;
                                ${FRAGMENT_DECLARATIONS}
-                               in float var1;
-                               in float var2;
+                               layout(location = 0) in float var1;
+                               layout(location = 1) in float var2;
 
                                void main()
                                {
index ec748af..59e965b 100644 (file)
@@ -500,7 +500,7 @@ void validateAllocationCallbacks (const AllocationCallbackRecorder& recorder, Al
                                        size_t* const           totalAllocSizePtr       = &results->internalAllocationTotal[record.data.internalAllocation.type][record.data.internalAllocation.scope];
                                        const size_t            size                            = record.data.internalAllocation.size;
 
-                                       if (record.type == AllocationCallbackRecord::TYPE_FREE)
+                                       if (record.type == AllocationCallbackRecord::TYPE_INTERNAL_FREE)
                                        {
                                                if (*totalAllocSizePtr < size)
                                                {
index 9dcefe1..dd8ecf6 100644 (file)
@@ -1,14 +1,14 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  */
-enum { VK_API_VERSION                                  = VK_MAKE_VERSION(0, 210, 1)    };
-enum { VK_MAX_PHYSICAL_DEVICE_NAME_SIZE        = 256                                                   };
-enum { VK_MAX_EXTENSION_NAME_SIZE              = 256                                                   };
-enum { VK_UUID_SIZE                                            = 16                                                    };
-enum { VK_MAX_MEMORY_TYPES                             = 32                                                    };
-enum { VK_MAX_MEMORY_HEAPS                             = 16                                                    };
-enum { VK_MAX_DESCRIPTION_SIZE                 = 256                                                   };
-enum { VK_ATTACHMENT_UNUSED                            = (~0U)                                                 };
+enum { VK_API_VERSION                                  = VK_MAKE_VERSION(1, 0, 0)      };
+enum { VK_MAX_PHYSICAL_DEVICE_NAME_SIZE        = 256                                           };
+enum { VK_MAX_EXTENSION_NAME_SIZE              = 256                                           };
+enum { VK_UUID_SIZE                                            = 16                                            };
+enum { VK_MAX_MEMORY_TYPES                             = 32                                            };
+enum { VK_MAX_MEMORY_HEAPS                             = 16                                            };
+enum { VK_MAX_DESCRIPTION_SIZE                 = 256                                           };
+enum { VK_ATTACHMENT_UNUSED                            = (~0U)                                         };
 
 VK_DEFINE_HANDLE                                       (VkInstance,                    HANDLE_TYPE_INSTANCE);
 VK_DEFINE_HANDLE                                       (VkPhysicalDevice,              HANDLE_TYPE_PHYSICAL_DEVICE);
@@ -40,6 +40,11 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE    (VkSwapchainKHR,                HANDLE_TYPE_SWAPCHAIN_KHR);
 VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkDisplayKHR,                  HANDLE_TYPE_DISPLAY_KHR);
 VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkDisplayModeKHR,              HANDLE_TYPE_DISPLAY_MODE_KHR);
 
+enum VkPipelineCacheHeaderVersion
+{
+       VK_PIPELINE_CACHE_HEADER_VERSION_ONE    = 1,
+};
+
 enum VkResult
 {
        VK_SUCCESS                                                      = 0,
@@ -64,6 +69,7 @@ enum VkResult
        VK_ERROR_OUT_OF_DATE_KHR                        = -1000001004,
        VK_ERROR_INCOMPATIBLE_DISPLAY_KHR       = -1000003001,
        VK_ERROR_NATIVE_WINDOW_IN_USE_KHR       = -1000008000,
+       VK_ERROR_VALIDATION_FAILED_EXT          = -1000011001,
 };
 
 enum VkStructureType
@@ -109,18 +115,26 @@ enum VkStructureType
        VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                                       = 38,
        VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                                      = 39,
        VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO                          = 40,
-       VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                                     = 41,
-       VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                                        = 42,
-       VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                                         = 43,
-       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                                          = 44,
-       VK_STRUCTURE_TYPE_MEMORY_BARRIER                                                        = 45,
-       VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO                           = 46,
-       VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                                     = 47,
+       VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO                       = 41,
+       VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                                     = 42,
+       VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                                        = 43,
+       VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                                         = 44,
+       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                                          = 45,
+       VK_STRUCTURE_TYPE_MEMORY_BARRIER                                                        = 46,
+       VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO                           = 47,
+       VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                                     = 48,
        VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                                     = 1000001000,
        VK_STRUCTURE_TYPE_PRESENT_INFO_KHR                                                      = 1000001001,
        VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR                          = 1000002000,
        VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR                       = 1000002001,
        VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR                                      = 1000003000,
+       VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR                          = 1000004000,
+       VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR                           = 1000005000,
+       VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR                       = 1000006000,
+       VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR                           = 1000007000,
+       VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR                       = 1000008000,
+       VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR                         = 1000009000,
+       VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT                          = 1000011000,
 };
 
 enum VkSystemAllocationScope
@@ -570,9 +584,8 @@ enum VkFilter
 
 enum VkSamplerMipmapMode
 {
-       VK_SAMPLER_MIPMAP_MODE_BASE             = 0,
-       VK_SAMPLER_MIPMAP_MODE_NEAREST  = 1,
-       VK_SAMPLER_MIPMAP_MODE_LINEAR   = 2,
+       VK_SAMPLER_MIPMAP_MODE_NEAREST  = 0,
+       VK_SAMPLER_MIPMAP_MODE_LINEAR   = 1,
 
        VK_SAMPLER_MIPMAP_MODE_LAST
 };
@@ -760,6 +773,28 @@ enum VkMemoryHeapFlagBits
 };
 typedef deUint32 VkMemoryHeapFlags;
 
+enum VkPipelineStageFlagBits
+{
+       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                                               = 0x00000001,
+       VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                                             = 0x00000002,
+       VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                                              = 0x00000004,
+       VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                                             = 0x00000008,
+       VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT               = 0x00000010,
+       VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT    = 0x00000020,
+       VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                                   = 0x00000040,
+       VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                                   = 0x00000080,
+       VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT                              = 0x00000100,
+       VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT                               = 0x00000200,
+       VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT                   = 0x00000400,
+       VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                                    = 0x00000800,
+       VK_PIPELINE_STAGE_TRANSFER_BIT                                                  = 0x00001000,
+       VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT                                    = 0x00002000,
+       VK_PIPELINE_STAGE_HOST_BIT                                                              = 0x00004000,
+       VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                                              = 0x00008000,
+       VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                                              = 0x00010000,
+};
+typedef deUint32 VkPipelineStageFlags;
+
 enum VkImageAspectFlagBits
 {
        VK_IMAGE_ASPECT_COLOR_BIT               = 0x00000001,
@@ -807,7 +842,6 @@ typedef deUint32 VkQueryPipelineStatisticFlags;
 
 enum VkQueryResultFlagBits
 {
-       VK_QUERY_RESULT_DEFAULT                                 = 0,
        VK_QUERY_RESULT_64_BIT                                  = 0x00000001,
        VK_QUERY_RESULT_WAIT_BIT                                = 0x00000002,
        VK_QUERY_RESULT_WITH_AVAILABILITY_BIT   = 0x00000004,
@@ -888,27 +922,6 @@ enum VkAttachmentDescriptionFlagBits
 };
 typedef deUint32 VkAttachmentDescriptionFlags;
 
-enum VkPipelineStageFlagBits
-{
-       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                                               = 0x00000001,
-       VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                                             = 0x00000002,
-       VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                                              = 0x00000004,
-       VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                                             = 0x00000008,
-       VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT               = 0x00000010,
-       VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT    = 0x00000020,
-       VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                                   = 0x00000040,
-       VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                                   = 0x00000080,
-       VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT                              = 0x00000100,
-       VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT                               = 0x00000200,
-       VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT                   = 0x00000400,
-       VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                                    = 0x00000800,
-       VK_PIPELINE_STAGE_TRANSFER_BIT                                                  = 0x00001000,
-       VK_PIPELINE_STAGE_HOST_BIT                                                              = 0x00002000,
-       VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                                              = 0x00004000,
-       VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                                              = 0x00008000,
-};
-typedef deUint32 VkPipelineStageFlags;
-
 enum VkAccessFlagBits
 {
        VK_ACCESS_INDIRECT_COMMAND_READ_BIT                             = 0x00000001,
@@ -972,7 +985,6 @@ typedef deUint32 VkCommandBufferResetFlags;
 
 enum VkStencilFaceFlagBits
 {
-       VK_STENCIL_FACE_NONE            = 0,
        VK_STENCIL_FACE_FRONT_BIT       = 0x00000001,
        VK_STENCIL_FACE_BACK_BIT        = 0x00000002,
        VK_STENCIL_FRONT_AND_BACK       = 0x3,
@@ -981,7 +993,7 @@ typedef deUint32 VkStencilFaceFlags;
 
 enum VkSurfaceTransformFlagBitsKHR
 {
-       VK_SURFACE_TRANSFORM_NONE_BIT_KHR                                                       = 0x00000001,
+       VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR                                           = 0x00000001,
        VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR                                          = 0x00000002,
        VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR                                         = 0x00000004,
        VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR                                         = 0x00000008,
@@ -1039,7 +1051,7 @@ typedef deUint32 VkPipelineVertexInputStateCreateFlags;
 
 typedef deUint32 VkPipelineInputAssemblyStateCreateFlags;
 
-typedef deUint32 VkPipelineTesselationStateCreateFlags;
+typedef deUint32 VkPipelineTessellationStateCreateFlags;
 
 typedef deUint32 VkPipelineViewportStateCreateFlags;
 
@@ -1073,3 +1085,15 @@ typedef deUint32 VkDisplayModeCreateFlagsKHR;
 
 typedef deUint32 VkDisplaySurfaceCreateFlagsKHR;
 
+typedef deUint32 VkXlibSurfaceCreateFlagsKHR;
+
+typedef deUint32 VkXcbSurfaceCreateFlagsKHR;
+
+typedef deUint32 VkWaylandSurfaceCreateFlagsKHR;
+
+typedef deUint32 VkMirSurfaceCreateFlagsKHR;
+
+typedef deUint32 VkAndroidSurfaceCreateFlagsKHR;
+
+typedef deUint32 VkWin32SurfaceCreateFlagsKHR;
+
index 3b2d327..44dde43 100644 (file)
@@ -50,13 +50,28 @@ DescriptorSetLayoutBuilder& DescriptorSetLayoutBuilder::addBinding (VkDescriptor
                                                                                                                                        VkShaderStageFlags      stageFlags,
                                                                                                                                        const VkSampler*        pImmutableSamplers)
 {
+       if (pImmutableSamplers)
+       {
+               const ImmutableSamplerInfo immutableSamplerInfo =
+               {
+                       (deUint32)m_bindings.size(),
+                       (deUint32)m_immutableSamplers.size()
+               };
+
+               m_immutableSamplerInfos.push_back(immutableSamplerInfo);
+
+               for (size_t descriptorNdx = 0; descriptorNdx < descriptorCount; descriptorNdx++)
+                       m_immutableSamplers.push_back(pImmutableSamplers[descriptorNdx]);
+       }
+
+       // pImmutableSamplers will be updated at build time
        const VkDescriptorSetLayoutBinding binding =
        {
                (deUint32)m_bindings.size(),    // binding
                descriptorType,                                 // descriptorType
                descriptorCount,                                // descriptorCount
                stageFlags,                                             // stageFlags
-               pImmutableSamplers,                             // pImmutableSamplers
+               DE_NULL,                                                // pImmutableSamplers
        };
        m_bindings.push_back(binding);
        return *this;
@@ -64,14 +79,23 @@ DescriptorSetLayoutBuilder& DescriptorSetLayoutBuilder::addBinding (VkDescriptor
 
 Move<VkDescriptorSetLayout> DescriptorSetLayoutBuilder::build (const DeviceInterface& vk, VkDevice device) const
 {
-       const VkDescriptorSetLayoutBinding* const       bindingPtr      = (m_bindings.empty()) ? (DE_NULL) : (&m_bindings[0]);
+       // Create new layout bindings with pImmutableSamplers updated
+       std::vector<VkDescriptorSetLayoutBinding>       bindings        = m_bindings;
+
+       for (size_t samplerInfoNdx = 0; samplerInfoNdx < m_immutableSamplerInfos.size(); samplerInfoNdx++)
+       {
+               const ImmutableSamplerInfo&     samplerInfo     = m_immutableSamplerInfos[samplerInfoNdx];
+
+               bindings[samplerInfo.bindingIndex].pImmutableSamplers   = &m_immutableSamplers[samplerInfo.samplerBaseIndex];
+       }
+
        const VkDescriptorSetLayoutCreateInfo           createInfo      =
        {
                VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
                DE_NULL,
-               (VkDescriptorSetLayoutCreateFlags)0,    // flags
-               (deUint32)m_bindings.size(),                    // bindingCount
-               bindingPtr,                                                             // pBinding
+               (VkDescriptorSetLayoutCreateFlags)0,                                    // flags
+               (deUint32)bindings.size(),                                                              // bindingCount
+               (bindings.empty()) ? (DE_NULL) : (bindings.data()),             // pBinding
        };
 
        return createDescriptorSetLayout(vk, device, &createInfo);
@@ -147,6 +171,7 @@ DescriptorSetUpdateBuilder& DescriptorSetUpdateBuilder::write (VkDescriptorSet
                                                                                                                           const VkDescriptorBufferInfo*        pBufferInfo,
                                                                                                                           const VkBufferView*                          pTexelBufferView)
 {
+       // pImageInfo, pBufferInfo and pTexelBufferView will be updated when calling update()
        const VkWriteDescriptorSet writeParams =
        {
                VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
@@ -156,11 +181,27 @@ DescriptorSetUpdateBuilder& DescriptorSetUpdateBuilder::write (VkDescriptorSet
                destArrayElement,       //!< destArrayElement
                count,                          //!< count
                descriptorType,         //!< descriptorType
-               pImageInfo,
-               pBufferInfo,
-               pTexelBufferView
+               DE_NULL,
+               DE_NULL,
+               DE_NULL
        };
+
        m_writes.push_back(writeParams);
+
+       // Store a copy of pImageInfo, pBufferInfo and pTexelBufferView
+       WriteDescriptorInfo     writeInfo;
+
+       if (pImageInfo)
+               writeInfo.imageInfos.insert(writeInfo.imageInfos.end(), pImageInfo, pImageInfo + count);
+
+       if (pBufferInfo)
+               writeInfo.bufferInfos.insert(writeInfo.bufferInfos.end(), pBufferInfo, pBufferInfo + count);
+
+       if (pTexelBufferView)
+               writeInfo.texelBufferViews.insert(writeInfo.texelBufferViews.end(), pTexelBufferView, pTexelBufferView + count);
+
+       m_writeDescriptorInfos.push_back(writeInfo);
+
        return *this;
 }
 
@@ -190,10 +231,27 @@ DescriptorSetUpdateBuilder& DescriptorSetUpdateBuilder::copy (VkDescriptorSet     sr
 
 void DescriptorSetUpdateBuilder::update (const DeviceInterface& vk, VkDevice device) const
 {
-       const VkWriteDescriptorSet* const       writePtr        = (m_writes.empty()) ? (DE_NULL) : (&m_writes[0]);
+       // Update VkWriteDescriptorSet structures with stored info
+       std::vector<VkWriteDescriptorSet> writes        = m_writes;
+
+       for (size_t writeNdx = 0; writeNdx < m_writes.size(); writeNdx++)
+       {
+               const WriteDescriptorInfo& writeInfo = m_writeDescriptorInfos[writeNdx];
+
+               if (!writeInfo.imageInfos.empty())
+                       writes[writeNdx].pImageInfo                     = &writeInfo.imageInfos[0];
+
+               if (!writeInfo.bufferInfos.empty())
+                       writes[writeNdx].pBufferInfo            = &writeInfo.bufferInfos[0];
+
+               if (!writeInfo.texelBufferViews.empty())
+                       writes[writeNdx].pTexelBufferView       = &writeInfo.texelBufferViews[0];
+       }
+
+       const VkWriteDescriptorSet* const       writePtr        = (m_writes.empty()) ? (DE_NULL) : (&writes[0]);
        const VkCopyDescriptorSet* const        copyPtr         = (m_copies.empty()) ? (DE_NULL) : (&m_copies[0]);
 
-       vk.updateDescriptorSets(device, (deUint32)m_writes.size(), writePtr, (deUint32)m_copies.size(), copyPtr);
+       vk.updateDescriptorSets(device, (deUint32)writes.size(), writePtr, (deUint32)m_copies.size(), copyPtr);
 }
 
 } // vk
index 45ef2b3..1a30b3a 100644 (file)
@@ -88,6 +88,15 @@ private:
        DescriptorSetLayoutBuilder&                                     operator=                                       (const DescriptorSetLayoutBuilder&); // delete
 
        std::vector<VkDescriptorSetLayoutBinding>       m_bindings;
+
+       struct ImmutableSamplerInfo
+       {
+               deUint32 bindingIndex;
+               deUint32 samplerBaseIndex;
+       };
+
+       std::vector<ImmutableSamplerInfo>                       m_immutableSamplerInfos;
+       std::vector<VkSampler>                                          m_immutableSamplers;
 };
 
 class DescriptorPoolBuilder
@@ -229,9 +238,14 @@ private:
                                                                                DescriptorSetUpdateBuilder      (const DescriptorSetUpdateBuilder&); // delete
        DescriptorSetUpdateBuilder&                     operator=                                       (const DescriptorSetUpdateBuilder&); // delete
 
-       std::vector<VkDescriptorImageInfo>      m_imageInfos;
-       std::vector<VkDescriptorBufferInfo>     m_bufferInfos;
-       std::vector<VkBufferView>                       m_texelBufferViews;
+       struct WriteDescriptorInfo
+       {
+               std::vector<VkDescriptorImageInfo>      imageInfos;
+               std::vector<VkDescriptorBufferInfo>     bufferInfos;
+               std::vector<VkBufferView>                       texelBufferViews;
+       };
+
+       std::vector<WriteDescriptorInfo>        m_writeDescriptorInfos;
 
        std::vector<VkWriteDescriptorSet>       m_writes;
        std::vector<VkCopyDescriptorSet>        m_copies;
index ef499fe..3bcc88b 100644 (file)
@@ -34,7 +34,7 @@ virtual VkResult      setEvent                                                                                (VkDevice device, VkEvent event) const;
 virtual VkResult       resetEvent                                                                              (VkDevice device, VkEvent event) const;
 virtual VkResult       createQueryPool                                                                 (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const;
 virtual void           destroyQueryPool                                                                (VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) const;
-virtual VkResult       getQueryPoolResults                                                             (VkDevice device, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const;
+virtual VkResult       getQueryPoolResults                                                             (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const;
 virtual VkResult       createBuffer                                                                    (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const;
 virtual void           destroyBuffer                                                                   (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const;
 virtual VkResult       createBufferView                                                                (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const;
@@ -79,8 +79,8 @@ virtual VkResult      beginCommandBuffer                                                              (VkCommandBuffer commandBuffer, const
 virtual VkResult       endCommandBuffer                                                                (VkCommandBuffer commandBuffer) const;
 virtual VkResult       resetCommandBuffer                                                              (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const;
 virtual void           cmdBindPipeline                                                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const;
-virtual void           cmdSetViewport                                                                  (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports) const;
-virtual void           cmdSetScissor                                                                   (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors) const;
+virtual void           cmdSetViewport                                                                  (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const;
+virtual void           cmdSetScissor                                                                   (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const;
 virtual void           cmdSetLineWidth                                                                 (VkCommandBuffer commandBuffer, float lineWidth) const;
 virtual void           cmdSetDepthBias                                                                 (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const;
 virtual void           cmdSetBlendConstants                                                    (VkCommandBuffer commandBuffer, const float blendConstants[4]) const;
@@ -90,7 +90,7 @@ virtual void          cmdSetStencilWriteMask                                                  (VkCommandBuffer commandBuffer, VkSte
 virtual void           cmdSetStencilReference                                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const;
 virtual void           cmdBindDescriptorSets                                                   (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const;
 virtual void           cmdBindIndexBuffer                                                              (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const;
-virtual void           cmdBindVertexBuffers                                                    (VkCommandBuffer commandBuffer, deUint32 startBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const;
+virtual void           cmdBindVertexBuffers                                                    (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const;
 virtual void           cmdDraw                                                                                 (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const;
 virtual void           cmdDrawIndexed                                                                  (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const;
 virtual void           cmdDrawIndirect                                                                 (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const;
@@ -110,15 +110,15 @@ virtual void              cmdClearAttachments                                                             (VkCommandBuffer commandBuffer, deUint3
 virtual void           cmdResolveImage                                                                 (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const;
 virtual void           cmdSetEvent                                                                             (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const;
 virtual void           cmdResetEvent                                                                   (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const;
-virtual void           cmdWaitEvents                                                                   (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers) const;
-virtual void           cmdPipelineBarrier                                                              (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers) const;
-virtual void           cmdBeginQuery                                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry, VkQueryControlFlags flags) const;
-virtual void           cmdEndQuery                                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry) const;
-virtual void           cmdResetQueryPool                                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount) const;
-virtual void           cmdWriteTimestamp                                                               (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 entry) const;
-virtual void           cmdCopyQueryPoolResults                                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const;
+virtual void           cmdWaitEvents                                                                   (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const;
+virtual void           cmdPipelineBarrier                                                              (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const;
+virtual void           cmdBeginQuery                                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const;
+virtual void           cmdEndQuery                                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const;
+virtual void           cmdResetQueryPool                                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const;
+virtual void           cmdWriteTimestamp                                                               (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const;
+virtual void           cmdCopyQueryPoolResults                                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const;
 virtual void           cmdPushConstants                                                                (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const;
 virtual void           cmdBeginRenderPass                                                              (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const;
 virtual void           cmdNextSubpass                                                                  (VkCommandBuffer commandBuffer, VkSubpassContents contents) const;
 virtual void           cmdEndRenderPass                                                                (VkCommandBuffer commandBuffer) const;
-virtual void           cmdExecuteCommands                                                              (VkCommandBuffer commandBuffer, deUint32 commandBuffersCount, const VkCommandBuffer* pCommandBuffers) const;
+virtual void           cmdExecuteCommands                                                              (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const;
index 4577d04..ff65bf2 100644 (file)
@@ -167,9 +167,9 @@ void DeviceDriver::destroyQueryPool (VkDevice device, VkQueryPool queryPool, con
        m_vk.destroyQueryPool(device, queryPool, pAllocator);
 }
 
-VkResult DeviceDriver::getQueryPoolResults (VkDevice device, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const
+VkResult DeviceDriver::getQueryPoolResults (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const
 {
-       return m_vk.getQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
+       return m_vk.getQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
 }
 
 VkResult DeviceDriver::createBuffer (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const
@@ -392,14 +392,14 @@ void DeviceDriver::cmdBindPipeline (VkCommandBuffer commandBuffer, VkPipelineBin
        m_vk.cmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
 }
 
-void DeviceDriver::cmdSetViewport (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports) const
+void DeviceDriver::cmdSetViewport (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const
 {
-       m_vk.cmdSetViewport(commandBuffer, viewportCount, pViewports);
+       m_vk.cmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
 }
 
-void DeviceDriver::cmdSetScissor (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors) const
+void DeviceDriver::cmdSetScissor (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const
 {
-       m_vk.cmdSetScissor(commandBuffer, scissorCount, pScissors);
+       m_vk.cmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
 }
 
 void DeviceDriver::cmdSetLineWidth (VkCommandBuffer commandBuffer, float lineWidth) const
@@ -447,9 +447,9 @@ void DeviceDriver::cmdBindIndexBuffer (VkCommandBuffer commandBuffer, VkBuffer b
        m_vk.cmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
 }
 
-void DeviceDriver::cmdBindVertexBuffers (VkCommandBuffer commandBuffer, deUint32 startBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const
+void DeviceDriver::cmdBindVertexBuffers (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const
 {
-       m_vk.cmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
+       m_vk.cmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
 }
 
 void DeviceDriver::cmdDraw (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const
@@ -547,39 +547,39 @@ void DeviceDriver::cmdResetEvent (VkCommandBuffer commandBuffer, VkEvent event,
        m_vk.cmdResetEvent(commandBuffer, event, stageMask);
 }
 
-void DeviceDriver::cmdWaitEvents (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers) const
+void DeviceDriver::cmdWaitEvents (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const
 {
-       m_vk.cmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
+       m_vk.cmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
 }
 
-void DeviceDriver::cmdPipelineBarrier (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers) const
+void DeviceDriver::cmdPipelineBarrier (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const
 {
-       m_vk.cmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
+       m_vk.cmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
 }
 
-void DeviceDriver::cmdBeginQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry, VkQueryControlFlags flags) const
+void DeviceDriver::cmdBeginQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const
 {
-       m_vk.cmdBeginQuery(commandBuffer, queryPool, entry, flags);
+       m_vk.cmdBeginQuery(commandBuffer, queryPool, query, flags);
 }
 
-void DeviceDriver::cmdEndQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry) const
+void DeviceDriver::cmdEndQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const
 {
-       m_vk.cmdEndQuery(commandBuffer, queryPool, entry);
+       m_vk.cmdEndQuery(commandBuffer, queryPool, query);
 }
 
-void DeviceDriver::cmdResetQueryPool (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount) const
+void DeviceDriver::cmdResetQueryPool (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const
 {
-       m_vk.cmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
+       m_vk.cmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
 }
 
-void DeviceDriver::cmdWriteTimestamp (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 entry) const
+void DeviceDriver::cmdWriteTimestamp (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const
 {
-       m_vk.cmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, entry);
+       m_vk.cmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
 }
 
-void DeviceDriver::cmdCopyQueryPoolResults (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const
+void DeviceDriver::cmdCopyQueryPoolResults (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const
 {
-       m_vk.cmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
+       m_vk.cmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
 }
 
 void DeviceDriver::cmdPushConstants (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const
@@ -602,7 +602,7 @@ void DeviceDriver::cmdEndRenderPass (VkCommandBuffer commandBuffer) const
        m_vk.cmdEndRenderPass(commandBuffer);
 }
 
-void DeviceDriver::cmdExecuteCommands (VkCommandBuffer commandBuffer, deUint32 commandBuffersCount, const VkCommandBuffer* pCommandBuffers) const
+void DeviceDriver::cmdExecuteCommands (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const
 {
-       m_vk.cmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
+       m_vk.cmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
 }
index ea6e7d4..8630c6d 100644 (file)
@@ -50,7 +50,7 @@ typedef VKAPI_ATTR VkResult                           (VKAPI_CALL* SetEventFunc)                                                                              (VkDevice dev
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ResetEventFunc)                                                                    (VkDevice device, VkEvent event);
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateQueryPoolFunc)                                                               (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyQueryPoolFunc)                                                              (VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
-typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetQueryPoolResultsFunc)                                                   (VkDevice device, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetQueryPoolResultsFunc)                                                   (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateBufferFunc)                                                                  (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyBufferFunc)                                                                 (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateBufferViewFunc)                                                              (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
@@ -95,8 +95,8 @@ typedef VKAPI_ATTR VkResult                           (VKAPI_CALL* BeginCommandBufferFunc)                                                    (VkCom
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EndCommandBufferFunc)                                                              (VkCommandBuffer commandBuffer);
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ResetCommandBufferFunc)                                                    (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindPipelineFunc)                                                               (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetViewportFunc)                                                                (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetScissorFunc)                                                                 (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetViewportFunc)                                                                (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetScissorFunc)                                                                 (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetLineWidthFunc)                                                               (VkCommandBuffer commandBuffer, float lineWidth);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDepthBiasFunc)                                                               (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetBlendConstantsFunc)                                                  (VkCommandBuffer commandBuffer, const float blendConstants[4]);
@@ -106,7 +106,7 @@ typedef VKAPI_ATTR void                                     (VKAPI_CALL* CmdSetStencilWriteMaskFunc)                                                (VkCom
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetStencilReferenceFunc)                                                (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindDescriptorSetsFunc)                                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindIndexBufferFunc)                                                    (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindVertexBuffersFunc)                                                  (VkCommandBuffer commandBuffer, deUint32 startBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindVertexBuffersFunc)                                                  (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawFunc)                                                                               (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndexedFunc)                                                                (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndirectFunc)                                                               (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride);
@@ -126,15 +126,15 @@ typedef VKAPI_ATTR void                                   (VKAPI_CALL* CmdClearAttachmentsFunc)                                                   (VkComma
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdResolveImageFunc)                                                               (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetEventFunc)                                                                   (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdResetEventFunc)                                                                 (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdWaitEventsFunc)                                                                 (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdPipelineBarrierFunc)                                                    (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBeginQueryFunc)                                                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry, VkQueryControlFlags flags);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdEndQueryFunc)                                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdResetQueryPoolFunc)                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdWriteTimestampFunc)                                                             (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 entry);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyQueryPoolResultsFunc)                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdWaitEventsFunc)                                                                 (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdPipelineBarrierFunc)                                                    (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBeginQueryFunc)                                                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdEndQueryFunc)                                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdResetQueryPoolFunc)                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdWriteTimestampFunc)                                                             (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyQueryPoolResultsFunc)                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdPushConstantsFunc)                                                              (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBeginRenderPassFunc)                                                    (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdNextSubpassFunc)                                                                (VkCommandBuffer commandBuffer, VkSubpassContents contents);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdEndRenderPassFunc)                                                              (VkCommandBuffer commandBuffer);
-typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdExecuteCommandsFunc)                                                    (VkCommandBuffer commandBuffer, deUint32 commandBuffersCount, const VkCommandBuffer* pCommandBuffers);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdExecuteCommandsFunc)                                                    (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers);
index 5dc290a..3f42d06 100644 (file)
@@ -466,7 +466,7 @@ tcu::CompressedTexFormat mapVkCompressedFormat (VkFormat format)
                case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:            return tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_RGBA;
                case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:                     return tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_SRGB8_ALPHA8;
                case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:            return tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_RGBA;
-               case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:                     return tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_SRGB8_ALPHA8;
+               case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:                     return tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_SRGB8_ALPHA8;
                case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:            return tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_RGBA;
                case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:                     return tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_SRGB8_ALPHA8;
                case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:            return tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_RGBA;
@@ -474,7 +474,7 @@ tcu::CompressedTexFormat mapVkCompressedFormat (VkFormat format)
                case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:            return tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_RGBA;
                case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:                     return tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_SRGB8_ALPHA8;
                case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:            return tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_RGBA;
-               case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:                     return tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_SRGB8_ALPHA8;
+               case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:                     return tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_SRGB8_ALPHA8;
                case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:            return tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_RGBA;
                case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:                     return tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_SRGB8_ALPHA8;
                case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:            return tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_RGBA;
@@ -662,7 +662,7 @@ VkFilter mapFilterMode (tcu::Sampler::FilterMode filterMode)
 {
        DE_STATIC_ASSERT(tcu::Sampler::FILTERMODE_LAST == 6);
 
-       switch(filterMode)
+       switch (filterMode)
        {
                case tcu::Sampler::NEAREST:                                     return VK_FILTER_NEAREST;
                case tcu::Sampler::LINEAR:                                      return VK_FILTER_LINEAR;
@@ -681,10 +681,14 @@ VkSamplerMipmapMode mapMipmapMode (tcu::Sampler::FilterMode filterMode)
 {
        DE_STATIC_ASSERT(tcu::Sampler::FILTERMODE_LAST == 6);
 
-       switch(filterMode)
+       // \note VkSamplerCreateInfo doesn't have a flag for disabling mipmapping. Instead
+       //               minLod = 0 and maxLod = 0.25 should be used to match OpenGL NEAREST and LINEAR
+       //               filtering mode behavior.
+
+       switch (filterMode)
        {
-               case tcu::Sampler::NEAREST:                                     return VK_SAMPLER_MIPMAP_MODE_BASE;
-               case tcu::Sampler::LINEAR:                                      return VK_SAMPLER_MIPMAP_MODE_BASE;
+               case tcu::Sampler::NEAREST:                                     return VK_SAMPLER_MIPMAP_MODE_NEAREST;
+               case tcu::Sampler::LINEAR:                                      return VK_SAMPLER_MIPMAP_MODE_NEAREST;
                case tcu::Sampler::NEAREST_MIPMAP_NEAREST:      return VK_SAMPLER_MIPMAP_MODE_NEAREST;
                case tcu::Sampler::NEAREST_MIPMAP_LINEAR:       return VK_SAMPLER_MIPMAP_MODE_LINEAR;
                case tcu::Sampler::LINEAR_MIPMAP_NEAREST:       return VK_SAMPLER_MIPMAP_MODE_NEAREST;
@@ -697,7 +701,7 @@ VkSamplerMipmapMode mapMipmapMode (tcu::Sampler::FilterMode filterMode)
 
 VkSamplerAddressMode mapWrapMode (tcu::Sampler::WrapMode wrapMode)
 {
-       switch(wrapMode)
+       switch (wrapMode)
        {
                case tcu::Sampler::CLAMP_TO_EDGE:               return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
                case tcu::Sampler::CLAMP_TO_BORDER:             return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
@@ -712,7 +716,7 @@ VkSamplerAddressMode mapWrapMode (tcu::Sampler::WrapMode wrapMode)
 
 vk::VkCompareOp mapCompareMode (tcu::Sampler::CompareMode mode)
 {
-       switch(mode)
+       switch (mode)
        {
                case tcu::Sampler::COMPAREMODE_NONE:                            return vk::VK_COMPARE_OP_NEVER;
                case tcu::Sampler::COMPAREMODE_LESS:                            return vk::VK_COMPARE_OP_LESS;
@@ -729,8 +733,74 @@ vk::VkCompareOp mapCompareMode (tcu::Sampler::CompareMode mode)
        }
 }
 
+static VkBorderColor mapBorderColor (tcu::TextureChannelClass channelClass, const rr::GenericVec4& color)
+{
+       if (channelClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER)
+       {
+               const tcu::UVec4        uColor  = color.get<deUint32>();
+
+               if (uColor              == tcu::UVec4(0, 0, 0, 0)) return VK_BORDER_COLOR_INT_TRANSPARENT_BLACK;
+               else if (uColor == tcu::UVec4(0, 0, 0, 1)) return VK_BORDER_COLOR_INT_OPAQUE_BLACK;
+               else if (uColor == tcu::UVec4(1, 1, 1, 1)) return VK_BORDER_COLOR_INT_OPAQUE_WHITE;
+       }
+       else if (channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER)
+       {
+               const tcu::IVec4        sColor  = color.get<deInt32>();
+
+               if (sColor              == tcu::IVec4(0, 0, 0, 0)) return VK_BORDER_COLOR_INT_TRANSPARENT_BLACK;
+               else if (sColor == tcu::IVec4(0, 0, 0, 1)) return VK_BORDER_COLOR_INT_OPAQUE_BLACK;
+               else if (sColor == tcu::IVec4(1, 1, 1, 1)) return VK_BORDER_COLOR_INT_OPAQUE_WHITE;
+       }
+       else
+       {
+               const tcu::Vec4         fColor  = color.get<float>();
+
+               if (fColor              == tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f)) return VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK;
+               else if (fColor == tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f)) return VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK;
+               else if (fColor == tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f)) return VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE;
+       }
+
+       DE_FATAL("Unsupported border color");
+       return VK_BORDER_COLOR_LAST;
+}
+
+VkSamplerCreateInfo mapSampler (const tcu::Sampler& sampler, const tcu::TextureFormat& format)
+{
+       const bool                                      compareEnabled  = (sampler.compare != tcu::Sampler::COMPAREMODE_NONE);
+       const VkCompareOp                       compareOp               = (compareEnabled) ? (mapCompareMode(sampler.compare)) : (VK_COMPARE_OP_ALWAYS);
+       const VkBorderColor                     borderColor             = mapBorderColor(getTextureChannelClass(format.type), sampler.borderColor);
+       const bool                                      isMipmapEnabled = (sampler.minFilter != tcu::Sampler::NEAREST && sampler.minFilter != tcu::Sampler::LINEAR);
+
+       const VkSamplerCreateInfo       createInfo              =
+       {
+               VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
+               DE_NULL,
+               (VkSamplerCreateFlags)0,
+               mapFilterMode(sampler.magFilter),                                                       // magFilter
+               mapFilterMode(sampler.minFilter),                                                       // minFilter
+               mapMipmapMode(sampler.minFilter),                                                       // mipMode
+               mapWrapMode(sampler.wrapS),                                                                     // addressU
+               mapWrapMode(sampler.wrapT),                                                                     // addressV
+               mapWrapMode(sampler.wrapR),                                                                     // addressW
+               0.0f,                                                                                                           // mipLodBias
+               VK_FALSE,                                                                                                       // anisotropyEnable
+               1.0f,                                                                                                           // maxAnisotropy
+               (VkBool32)(compareEnabled ? VK_TRUE : VK_FALSE),                        // compareEnable
+               compareOp,                                                                                                      // compareOp
+               0.0f,                                                                                                           // minLod
+               (isMipmapEnabled ? 1000.0f : 0.25f),                                            // maxLod
+               borderColor,                                                                                            // borderColor
+               (VkBool32)(sampler.normalizedCoords ? VK_FALSE : VK_TRUE),      // unnormalizedCoords
+       };
+
+       return createInfo;
+}
+
 tcu::Sampler mapVkSampler (const VkSamplerCreateInfo& samplerCreateInfo)
 {
+       // \note minLod & maxLod are not supported by tcu::Sampler. LOD must be clamped
+       //       before passing it to tcu::Texture*::sample*()
+
        tcu::Sampler sampler(mapVkSamplerAddressMode(samplerCreateInfo.addressModeU),
                                                 mapVkSamplerAddressMode(samplerCreateInfo.addressModeV),
                                                 mapVkSamplerAddressMode(samplerCreateInfo.addressModeW),
@@ -744,30 +814,33 @@ tcu::Sampler mapVkSampler (const VkSamplerCreateInfo& samplerCreateInfo)
                                                 tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f),
                                                 true);
 
+       if (samplerCreateInfo.anisotropyEnable)
+               TCU_THROW(InternalError, "Anisotropic filtering is not supported by tcu::Sampler");
+
        switch (samplerCreateInfo.borderColor)
        {
-       case VK_BORDER_COLOR_INT_OPAQUE_BLACK:
-               sampler.borderColor = tcu::UVec4(0,0,0,1);
-               break;
-       case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:
-               sampler.borderColor = tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f);
-               break;
-       case VK_BORDER_COLOR_INT_OPAQUE_WHITE:
-               sampler.borderColor = tcu::UVec4(1, 1, 1, 1);
-               break;
-       case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:
-               sampler.borderColor = tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f);
-               break;
-       case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:
-               sampler.borderColor = tcu::UVec4(0,0,0,0);
-               break;
-       case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
-               sampler.borderColor = tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f);
-               break;
-
-       default:
-               DE_ASSERT(false);
-               break;
+               case VK_BORDER_COLOR_INT_OPAQUE_BLACK:
+                       sampler.borderColor = tcu::UVec4(0,0,0,1);
+                       break;
+               case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:
+                       sampler.borderColor = tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f);
+                       break;
+               case VK_BORDER_COLOR_INT_OPAQUE_WHITE:
+                       sampler.borderColor = tcu::UVec4(1, 1, 1, 1);
+                       break;
+               case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:
+                       sampler.borderColor = tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f);
+                       break;
+               case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:
+                       sampler.borderColor = tcu::UVec4(0,0,0,0);
+                       break;
+               case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
+                       sampler.borderColor = tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f);
+                       break;
+
+               default:
+                       DE_ASSERT(false);
+                       break;
        }
 
        return sampler;
@@ -817,7 +890,6 @@ tcu::Sampler::FilterMode mapVkMinTexFilter (VkFilter filter, VkSamplerMipmapMode
                case VK_FILTER_LINEAR:
                        switch (mipMode)
                        {
-                               case VK_SAMPLER_MIPMAP_MODE_BASE:               return tcu::Sampler::LINEAR;
                                case VK_SAMPLER_MIPMAP_MODE_LINEAR:             return tcu::Sampler::LINEAR_MIPMAP_LINEAR;
                                case VK_SAMPLER_MIPMAP_MODE_NEAREST:    return tcu::Sampler::LINEAR_MIPMAP_NEAREST;
                                default:
@@ -828,7 +900,6 @@ tcu::Sampler::FilterMode mapVkMinTexFilter (VkFilter filter, VkSamplerMipmapMode
                case VK_FILTER_NEAREST:
                        switch (mipMode)
                        {
-                               case VK_SAMPLER_MIPMAP_MODE_BASE:               return tcu::Sampler::NEAREST;
                                case VK_SAMPLER_MIPMAP_MODE_LINEAR:             return tcu::Sampler::NEAREST_MIPMAP_LINEAR;
                                case VK_SAMPLER_MIPMAP_MODE_NEAREST:    return tcu::Sampler::NEAREST_MIPMAP_NEAREST;
                                default:
index c130b57..6ab0b53 100644 (file)
@@ -70,6 +70,7 @@ VkSamplerMipmapMode                   mapMipmapMode                           (tcu::Sampler::FilterMode filterMode);
 VkSamplerAddressMode           mapWrapMode                                     (tcu::Sampler::WrapMode wrapMode);
 VkCompareOp                                    mapCompareMode                          (tcu::Sampler::CompareMode mode);
 VkFormat                                       mapTextureFormat                        (const tcu::TextureFormat& format);
+VkSamplerCreateInfo                    mapSampler                                      (const tcu::Sampler& sampler, const tcu::TextureFormat& format);
 
 void                                           imageUtilSelfTest                       (void);
 
index b685974..cf0fbcd 100644 (file)
@@ -547,7 +547,7 @@ VKAPI_ATTR VkResult VKAPI_CALL allocateDescriptorSets (VkDevice, const VkDescrip
 {
        DescriptorPool* const   poolImpl        = reinterpret_cast<DescriptorPool*>((deUintptr)pAllocateInfo->descriptorPool.getInternal());
 
-       for (deUint32 ndx = 0; ndx < pAllocateInfo->setLayoutCount; ++ndx)
+       for (deUint32 ndx = 0; ndx < pAllocateInfo->descriptorSetCount; ++ndx)
        {
                try
                {
@@ -593,7 +593,7 @@ VKAPI_ATTR VkResult VKAPI_CALL allocateCommandBuffers (VkDevice device, const Vk
 {
        if (pAllocateInfo && pCommandBuffers)
        {
-               for (deUint32 ndx = 0; ndx < pAllocateInfo->bufferCount; ++ndx)
+               for (deUint32 ndx = 0; ndx < pAllocateInfo->commandBufferCount; ++ndx)
                {
                        pCommandBuffers[ndx] = reinterpret_cast<VkCommandBuffer>(new CommandBuffer(device, pAllocateInfo->commandPool, pAllocateInfo->level));
                }
index 176b8a2..722feea 100644 (file)
@@ -446,11 +446,11 @@ VKAPI_ATTR VkResult VKAPI_CALL resetEvent (VkDevice device, VkEvent event)
        return VK_SUCCESS;
 }
 
-VKAPI_ATTR VkResult VKAPI_CALL getQueryPoolResults (VkDevice device, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags)
+VKAPI_ATTR VkResult VKAPI_CALL getQueryPoolResults (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags)
 {
        DE_UNREF(device);
        DE_UNREF(queryPool);
-       DE_UNREF(startQuery);
+       DE_UNREF(firstQuery);
        DE_UNREF(queryCount);
        DE_UNREF(dataSize);
        DE_UNREF(pData);
@@ -536,16 +536,18 @@ VKAPI_ATTR void VKAPI_CALL cmdBindPipeline (VkCommandBuffer commandBuffer, VkPip
        DE_UNREF(pipeline);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdSetViewport (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports)
+VKAPI_ATTR void VKAPI_CALL cmdSetViewport (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports)
 {
        DE_UNREF(commandBuffer);
+       DE_UNREF(firstViewport);
        DE_UNREF(viewportCount);
        DE_UNREF(pViewports);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdSetScissor (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors)
+VKAPI_ATTR void VKAPI_CALL cmdSetScissor (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors)
 {
        DE_UNREF(commandBuffer);
+       DE_UNREF(firstScissor);
        DE_UNREF(scissorCount);
        DE_UNREF(pScissors);
 }
@@ -618,10 +620,10 @@ VKAPI_ATTR void VKAPI_CALL cmdBindIndexBuffer (VkCommandBuffer commandBuffer, Vk
        DE_UNREF(indexType);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdBindVertexBuffers (VkCommandBuffer commandBuffer, deUint32 startBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
+VKAPI_ATTR void VKAPI_CALL cmdBindVertexBuffers (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
 {
        DE_UNREF(commandBuffer);
-       DE_UNREF(startBinding);
+       DE_UNREF(firstBinding);
        DE_UNREF(bindingCount);
        DE_UNREF(pBuffers);
        DE_UNREF(pOffsets);
@@ -803,7 +805,7 @@ VKAPI_ATTR void VKAPI_CALL cmdResetEvent (VkCommandBuffer commandBuffer, VkEvent
        DE_UNREF(stageMask);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdWaitEvents (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers)
+VKAPI_ATTR void VKAPI_CALL cmdWaitEvents (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
 {
        DE_UNREF(commandBuffer);
        DE_UNREF(eventCount);
@@ -811,55 +813,63 @@ VKAPI_ATTR void VKAPI_CALL cmdWaitEvents (VkCommandBuffer commandBuffer, deUint3
        DE_UNREF(srcStageMask);
        DE_UNREF(dstStageMask);
        DE_UNREF(memoryBarrierCount);
-       DE_UNREF(ppMemoryBarriers);
+       DE_UNREF(pMemoryBarriers);
+       DE_UNREF(bufferMemoryBarrierCount);
+       DE_UNREF(pBufferMemoryBarriers);
+       DE_UNREF(imageMemoryBarrierCount);
+       DE_UNREF(pImageMemoryBarriers);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdPipelineBarrier (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers)
+VKAPI_ATTR void VKAPI_CALL cmdPipelineBarrier (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
 {
        DE_UNREF(commandBuffer);
        DE_UNREF(srcStageMask);
        DE_UNREF(dstStageMask);
        DE_UNREF(dependencyFlags);
        DE_UNREF(memoryBarrierCount);
-       DE_UNREF(ppMemoryBarriers);
+       DE_UNREF(pMemoryBarriers);
+       DE_UNREF(bufferMemoryBarrierCount);
+       DE_UNREF(pBufferMemoryBarriers);
+       DE_UNREF(imageMemoryBarrierCount);
+       DE_UNREF(pImageMemoryBarriers);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdBeginQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry, VkQueryControlFlags flags)
+VKAPI_ATTR void VKAPI_CALL cmdBeginQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags)
 {
        DE_UNREF(commandBuffer);
        DE_UNREF(queryPool);
-       DE_UNREF(entry);
+       DE_UNREF(query);
        DE_UNREF(flags);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdEndQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry)
+VKAPI_ATTR void VKAPI_CALL cmdEndQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query)
 {
        DE_UNREF(commandBuffer);
        DE_UNREF(queryPool);
-       DE_UNREF(entry);
+       DE_UNREF(query);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdResetQueryPool (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount)
+VKAPI_ATTR void VKAPI_CALL cmdResetQueryPool (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount)
 {
        DE_UNREF(commandBuffer);
        DE_UNREF(queryPool);
-       DE_UNREF(startQuery);
+       DE_UNREF(firstQuery);
        DE_UNREF(queryCount);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdWriteTimestamp (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 entry)
+VKAPI_ATTR void VKAPI_CALL cmdWriteTimestamp (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query)
 {
        DE_UNREF(commandBuffer);
        DE_UNREF(pipelineStage);
        DE_UNREF(queryPool);
-       DE_UNREF(entry);
+       DE_UNREF(query);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdCopyQueryPoolResults (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags)
+VKAPI_ATTR void VKAPI_CALL cmdCopyQueryPoolResults (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags)
 {
        DE_UNREF(commandBuffer);
        DE_UNREF(queryPool);
-       DE_UNREF(startQuery);
+       DE_UNREF(firstQuery);
        DE_UNREF(queryCount);
        DE_UNREF(dstBuffer);
        DE_UNREF(dstOffset);
@@ -895,10 +905,10 @@ VKAPI_ATTR void VKAPI_CALL cmdEndRenderPass (VkCommandBuffer commandBuffer)
        DE_UNREF(commandBuffer);
 }
 
-VKAPI_ATTR void VKAPI_CALL cmdExecuteCommands (VkCommandBuffer commandBuffer, deUint32 commandBuffersCount, const VkCommandBuffer* pCommandBuffers)
+VKAPI_ATTR void VKAPI_CALL cmdExecuteCommands (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers)
 {
        DE_UNREF(commandBuffer);
-       DE_UNREF(commandBuffersCount);
+       DE_UNREF(commandBufferCount);
        DE_UNREF(pCommandBuffers);
 }
 
index 1ef4f96..d6b6abf 100644 (file)
@@ -64,7 +64,7 @@ Move<VkPipeline> createComputePipeline (const DeviceInterface&                                vk,
 Move<VkCommandBuffer> allocateCommandBuffer (const DeviceInterface& vk, VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo)
 {
        VkCommandBuffer object = 0;
-       DE_ASSERT(pAllocateInfo->bufferCount == 1u);
+       DE_ASSERT(pAllocateInfo->commandBufferCount == 1u);
        VK_CHECK(vk.allocateCommandBuffers(device, pAllocateInfo, &object));
        return Move<VkCommandBuffer>(check<VkCommandBuffer>(object), Deleter<VkCommandBuffer>(vk, device, pAllocateInfo->commandPool));
 }
@@ -72,7 +72,7 @@ Move<VkCommandBuffer> allocateCommandBuffer (const DeviceInterface& vk, VkDevice
 Move<VkDescriptorSet> allocateDescriptorSet (const DeviceInterface& vk, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo)
 {
        VkDescriptorSet object = 0;
-       DE_ASSERT(pAllocateInfo->setLayoutCount == 1u);
+       DE_ASSERT(pAllocateInfo->descriptorSetCount == 1u);
        VK_CHECK(vk.allocateDescriptorSets(device, pAllocateInfo, &object));
        return Move<VkDescriptorSet>(check<VkDescriptorSet>(object), Deleter<VkDescriptorSet>(vk, device, pAllocateInfo->descriptorPool));
 }
index 4bd1508..92bf240 100644 (file)
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  */
-const char*    getResultName                                   (VkResult value);
-const char*    getStructureTypeName                    (VkStructureType value);
-const char*    getSystemAllocationScopeName    (VkSystemAllocationScope value);
-const char*    getInternalAllocationTypeName   (VkInternalAllocationType value);
-const char*    getFormatName                                   (VkFormat value);
-const char*    getImageTypeName                                (VkImageType value);
-const char*    getImageTilingName                              (VkImageTiling value);
-const char*    getPhysicalDeviceTypeName               (VkPhysicalDeviceType value);
-const char*    getQueryTypeName                                (VkQueryType value);
-const char*    getSharingModeName                              (VkSharingMode value);
-const char*    getImageLayoutName                              (VkImageLayout value);
-const char*    getImageViewTypeName                    (VkImageViewType value);
-const char*    getComponentSwizzleName                 (VkComponentSwizzle value);
-const char*    getVertexInputRateName                  (VkVertexInputRate value);
-const char*    getPrimitiveTopologyName                (VkPrimitiveTopology value);
-const char*    getPolygonModeName                              (VkPolygonMode value);
-const char*    getFrontFaceName                                (VkFrontFace value);
-const char*    getCompareOpName                                (VkCompareOp value);
-const char*    getStencilOpName                                (VkStencilOp value);
-const char*    getLogicOpName                                  (VkLogicOp value);
-const char*    getBlendFactorName                              (VkBlendFactor value);
-const char*    getBlendOpName                                  (VkBlendOp value);
-const char*    getDynamicStateName                             (VkDynamicState value);
-const char*    getFilterName                                   (VkFilter value);
-const char*    getSamplerMipmapModeName                (VkSamplerMipmapMode value);
-const char*    getSamplerAddressModeName               (VkSamplerAddressMode value);
-const char*    getBorderColorName                              (VkBorderColor value);
-const char*    getDescriptorTypeName                   (VkDescriptorType value);
-const char*    getAttachmentLoadOpName                 (VkAttachmentLoadOp value);
-const char*    getAttachmentStoreOpName                (VkAttachmentStoreOp value);
-const char*    getPipelineBindPointName                (VkPipelineBindPoint value);
-const char*    getCommandBufferLevelName               (VkCommandBufferLevel value);
-const char*    getIndexTypeName                                (VkIndexType value);
-const char*    getSubpassContentsName                  (VkSubpassContents value);
-const char*    getColorSpaceKHRName                    (VkColorSpaceKHR value);
-const char*    getPresentModeKHRName                   (VkPresentModeKHR value);
+const char*    getPipelineCacheHeaderVersionName       (VkPipelineCacheHeaderVersion value);
+const char*    getResultName                                           (VkResult value);
+const char*    getStructureTypeName                            (VkStructureType value);
+const char*    getSystemAllocationScopeName            (VkSystemAllocationScope value);
+const char*    getInternalAllocationTypeName           (VkInternalAllocationType value);
+const char*    getFormatName                                           (VkFormat value);
+const char*    getImageTypeName                                        (VkImageType value);
+const char*    getImageTilingName                                      (VkImageTiling value);
+const char*    getPhysicalDeviceTypeName                       (VkPhysicalDeviceType value);
+const char*    getQueryTypeName                                        (VkQueryType value);
+const char*    getSharingModeName                                      (VkSharingMode value);
+const char*    getImageLayoutName                                      (VkImageLayout value);
+const char*    getImageViewTypeName                            (VkImageViewType value);
+const char*    getComponentSwizzleName                         (VkComponentSwizzle value);
+const char*    getVertexInputRateName                          (VkVertexInputRate value);
+const char*    getPrimitiveTopologyName                        (VkPrimitiveTopology value);
+const char*    getPolygonModeName                                      (VkPolygonMode value);
+const char*    getFrontFaceName                                        (VkFrontFace value);
+const char*    getCompareOpName                                        (VkCompareOp value);
+const char*    getStencilOpName                                        (VkStencilOp value);
+const char*    getLogicOpName                                          (VkLogicOp value);
+const char*    getBlendFactorName                                      (VkBlendFactor value);
+const char*    getBlendOpName                                          (VkBlendOp value);
+const char*    getDynamicStateName                                     (VkDynamicState value);
+const char*    getFilterName                                           (VkFilter value);
+const char*    getSamplerMipmapModeName                        (VkSamplerMipmapMode value);
+const char*    getSamplerAddressModeName                       (VkSamplerAddressMode value);
+const char*    getBorderColorName                                      (VkBorderColor value);
+const char*    getDescriptorTypeName                           (VkDescriptorType value);
+const char*    getAttachmentLoadOpName                         (VkAttachmentLoadOp value);
+const char*    getAttachmentStoreOpName                        (VkAttachmentStoreOp value);
+const char*    getPipelineBindPointName                        (VkPipelineBindPoint value);
+const char*    getCommandBufferLevelName                       (VkCommandBufferLevel value);
+const char*    getIndexTypeName                                        (VkIndexType value);
+const char*    getSubpassContentsName                          (VkSubpassContents value);
+const char*    getColorSpaceKHRName                            (VkColorSpaceKHR value);
+const char*    getPresentModeKHRName                           (VkPresentModeKHR value);
 
-inline tcu::Format::Enum<VkResult>                                     getResultStr                                    (VkResult value)                                        { return tcu::Format::Enum<VkResult>(getResultName, value);                                                                     }
-inline tcu::Format::Enum<VkStructureType>                      getStructureTypeStr                             (VkStructureType value)                         { return tcu::Format::Enum<VkStructureType>(getStructureTypeName, value);                                       }
-inline tcu::Format::Enum<VkSystemAllocationScope>      getSystemAllocationScopeStr             (VkSystemAllocationScope value)         { return tcu::Format::Enum<VkSystemAllocationScope>(getSystemAllocationScopeName, value);       }
-inline tcu::Format::Enum<VkInternalAllocationType>     getInternalAllocationTypeStr    (VkInternalAllocationType value)        { return tcu::Format::Enum<VkInternalAllocationType>(getInternalAllocationTypeName, value);     }
-inline tcu::Format::Enum<VkFormat>                                     getFormatStr                                    (VkFormat value)                                        { return tcu::Format::Enum<VkFormat>(getFormatName, value);                                                                     }
-inline tcu::Format::Enum<VkImageType>                          getImageTypeStr                                 (VkImageType value)                                     { return tcu::Format::Enum<VkImageType>(getImageTypeName, value);                                                       }
-inline tcu::Format::Enum<VkImageTiling>                                getImageTilingStr                               (VkImageTiling value)                           { return tcu::Format::Enum<VkImageTiling>(getImageTilingName, value);                                           }
-inline tcu::Format::Enum<VkPhysicalDeviceType>         getPhysicalDeviceTypeStr                (VkPhysicalDeviceType value)            { return tcu::Format::Enum<VkPhysicalDeviceType>(getPhysicalDeviceTypeName, value);                     }
-inline tcu::Format::Enum<VkQueryType>                          getQueryTypeStr                                 (VkQueryType value)                                     { return tcu::Format::Enum<VkQueryType>(getQueryTypeName, value);                                                       }
-inline tcu::Format::Enum<VkSharingMode>                                getSharingModeStr                               (VkSharingMode value)                           { return tcu::Format::Enum<VkSharingMode>(getSharingModeName, value);                                           }
-inline tcu::Format::Enum<VkImageLayout>                                getImageLayoutStr                               (VkImageLayout value)                           { return tcu::Format::Enum<VkImageLayout>(getImageLayoutName, value);                                           }
-inline tcu::Format::Enum<VkImageViewType>                      getImageViewTypeStr                             (VkImageViewType value)                         { return tcu::Format::Enum<VkImageViewType>(getImageViewTypeName, value);                                       }
-inline tcu::Format::Enum<VkComponentSwizzle>           getComponentSwizzleStr                  (VkComponentSwizzle value)                      { return tcu::Format::Enum<VkComponentSwizzle>(getComponentSwizzleName, value);                         }
-inline tcu::Format::Enum<VkVertexInputRate>                    getVertexInputRateStr                   (VkVertexInputRate value)                       { return tcu::Format::Enum<VkVertexInputRate>(getVertexInputRateName, value);                           }
-inline tcu::Format::Enum<VkPrimitiveTopology>          getPrimitiveTopologyStr                 (VkPrimitiveTopology value)                     { return tcu::Format::Enum<VkPrimitiveTopology>(getPrimitiveTopologyName, value);                       }
-inline tcu::Format::Enum<VkPolygonMode>                                getPolygonModeStr                               (VkPolygonMode value)                           { return tcu::Format::Enum<VkPolygonMode>(getPolygonModeName, value);                                           }
-inline tcu::Format::Enum<VkFrontFace>                          getFrontFaceStr                                 (VkFrontFace value)                                     { return tcu::Format::Enum<VkFrontFace>(getFrontFaceName, value);                                                       }
-inline tcu::Format::Enum<VkCompareOp>                          getCompareOpStr                                 (VkCompareOp value)                                     { return tcu::Format::Enum<VkCompareOp>(getCompareOpName, value);                                                       }
-inline tcu::Format::Enum<VkStencilOp>                          getStencilOpStr                                 (VkStencilOp value)                                     { return tcu::Format::Enum<VkStencilOp>(getStencilOpName, value);                                                       }
-inline tcu::Format::Enum<VkLogicOp>                                    getLogicOpStr                                   (VkLogicOp value)                                       { return tcu::Format::Enum<VkLogicOp>(getLogicOpName, value);                                                           }
-inline tcu::Format::Enum<VkBlendFactor>                                getBlendFactorStr                               (VkBlendFactor value)                           { return tcu::Format::Enum<VkBlendFactor>(getBlendFactorName, value);                                           }
-inline tcu::Format::Enum<VkBlendOp>                                    getBlendOpStr                                   (VkBlendOp value)                                       { return tcu::Format::Enum<VkBlendOp>(getBlendOpName, value);                                                           }
-inline tcu::Format::Enum<VkDynamicState>                       getDynamicStateStr                              (VkDynamicState value)                          { return tcu::Format::Enum<VkDynamicState>(getDynamicStateName, value);                                         }
-inline tcu::Format::Enum<VkFilter>                                     getFilterStr                                    (VkFilter value)                                        { return tcu::Format::Enum<VkFilter>(getFilterName, value);                                                                     }
-inline tcu::Format::Enum<VkSamplerMipmapMode>          getSamplerMipmapModeStr                 (VkSamplerMipmapMode value)                     { return tcu::Format::Enum<VkSamplerMipmapMode>(getSamplerMipmapModeName, value);                       }
-inline tcu::Format::Enum<VkSamplerAddressMode>         getSamplerAddressModeStr                (VkSamplerAddressMode value)            { return tcu::Format::Enum<VkSamplerAddressMode>(getSamplerAddressModeName, value);                     }
-inline tcu::Format::Enum<VkBorderColor>                                getBorderColorStr                               (VkBorderColor value)                           { return tcu::Format::Enum<VkBorderColor>(getBorderColorName, value);                                           }
-inline tcu::Format::Enum<VkDescriptorType>                     getDescriptorTypeStr                    (VkDescriptorType value)                        { return tcu::Format::Enum<VkDescriptorType>(getDescriptorTypeName, value);                                     }
-inline tcu::Format::Enum<VkAttachmentLoadOp>           getAttachmentLoadOpStr                  (VkAttachmentLoadOp value)                      { return tcu::Format::Enum<VkAttachmentLoadOp>(getAttachmentLoadOpName, value);                         }
-inline tcu::Format::Enum<VkAttachmentStoreOp>          getAttachmentStoreOpStr                 (VkAttachmentStoreOp value)                     { return tcu::Format::Enum<VkAttachmentStoreOp>(getAttachmentStoreOpName, value);                       }
-inline tcu::Format::Enum<VkPipelineBindPoint>          getPipelineBindPointStr                 (VkPipelineBindPoint value)                     { return tcu::Format::Enum<VkPipelineBindPoint>(getPipelineBindPointName, value);                       }
-inline tcu::Format::Enum<VkCommandBufferLevel>         getCommandBufferLevelStr                (VkCommandBufferLevel value)            { return tcu::Format::Enum<VkCommandBufferLevel>(getCommandBufferLevelName, value);                     }
-inline tcu::Format::Enum<VkIndexType>                          getIndexTypeStr                                 (VkIndexType value)                                     { return tcu::Format::Enum<VkIndexType>(getIndexTypeName, value);                                                       }
-inline tcu::Format::Enum<VkSubpassContents>                    getSubpassContentsStr                   (VkSubpassContents value)                       { return tcu::Format::Enum<VkSubpassContents>(getSubpassContentsName, value);                           }
-inline tcu::Format::Enum<VkColorSpaceKHR>                      getColorSpaceKHRStr                             (VkColorSpaceKHR value)                         { return tcu::Format::Enum<VkColorSpaceKHR>(getColorSpaceKHRName, value);                                       }
-inline tcu::Format::Enum<VkPresentModeKHR>                     getPresentModeKHRStr                    (VkPresentModeKHR value)                        { return tcu::Format::Enum<VkPresentModeKHR>(getPresentModeKHRName, value);                                     }
+inline tcu::Format::Enum<VkPipelineCacheHeaderVersion> getPipelineCacheHeaderVersionStr        (VkPipelineCacheHeaderVersion value)    { return tcu::Format::Enum<VkPipelineCacheHeaderVersion>(getPipelineCacheHeaderVersionName, value);     }
+inline tcu::Format::Enum<VkResult>                                             getResultStr                                            (VkResult value)                                                { return tcu::Format::Enum<VkResult>(getResultName, value);                                                                                     }
+inline tcu::Format::Enum<VkStructureType>                              getStructureTypeStr                                     (VkStructureType value)                                 { return tcu::Format::Enum<VkStructureType>(getStructureTypeName, value);                                                       }
+inline tcu::Format::Enum<VkSystemAllocationScope>              getSystemAllocationScopeStr                     (VkSystemAllocationScope value)                 { return tcu::Format::Enum<VkSystemAllocationScope>(getSystemAllocationScopeName, value);                       }
+inline tcu::Format::Enum<VkInternalAllocationType>             getInternalAllocationTypeStr            (VkInternalAllocationType value)                { return tcu::Format::Enum<VkInternalAllocationType>(getInternalAllocationTypeName, value);                     }
+inline tcu::Format::Enum<VkFormat>                                             getFormatStr                                            (VkFormat value)                                                { return tcu::Format::Enum<VkFormat>(getFormatName, value);                                                                                     }
+inline tcu::Format::Enum<VkImageType>                                  getImageTypeStr                                         (VkImageType value)                                             { return tcu::Format::Enum<VkImageType>(getImageTypeName, value);                                                                       }
+inline tcu::Format::Enum<VkImageTiling>                                        getImageTilingStr                                       (VkImageTiling value)                                   { return tcu::Format::Enum<VkImageTiling>(getImageTilingName, value);                                                           }
+inline tcu::Format::Enum<VkPhysicalDeviceType>                 getPhysicalDeviceTypeStr                        (VkPhysicalDeviceType value)                    { return tcu::Format::Enum<VkPhysicalDeviceType>(getPhysicalDeviceTypeName, value);                                     }
+inline tcu::Format::Enum<VkQueryType>                                  getQueryTypeStr                                         (VkQueryType value)                                             { return tcu::Format::Enum<VkQueryType>(getQueryTypeName, value);                                                                       }
+inline tcu::Format::Enum<VkSharingMode>                                        getSharingModeStr                                       (VkSharingMode value)                                   { return tcu::Format::Enum<VkSharingMode>(getSharingModeName, value);                                                           }
+inline tcu::Format::Enum<VkImageLayout>                                        getImageLayoutStr                                       (VkImageLayout value)                                   { return tcu::Format::Enum<VkImageLayout>(getImageLayoutName, value);                                                           }
+inline tcu::Format::Enum<VkImageViewType>                              getImageViewTypeStr                                     (VkImageViewType value)                                 { return tcu::Format::Enum<VkImageViewType>(getImageViewTypeName, value);                                                       }
+inline tcu::Format::Enum<VkComponentSwizzle>                   getComponentSwizzleStr                          (VkComponentSwizzle value)                              { return tcu::Format::Enum<VkComponentSwizzle>(getComponentSwizzleName, value);                                         }
+inline tcu::Format::Enum<VkVertexInputRate>                            getVertexInputRateStr                           (VkVertexInputRate value)                               { return tcu::Format::Enum<VkVertexInputRate>(getVertexInputRateName, value);                                           }
+inline tcu::Format::Enum<VkPrimitiveTopology>                  getPrimitiveTopologyStr                         (VkPrimitiveTopology value)                             { return tcu::Format::Enum<VkPrimitiveTopology>(getPrimitiveTopologyName, value);                                       }
+inline tcu::Format::Enum<VkPolygonMode>                                        getPolygonModeStr                                       (VkPolygonMode value)                                   { return tcu::Format::Enum<VkPolygonMode>(getPolygonModeName, value);                                                           }
+inline tcu::Format::Enum<VkFrontFace>                                  getFrontFaceStr                                         (VkFrontFace value)                                             { return tcu::Format::Enum<VkFrontFace>(getFrontFaceName, value);                                                                       }
+inline tcu::Format::Enum<VkCompareOp>                                  getCompareOpStr                                         (VkCompareOp value)                                             { return tcu::Format::Enum<VkCompareOp>(getCompareOpName, value);                                                                       }
+inline tcu::Format::Enum<VkStencilOp>                                  getStencilOpStr                                         (VkStencilOp value)                                             { return tcu::Format::Enum<VkStencilOp>(getStencilOpName, value);                                                                       }
+inline tcu::Format::Enum<VkLogicOp>                                            getLogicOpStr                                           (VkLogicOp value)                                               { return tcu::Format::Enum<VkLogicOp>(getLogicOpName, value);                                                                           }
+inline tcu::Format::Enum<VkBlendFactor>                                        getBlendFactorStr                                       (VkBlendFactor value)                                   { return tcu::Format::Enum<VkBlendFactor>(getBlendFactorName, value);                                                           }
+inline tcu::Format::Enum<VkBlendOp>                                            getBlendOpStr                                           (VkBlendOp value)                                               { return tcu::Format::Enum<VkBlendOp>(getBlendOpName, value);                                                                           }
+inline tcu::Format::Enum<VkDynamicState>                               getDynamicStateStr                                      (VkDynamicState value)                                  { return tcu::Format::Enum<VkDynamicState>(getDynamicStateName, value);                                                         }
+inline tcu::Format::Enum<VkFilter>                                             getFilterStr                                            (VkFilter value)                                                { return tcu::Format::Enum<VkFilter>(getFilterName, value);                                                                                     }
+inline tcu::Format::Enum<VkSamplerMipmapMode>                  getSamplerMipmapModeStr                         (VkSamplerMipmapMode value)                             { return tcu::Format::Enum<VkSamplerMipmapMode>(getSamplerMipmapModeName, value);                                       }
+inline tcu::Format::Enum<VkSamplerAddressMode>                 getSamplerAddressModeStr                        (VkSamplerAddressMode value)                    { return tcu::Format::Enum<VkSamplerAddressMode>(getSamplerAddressModeName, value);                                     }
+inline tcu::Format::Enum<VkBorderColor>                                        getBorderColorStr                                       (VkBorderColor value)                                   { return tcu::Format::Enum<VkBorderColor>(getBorderColorName, value);                                                           }
+inline tcu::Format::Enum<VkDescriptorType>                             getDescriptorTypeStr                            (VkDescriptorType value)                                { return tcu::Format::Enum<VkDescriptorType>(getDescriptorTypeName, value);                                                     }
+inline tcu::Format::Enum<VkAttachmentLoadOp>                   getAttachmentLoadOpStr                          (VkAttachmentLoadOp value)                              { return tcu::Format::Enum<VkAttachmentLoadOp>(getAttachmentLoadOpName, value);                                         }
+inline tcu::Format::Enum<VkAttachmentStoreOp>                  getAttachmentStoreOpStr                         (VkAttachmentStoreOp value)                             { return tcu::Format::Enum<VkAttachmentStoreOp>(getAttachmentStoreOpName, value);                                       }
+inline tcu::Format::Enum<VkPipelineBindPoint>                  getPipelineBindPointStr                         (VkPipelineBindPoint value)                             { return tcu::Format::Enum<VkPipelineBindPoint>(getPipelineBindPointName, value);                                       }
+inline tcu::Format::Enum<VkCommandBufferLevel>                 getCommandBufferLevelStr                        (VkCommandBufferLevel value)                    { return tcu::Format::Enum<VkCommandBufferLevel>(getCommandBufferLevelName, value);                                     }
+inline tcu::Format::Enum<VkIndexType>                                  getIndexTypeStr                                         (VkIndexType value)                                             { return tcu::Format::Enum<VkIndexType>(getIndexTypeName, value);                                                                       }
+inline tcu::Format::Enum<VkSubpassContents>                            getSubpassContentsStr                           (VkSubpassContents value)                               { return tcu::Format::Enum<VkSubpassContents>(getSubpassContentsName, value);                                           }
+inline tcu::Format::Enum<VkColorSpaceKHR>                              getColorSpaceKHRStr                                     (VkColorSpaceKHR value)                                 { return tcu::Format::Enum<VkColorSpaceKHR>(getColorSpaceKHRName, value);                                                       }
+inline tcu::Format::Enum<VkPresentModeKHR>                             getPresentModeKHRStr                            (VkPresentModeKHR value)                                { return tcu::Format::Enum<VkPresentModeKHR>(getPresentModeKHRName, value);                                                     }
 
-inline std::ostream&   operator<<      (std::ostream& s, VkResult value)                                       { return s << getResultStr(value);                                      }
-inline std::ostream&   operator<<      (std::ostream& s, VkStructureType value)                        { return s << getStructureTypeStr(value);                       }
-inline std::ostream&   operator<<      (std::ostream& s, VkSystemAllocationScope value)        { return s << getSystemAllocationScopeStr(value);       }
-inline std::ostream&   operator<<      (std::ostream& s, VkInternalAllocationType value)       { return s << getInternalAllocationTypeStr(value);      }
-inline std::ostream&   operator<<      (std::ostream& s, VkFormat value)                                       { return s << getFormatStr(value);                                      }
-inline std::ostream&   operator<<      (std::ostream& s, VkImageType value)                            { return s << getImageTypeStr(value);                           }
-inline std::ostream&   operator<<      (std::ostream& s, VkImageTiling value)                          { return s << getImageTilingStr(value);                         }
-inline std::ostream&   operator<<      (std::ostream& s, VkPhysicalDeviceType value)           { return s << getPhysicalDeviceTypeStr(value);          }
-inline std::ostream&   operator<<      (std::ostream& s, VkQueryType value)                            { return s << getQueryTypeStr(value);                           }
-inline std::ostream&   operator<<      (std::ostream& s, VkSharingMode value)                          { return s << getSharingModeStr(value);                         }
-inline std::ostream&   operator<<      (std::ostream& s, VkImageLayout value)                          { return s << getImageLayoutStr(value);                         }
-inline std::ostream&   operator<<      (std::ostream& s, VkImageViewType value)                        { return s << getImageViewTypeStr(value);                       }
-inline std::ostream&   operator<<      (std::ostream& s, VkComponentSwizzle value)                     { return s << getComponentSwizzleStr(value);            }
-inline std::ostream&   operator<<      (std::ostream& s, VkVertexInputRate value)                      { return s << getVertexInputRateStr(value);                     }
-inline std::ostream&   operator<<      (std::ostream& s, VkPrimitiveTopology value)            { return s << getPrimitiveTopologyStr(value);           }
-inline std::ostream&   operator<<      (std::ostream& s, VkPolygonMode value)                          { return s << getPolygonModeStr(value);                         }
-inline std::ostream&   operator<<      (std::ostream& s, VkFrontFace value)                            { return s << getFrontFaceStr(value);                           }
-inline std::ostream&   operator<<      (std::ostream& s, VkCompareOp value)                            { return s << getCompareOpStr(value);                           }
-inline std::ostream&   operator<<      (std::ostream& s, VkStencilOp value)                            { return s << getStencilOpStr(value);                           }
-inline std::ostream&   operator<<      (std::ostream& s, VkLogicOp value)                                      { return s << getLogicOpStr(value);                                     }
-inline std::ostream&   operator<<      (std::ostream& s, VkBlendFactor value)                          { return s << getBlendFactorStr(value);                         }
-inline std::ostream&   operator<<      (std::ostream& s, VkBlendOp value)                                      { return s << getBlendOpStr(value);                                     }
-inline std::ostream&   operator<<      (std::ostream& s, VkDynamicState value)                         { return s << getDynamicStateStr(value);                        }
-inline std::ostream&   operator<<      (std::ostream& s, VkFilter value)                                       { return s << getFilterStr(value);                                      }
-inline std::ostream&   operator<<      (std::ostream& s, VkSamplerMipmapMode value)            { return s << getSamplerMipmapModeStr(value);           }
-inline std::ostream&   operator<<      (std::ostream& s, VkSamplerAddressMode value)           { return s << getSamplerAddressModeStr(value);          }
-inline std::ostream&   operator<<      (std::ostream& s, VkBorderColor value)                          { return s << getBorderColorStr(value);                         }
-inline std::ostream&   operator<<      (std::ostream& s, VkDescriptorType value)                       { return s << getDescriptorTypeStr(value);                      }
-inline std::ostream&   operator<<      (std::ostream& s, VkAttachmentLoadOp value)                     { return s << getAttachmentLoadOpStr(value);            }
-inline std::ostream&   operator<<      (std::ostream& s, VkAttachmentStoreOp value)            { return s << getAttachmentStoreOpStr(value);           }
-inline std::ostream&   operator<<      (std::ostream& s, VkPipelineBindPoint value)            { return s << getPipelineBindPointStr(value);           }
-inline std::ostream&   operator<<      (std::ostream& s, VkCommandBufferLevel value)           { return s << getCommandBufferLevelStr(value);          }
-inline std::ostream&   operator<<      (std::ostream& s, VkIndexType value)                            { return s << getIndexTypeStr(value);                           }
-inline std::ostream&   operator<<      (std::ostream& s, VkSubpassContents value)                      { return s << getSubpassContentsStr(value);                     }
-inline std::ostream&   operator<<      (std::ostream& s, VkColorSpaceKHR value)                        { return s << getColorSpaceKHRStr(value);                       }
-inline std::ostream&   operator<<      (std::ostream& s, VkPresentModeKHR value)                       { return s << getPresentModeKHRStr(value);                      }
+inline std::ostream&   operator<<      (std::ostream& s, VkPipelineCacheHeaderVersion value)   { return s << getPipelineCacheHeaderVersionStr(value);  }
+inline std::ostream&   operator<<      (std::ostream& s, VkResult value)                                               { return s << getResultStr(value);                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkStructureType value)                                { return s << getStructureTypeStr(value);                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkSystemAllocationScope value)                { return s << getSystemAllocationScopeStr(value);               }
+inline std::ostream&   operator<<      (std::ostream& s, VkInternalAllocationType value)               { return s << getInternalAllocationTypeStr(value);              }
+inline std::ostream&   operator<<      (std::ostream& s, VkFormat value)                                               { return s << getFormatStr(value);                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkImageType value)                                    { return s << getImageTypeStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkImageTiling value)                                  { return s << getImageTilingStr(value);                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkPhysicalDeviceType value)                   { return s << getPhysicalDeviceTypeStr(value);                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkQueryType value)                                    { return s << getQueryTypeStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkSharingMode value)                                  { return s << getSharingModeStr(value);                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkImageLayout value)                                  { return s << getImageLayoutStr(value);                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkImageViewType value)                                { return s << getImageViewTypeStr(value);                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkComponentSwizzle value)                             { return s << getComponentSwizzleStr(value);                    }
+inline std::ostream&   operator<<      (std::ostream& s, VkVertexInputRate value)                              { return s << getVertexInputRateStr(value);                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkPrimitiveTopology value)                    { return s << getPrimitiveTopologyStr(value);                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkPolygonMode value)                                  { return s << getPolygonModeStr(value);                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkFrontFace value)                                    { return s << getFrontFaceStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkCompareOp value)                                    { return s << getCompareOpStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkStencilOp value)                                    { return s << getStencilOpStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkLogicOp value)                                              { return s << getLogicOpStr(value);                                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkBlendFactor value)                                  { return s << getBlendFactorStr(value);                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkBlendOp value)                                              { return s << getBlendOpStr(value);                                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkDynamicState value)                                 { return s << getDynamicStateStr(value);                                }
+inline std::ostream&   operator<<      (std::ostream& s, VkFilter value)                                               { return s << getFilterStr(value);                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkSamplerMipmapMode value)                    { return s << getSamplerMipmapModeStr(value);                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkSamplerAddressMode value)                   { return s << getSamplerAddressModeStr(value);                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkBorderColor value)                                  { return s << getBorderColorStr(value);                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkDescriptorType value)                               { return s << getDescriptorTypeStr(value);                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkAttachmentLoadOp value)                             { return s << getAttachmentLoadOpStr(value);                    }
+inline std::ostream&   operator<<      (std::ostream& s, VkAttachmentStoreOp value)                    { return s << getAttachmentStoreOpStr(value);                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkPipelineBindPoint value)                    { return s << getPipelineBindPointStr(value);                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkCommandBufferLevel value)                   { return s << getCommandBufferLevelStr(value);                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkIndexType value)                                    { return s << getIndexTypeStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkSubpassContents value)                              { return s << getSubpassContentsStr(value);                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkColorSpaceKHR value)                                { return s << getColorSpaceKHRStr(value);                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkPresentModeKHR value)                               { return s << getPresentModeKHRStr(value);                              }
 
 tcu::Format::Bitfield<32>      getFormatFeatureFlagsStr                                        (VkFormatFeatureFlags value);
 tcu::Format::Bitfield<32>      getImageUsageFlagsStr                                           (VkImageUsageFlags value);
@@ -119,6 +122,7 @@ tcu::Format::Bitfield<32>   getSampleCountFlagsStr                                          (VkSampleCountFlags value)
 tcu::Format::Bitfield<32>      getQueueFlagsStr                                                        (VkQueueFlags value);
 tcu::Format::Bitfield<32>      getMemoryPropertyFlagsStr                                       (VkMemoryPropertyFlags value);
 tcu::Format::Bitfield<32>      getMemoryHeapFlagsStr                                           (VkMemoryHeapFlags value);
+tcu::Format::Bitfield<32>      getPipelineStageFlagsStr                                        (VkPipelineStageFlags value);
 tcu::Format::Bitfield<32>      getImageAspectFlagsStr                                          (VkImageAspectFlags value);
 tcu::Format::Bitfield<32>      getSparseImageFormatFlagsStr                            (VkSparseImageFormatFlags value);
 tcu::Format::Bitfield<32>      getSparseMemoryBindFlagsStr                                     (VkSparseMemoryBindFlags value);
@@ -133,7 +137,6 @@ tcu::Format::Bitfield<32>   getCullModeFlagsStr                                                     (VkCullModeFlags value);
 tcu::Format::Bitfield<32>      getColorComponentFlagsStr                                       (VkColorComponentFlags value);
 tcu::Format::Bitfield<32>      getDescriptorPoolCreateFlagsStr                         (VkDescriptorPoolCreateFlags value);
 tcu::Format::Bitfield<32>      getAttachmentDescriptionFlagsStr                        (VkAttachmentDescriptionFlags value);
-tcu::Format::Bitfield<32>      getPipelineStageFlagsStr                                        (VkPipelineStageFlags value);
 tcu::Format::Bitfield<32>      getAccessFlagsStr                                                       (VkAccessFlags value);
 tcu::Format::Bitfield<32>      getDependencyFlagsStr                                           (VkDependencyFlags value);
 tcu::Format::Bitfield<32>      getCommandPoolCreateFlagsStr                            (VkCommandPoolCreateFlags value);
@@ -159,7 +162,7 @@ tcu::Format::Bitfield<32>   getPipelineCacheCreateFlagsStr                          (VkPipelineCacheCrea
 tcu::Format::Bitfield<32>      getPipelineShaderStageCreateFlagsStr            (VkPipelineShaderStageCreateFlags value);
 tcu::Format::Bitfield<32>      getPipelineVertexInputStateCreateFlagsStr       (VkPipelineVertexInputStateCreateFlags value);
 tcu::Format::Bitfield<32>      getPipelineInputAssemblyStateCreateFlagsStr     (VkPipelineInputAssemblyStateCreateFlags value);
-tcu::Format::Bitfield<32>      getPipelineTesselationStateCreateFlagsStr       (VkPipelineTesselationStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineTessellationStateCreateFlagsStr      (VkPipelineTessellationStateCreateFlags value);
 tcu::Format::Bitfield<32>      getPipelineViewportStateCreateFlagsStr          (VkPipelineViewportStateCreateFlags value);
 tcu::Format::Bitfield<32>      getPipelineRasterizationStateCreateFlagsStr     (VkPipelineRasterizationStateCreateFlags value);
 tcu::Format::Bitfield<32>      getPipelineMultisampleStateCreateFlagsStr       (VkPipelineMultisampleStateCreateFlags value);
@@ -176,6 +179,12 @@ tcu::Format::Bitfield<32>  getSubpassDescriptionFlagsStr                           (VkSubpassDescription
 tcu::Format::Bitfield<32>      getSwapchainCreateFlagsKHRStr                           (VkSwapchainCreateFlagsKHR value);
 tcu::Format::Bitfield<32>      getDisplayModeCreateFlagsKHRStr                         (VkDisplayModeCreateFlagsKHR value);
 tcu::Format::Bitfield<32>      getDisplaySurfaceCreateFlagsKHRStr                      (VkDisplaySurfaceCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getXlibSurfaceCreateFlagsKHRStr                         (VkXlibSurfaceCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getXcbSurfaceCreateFlagsKHRStr                          (VkXcbSurfaceCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getWaylandSurfaceCreateFlagsKHRStr                      (VkWaylandSurfaceCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getMirSurfaceCreateFlagsKHRStr                          (VkMirSurfaceCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getAndroidSurfaceCreateFlagsKHRStr                      (VkAndroidSurfaceCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getWin32SurfaceCreateFlagsKHRStr                        (VkWin32SurfaceCreateFlagsKHR value);
 
 std::ostream&  operator<<      (std::ostream& s, const VkApplicationInfo& value);
 std::ostream&  operator<<      (std::ostream& s, const VkInstanceCreateInfo& value);
@@ -264,6 +273,7 @@ std::ostream&       operator<<      (std::ostream& s, const VkSubpassDependency& value);
 std::ostream&  operator<<      (std::ostream& s, const VkRenderPassCreateInfo& value);
 std::ostream&  operator<<      (std::ostream& s, const VkCommandPoolCreateInfo& value);
 std::ostream&  operator<<      (std::ostream& s, const VkCommandBufferAllocateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCommandBufferInheritanceInfo& value);
 std::ostream&  operator<<      (std::ostream& s, const VkCommandBufferBeginInfo& value);
 std::ostream&  operator<<      (std::ostream& s, const VkBufferCopy& value);
 std::ostream&  operator<<      (std::ostream& s, const VkImageSubresourceLayers& value);
@@ -276,22 +286,10 @@ std::ostream&     operator<<      (std::ostream& s, const VkClearValue& value);
 std::ostream&  operator<<      (std::ostream& s, const VkClearAttachment& value);
 std::ostream&  operator<<      (std::ostream& s, const VkClearRect& value);
 std::ostream&  operator<<      (std::ostream& s, const VkImageResolve& value);
-std::ostream&  operator<<      (std::ostream& s, const VkRenderPassBeginInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryBarrier& value);
 std::ostream&  operator<<      (std::ostream& s, const VkBufferMemoryBarrier& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageMemoryBarrier& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRenderPassBeginInfo& value);
 std::ostream&  operator<<      (std::ostream& s, const VkDispatchIndirectCommand& value);
 std::ostream&  operator<<      (std::ostream& s, const VkDrawIndexedIndirectCommand& value);
 std::ostream&  operator<<      (std::ostream& s, const VkDrawIndirectCommand& value);
-std::ostream&  operator<<      (std::ostream& s, const VkImageMemoryBarrier& value);
-std::ostream&  operator<<      (std::ostream& s, const VkMemoryBarrier& value);
-std::ostream&  operator<<      (std::ostream& s, const VkSurfaceCapabilitiesKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkSurfaceFormatKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkSwapchainCreateInfoKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkPresentInfoKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkDisplayPropertiesKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkDisplayModeParametersKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkDisplayModePropertiesKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkDisplayModeCreateInfoKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkDisplayPlaneCapabilitiesKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkDisplayPlanePropertiesKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkDisplaySurfaceCreateInfoKHR& value);
-std::ostream&  operator<<      (std::ostream& s, const VkDisplayPresentInfoKHR& value);
index 021b7ab..c5aa62c 100644 (file)
@@ -31,6 +31,15 @@ template<> const char*       getTypeName<VkSwapchainKHR>                     (void) { return "VkSwapchai
 template<> const char* getTypeName<VkDisplayKHR>                       (void) { return "VkDisplayKHR";                         }
 template<> const char* getTypeName<VkDisplayModeKHR>           (void) { return "VkDisplayModeKHR";                     }
 
+const char* getPipelineCacheHeaderVersionName (VkPipelineCacheHeaderVersion value)
+{
+       switch (value)
+       {
+               case VK_PIPELINE_CACHE_HEADER_VERSION_ONE:      return "VK_PIPELINE_CACHE_HEADER_VERSION_ONE";
+               default:                                                                        return DE_NULL;
+       }
+}
+
 const char* getResultName (VkResult value)
 {
        switch (value)
@@ -57,6 +66,7 @@ const char* getResultName (VkResult value)
                case VK_ERROR_OUT_OF_DATE_KHR:                  return "VK_ERROR_OUT_OF_DATE_KHR";
                case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR";
                case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR: return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
+               case VK_ERROR_VALIDATION_FAILED_EXT:    return "VK_ERROR_VALIDATION_FAILED_EXT";
                default:                                                                return DE_NULL;
        }
 }
@@ -106,6 +116,7 @@ const char* getStructureTypeName (VkStructureType value)
                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:                                         return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO";
                case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO:                                        return "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO";
                case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO:                            return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO";
+               case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO:                         return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO";
                case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO:                                       return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO";
                case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO:                                          return "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO";
                case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:                                           return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER";
@@ -118,6 +129,13 @@ const char* getStructureTypeName (VkStructureType value)
                case VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR:                            return "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR";
                case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR:                         return "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR";
                case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:                                        return "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR";
+               case VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR:                            return "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR:                                     return "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR:                         return "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR:                                     return "VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR:                         return "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR:                           return "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT:                            return "VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT";
                default:                                                                                                                        return DE_NULL;
        }
 }
@@ -617,7 +635,6 @@ const char* getSamplerMipmapModeName (VkSamplerMipmapMode value)
 {
        switch (value)
        {
-               case VK_SAMPLER_MIPMAP_MODE_BASE:               return "VK_SAMPLER_MIPMAP_MODE_BASE";
                case VK_SAMPLER_MIPMAP_MODE_NEAREST:    return "VK_SAMPLER_MIPMAP_MODE_NEAREST";
                case VK_SAMPLER_MIPMAP_MODE_LINEAR:             return "VK_SAMPLER_MIPMAP_MODE_LINEAR";
                default:                                                                return DE_NULL;
@@ -850,6 +867,31 @@ tcu::Format::Bitfield<32> getMemoryHeapFlagsStr (VkMemoryHeapFlags value)
        return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
 }
 
+tcu::Format::Bitfield<32> getPipelineStageFlagsStr (VkPipelineStageFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                                         "VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,                                       "VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,                                        "VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,                                       "VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,         "VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,      "VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,                                     "VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,                                     "VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,                        "VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,                         "VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,                     "VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,                                      "VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TRANSFER_BIT,                                            "VK_PIPELINE_STAGE_TRANSFER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,                                      "VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_HOST_BIT,                                                        "VK_PIPELINE_STAGE_HOST_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,                                        "VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,                                        "VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
 tcu::Format::Bitfield<32> getImageAspectFlagsStr (VkImageAspectFlags value)
 {
        static const tcu::Format::BitDesc s_desc[] =
@@ -914,7 +956,6 @@ tcu::Format::Bitfield<32> getQueryResultFlagsStr (VkQueryResultFlags value)
 {
        static const tcu::Format::BitDesc s_desc[] =
        {
-               tcu::Format::BitDesc(VK_QUERY_RESULT_DEFAULT,                           "VK_QUERY_RESULT_DEFAULT"),
                tcu::Format::BitDesc(VK_QUERY_RESULT_64_BIT,                            "VK_QUERY_RESULT_64_BIT"),
                tcu::Format::BitDesc(VK_QUERY_RESULT_WAIT_BIT,                          "VK_QUERY_RESULT_WAIT_BIT"),
                tcu::Format::BitDesc(VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,     "VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"),
@@ -1020,30 +1061,6 @@ tcu::Format::Bitfield<32> getAttachmentDescriptionFlagsStr (VkAttachmentDescript
        return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
 }
 
-tcu::Format::Bitfield<32> getPipelineStageFlagsStr (VkPipelineStageFlags value)
-{
-       static const tcu::Format::BitDesc s_desc[] =
-       {
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                                         "VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,                                       "VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,                                        "VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,                                       "VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,         "VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,      "VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,                                     "VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,                                     "VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,                        "VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,                         "VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,                     "VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,                                      "VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TRANSFER_BIT,                                            "VK_PIPELINE_STAGE_TRANSFER_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_HOST_BIT,                                                        "VK_PIPELINE_STAGE_HOST_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,                                        "VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,                                        "VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"),
-       };
-       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
-}
-
 tcu::Format::Bitfield<32> getAccessFlagsStr (VkAccessFlags value)
 {
        static const tcu::Format::BitDesc s_desc[] =
@@ -1130,7 +1147,6 @@ tcu::Format::Bitfield<32> getStencilFaceFlagsStr (VkStencilFaceFlags value)
 {
        static const tcu::Format::BitDesc s_desc[] =
        {
-               tcu::Format::BitDesc(VK_STENCIL_FACE_NONE,              "VK_STENCIL_FACE_NONE"),
                tcu::Format::BitDesc(VK_STENCIL_FACE_FRONT_BIT, "VK_STENCIL_FACE_FRONT_BIT"),
                tcu::Format::BitDesc(VK_STENCIL_FACE_BACK_BIT,  "VK_STENCIL_FACE_BACK_BIT"),
                tcu::Format::BitDesc(VK_STENCIL_FRONT_AND_BACK, "VK_STENCIL_FRONT_AND_BACK"),
@@ -1142,7 +1158,7 @@ tcu::Format::Bitfield<32> getSurfaceTransformFlagsKHRStr (VkSurfaceTransformFlag
 {
        static const tcu::Format::BitDesc s_desc[] =
        {
-               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_NONE_BIT_KHR,                                                 "VK_SURFACE_TRANSFORM_NONE_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,                                             "VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"),
                tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,                                    "VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"),
                tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,                                   "VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"),
                tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,                                   "VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"),
@@ -1249,7 +1265,7 @@ tcu::Format::Bitfield<32> getPipelineInputAssemblyStateCreateFlagsStr (VkPipelin
        return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
 }
 
-tcu::Format::Bitfield<32> getPipelineTesselationStateCreateFlagsStr (VkPipelineTesselationStateCreateFlags value)
+tcu::Format::Bitfield<32> getPipelineTessellationStateCreateFlagsStr (VkPipelineTessellationStateCreateFlags value)
 {
        return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
 }
@@ -1334,6 +1350,36 @@ tcu::Format::Bitfield<32> getDisplaySurfaceCreateFlagsKHRStr (VkDisplaySurfaceCr
        return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
 }
 
+tcu::Format::Bitfield<32> getXlibSurfaceCreateFlagsKHRStr (VkXlibSurfaceCreateFlagsKHR value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getXcbSurfaceCreateFlagsKHRStr (VkXcbSurfaceCreateFlagsKHR value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getWaylandSurfaceCreateFlagsKHRStr (VkWaylandSurfaceCreateFlagsKHR value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getMirSurfaceCreateFlagsKHRStr (VkMirSurfaceCreateFlagsKHR value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getAndroidSurfaceCreateFlagsKHRStr (VkAndroidSurfaceCreateFlagsKHR value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getWin32SurfaceCreateFlagsKHRStr (VkWin32SurfaceCreateFlagsKHR value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
 std::ostream& operator<< (std::ostream& s, const VkApplicationInfo& value)
 {
        s << "VkApplicationInfo = {\n";
@@ -1355,9 +1401,9 @@ std::ostream& operator<< (std::ostream& s, const VkInstanceCreateInfo& value)
        s << "\tpNext = " << value.pNext << '\n';
        s << "\tflags = " << getInstanceCreateFlagsStr(value.flags) << '\n';
        s << "\tpApplicationInfo = " << value.pApplicationInfo << '\n';
-       s << "\tenabledLayerNameCount = " << value.enabledLayerNameCount << '\n';
+       s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
        s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
-       s << "\tenabledExtensionNameCount = " << value.enabledExtensionNameCount << '\n';
+       s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
        s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
        s << '}';
        return s;
@@ -1389,6 +1435,7 @@ std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures& value
        s << "\tdualSrcBlend = " << value.dualSrcBlend << '\n';
        s << "\tlogicOp = " << value.logicOp << '\n';
        s << "\tmultiDrawIndirect = " << value.multiDrawIndirect << '\n';
+       s << "\tdrawIndirectFirstInstance = " << value.drawIndirectFirstInstance << '\n';
        s << "\tdepthClamp = " << value.depthClamp << '\n';
        s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
        s << "\tfillModeNonSolid = " << value.fillModeNonSolid << '\n';
@@ -1432,6 +1479,7 @@ std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures& value
        s << "\tsparseResidency16Samples = " << value.sparseResidency16Samples << '\n';
        s << "\tsparseResidencyAliased = " << value.sparseResidencyAliased << '\n';
        s << "\tvariableMultisampleRate = " << value.variableMultisampleRate << '\n';
+       s << "\tinheritedQueries = " << value.inheritedQueries << '\n';
        s << '}';
        return s;
 }
@@ -1562,6 +1610,7 @@ std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLimits& value)
        s << "\tsampledImageStencilSampleCounts = " << getSampleCountFlagsStr(value.sampledImageStencilSampleCounts) << '\n';
        s << "\tstorageImageSampleCounts = " << getSampleCountFlagsStr(value.storageImageSampleCounts) << '\n';
        s << "\tmaxSampleMaskWords = " << value.maxSampleMaskWords << '\n';
+       s << "\ttimestampComputeAndGraphics = " << value.timestampComputeAndGraphics << '\n';
        s << "\ttimestampPeriod = " << value.timestampPeriod << '\n';
        s << "\tmaxClipDistances = " << value.maxClipDistances << '\n';
        s << "\tmaxCullDistances = " << value.maxCullDistances << '\n';
@@ -1669,9 +1718,9 @@ std::ostream& operator<< (std::ostream& s, const VkDeviceCreateInfo& value)
        s << "\tflags = " << getDeviceCreateFlagsStr(value.flags) << '\n';
        s << "\tqueueCreateInfoCount = " << value.queueCreateInfoCount << '\n';
        s << "\tpQueueCreateInfos = " << value.pQueueCreateInfos << '\n';
-       s << "\tenabledLayerNameCount = " << value.enabledLayerNameCount << '\n';
+       s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
        s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
-       s << "\tenabledExtensionNameCount = " << value.enabledExtensionNameCount << '\n';
+       s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
        s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
        s << "\tpEnabledFeatures = " << value.pEnabledFeatures << '\n';
        s << '}';
@@ -1705,6 +1754,7 @@ std::ostream& operator<< (std::ostream& s, const VkSubmitInfo& value)
        s << "\tpNext = " << value.pNext << '\n';
        s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
        s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
+       s << "\tpWaitDstStageMask = " << value.pWaitDstStageMask << '\n';
        s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
        s << "\tpCommandBuffers = " << value.pCommandBuffers << '\n';
        s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
@@ -1760,7 +1810,7 @@ std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements
 {
        s << "VkSparseImageMemoryRequirements = {\n";
        s << "\tformatProperties = " << value.formatProperties << '\n';
-       s << "\timageMipTailStartLod = " << value.imageMipTailStartLod << '\n';
+       s << "\timageMipTailFirstLod = " << value.imageMipTailFirstLod << '\n';
        s << "\timageMipTailSize = " << value.imageMipTailSize << '\n';
        s << "\timageMipTailOffset = " << value.imageMipTailOffset << '\n';
        s << "\timageMipTailStride = " << value.imageMipTailStride << '\n';
@@ -1899,7 +1949,7 @@ std::ostream& operator<< (std::ostream& s, const VkQueryPoolCreateInfo& value)
        s << "\tpNext = " << value.pNext << '\n';
        s << "\tflags = " << getQueryPoolCreateFlagsStr(value.flags) << '\n';
        s << "\tqueryType = " << value.queryType << '\n';
-       s << "\tentryCount = " << value.entryCount << '\n';
+       s << "\tqueryCount = " << value.queryCount << '\n';
        s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
        s << '}';
        return s;
@@ -1962,6 +2012,7 @@ std::ostream& operator<< (std::ostream& s, const VkSubresourceLayout& value)
        s << "\toffset = " << value.offset << '\n';
        s << "\tsize = " << value.size << '\n';
        s << "\trowPitch = " << value.rowPitch << '\n';
+       s << "\tarrayPitch = " << value.arrayPitch << '\n';
        s << "\tdepthPitch = " << value.depthPitch << '\n';
        s << '}';
        return s;
@@ -2116,7 +2167,7 @@ std::ostream& operator<< (std::ostream& s, const VkPipelineTessellationStateCrea
        s << "VkPipelineTessellationStateCreateInfo = {\n";
        s << "\tsType = " << value.sType << '\n';
        s << "\tpNext = " << value.pNext << '\n';
-       s << "\tflags = " << getPipelineTesselationStateCreateFlagsStr(value.flags) << '\n';
+       s << "\tflags = " << getPipelineTessellationStateCreateFlagsStr(value.flags) << '\n';
        s << "\tpatchControlPoints = " << value.patchControlPoints << '\n';
        s << '}';
        return s;
@@ -2364,6 +2415,7 @@ std::ostream& operator<< (std::ostream& s, const VkSamplerCreateInfo& value)
        s << "\taddressModeV = " << value.addressModeV << '\n';
        s << "\taddressModeW = " << value.addressModeW << '\n';
        s << "\tmipLodBias = " << value.mipLodBias << '\n';
+       s << "\tanisotropyEnable = " << value.anisotropyEnable << '\n';
        s << "\tmaxAnisotropy = " << value.maxAnisotropy << '\n';
        s << "\tcompareEnable = " << value.compareEnable << '\n';
        s << "\tcompareOp = " << value.compareOp << '\n';
@@ -2394,7 +2446,7 @@ std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutCreateInfo
        s << "\tpNext = " << value.pNext << '\n';
        s << "\tflags = " << getDescriptorSetLayoutCreateFlagsStr(value.flags) << '\n';
        s << "\tbindingCount = " << value.bindingCount << '\n';
-       s << "\tpBinding = " << value.pBinding << '\n';
+       s << "\tpBindings = " << value.pBindings << '\n';
        s << '}';
        return s;
 }
@@ -2427,7 +2479,7 @@ std::ostream& operator<< (std::ostream& s, const VkDescriptorSetAllocateInfo& va
        s << "\tsType = " << value.sType << '\n';
        s << "\tpNext = " << value.pNext << '\n';
        s << "\tdescriptorPool = " << value.descriptorPool << '\n';
-       s << "\tsetLayoutCount = " << value.setLayoutCount << '\n';
+       s << "\tdescriptorSetCount = " << value.descriptorSetCount << '\n';
        s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
        s << '}';
        return s;
@@ -2592,17 +2644,16 @@ std::ostream& operator<< (std::ostream& s, const VkCommandBufferAllocateInfo& va
        s << "\tpNext = " << value.pNext << '\n';
        s << "\tcommandPool = " << value.commandPool << '\n';
        s << "\tlevel = " << value.level << '\n';
-       s << "\tbufferCount = " << value.bufferCount << '\n';
+       s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
        s << '}';
        return s;
 }
 
-std::ostream& operator<< (std::ostream& s, const VkCommandBufferBeginInfo& value)
+std::ostream& operator<< (std::ostream& s, const VkCommandBufferInheritanceInfo& value)
 {
-       s << "VkCommandBufferBeginInfo = {\n";
+       s << "VkCommandBufferInheritanceInfo = {\n";
        s << "\tsType = " << value.sType << '\n';
        s << "\tpNext = " << value.pNext << '\n';
-       s << "\tflags = " << getCommandBufferUsageFlagsStr(value.flags) << '\n';
        s << "\trenderPass = " << value.renderPass << '\n';
        s << "\tsubpass = " << value.subpass << '\n';
        s << "\tframebuffer = " << value.framebuffer << '\n';
@@ -2613,6 +2664,17 @@ std::ostream& operator<< (std::ostream& s, const VkCommandBufferBeginInfo& value
        return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkCommandBufferBeginInfo& value)
+{
+       s << "VkCommandBufferBeginInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getCommandBufferUsageFlagsStr(value.flags) << '\n';
+       s << "\tpInheritanceInfo = " << value.pInheritanceInfo << '\n';
+       s << '}';
+       return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkBufferCopy& value)
 {
        s << "VkBufferCopy = {\n";
@@ -2650,11 +2712,9 @@ std::ostream& operator<< (std::ostream& s, const VkImageBlit& value)
 {
        s << "VkImageBlit = {\n";
        s << "\tsrcSubresource = " << value.srcSubresource << '\n';
-       s << "\tsrcOffset = " << value.srcOffset << '\n';
-       s << "\tsrcExtent = " << value.srcExtent << '\n';
+       s << "\tsrcOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.srcOffsets), DE_ARRAY_END(value.srcOffsets)) << '\n';
        s << "\tdstSubresource = " << value.dstSubresource << '\n';
-       s << "\tdstOffset = " << value.dstOffset << '\n';
-       s << "\tdstExtent = " << value.dstExtent << '\n';
+       s << "\tdstOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.dstOffsets), DE_ARRAY_END(value.dstOffsets)) << '\n';
        s << '}';
        return s;
 }
@@ -2732,16 +2792,13 @@ std::ostream& operator<< (std::ostream& s, const VkImageResolve& value)
        return s;
 }
 
-std::ostream& operator<< (std::ostream& s, const VkRenderPassBeginInfo& value)
+std::ostream& operator<< (std::ostream& s, const VkMemoryBarrier& value)
 {
-       s << "VkRenderPassBeginInfo = {\n";
+       s << "VkMemoryBarrier = {\n";
        s << "\tsType = " << value.sType << '\n';
        s << "\tpNext = " << value.pNext << '\n';
-       s << "\trenderPass = " << value.renderPass << '\n';
-       s << "\tframebuffer = " << value.framebuffer << '\n';
-       s << "\trenderArea = " << value.renderArea << '\n';
-       s << "\tclearValueCount = " << value.clearValueCount << '\n';
-       s << "\tpClearValues = " << value.pClearValues << '\n';
+       s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
+       s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
        s << '}';
        return s;
 }
@@ -2762,39 +2819,6 @@ std::ostream& operator<< (std::ostream& s, const VkBufferMemoryBarrier& value)
        return s;
 }
 
-std::ostream& operator<< (std::ostream& s, const VkDispatchIndirectCommand& value)
-{
-       s << "VkDispatchIndirectCommand = {\n";
-       s << "\tx = " << value.x << '\n';
-       s << "\ty = " << value.y << '\n';
-       s << "\tz = " << value.z << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkDrawIndexedIndirectCommand& value)
-{
-       s << "VkDrawIndexedIndirectCommand = {\n";
-       s << "\tindexCount = " << value.indexCount << '\n';
-       s << "\tinstanceCount = " << value.instanceCount << '\n';
-       s << "\tfirstIndex = " << value.firstIndex << '\n';
-       s << "\tvertexOffset = " << value.vertexOffset << '\n';
-       s << "\tfirstInstance = " << value.firstInstance << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkDrawIndirectCommand& value)
-{
-       s << "VkDrawIndirectCommand = {\n";
-       s << "\tvertexCount = " << value.vertexCount << '\n';
-       s << "\tinstanceCount = " << value.instanceCount << '\n';
-       s << "\tfirstVertex = " << value.firstVertex << '\n';
-       s << "\tfirstInstance = " << value.firstInstance << '\n';
-       s << '}';
-       return s;
-}
-
 std::ostream& operator<< (std::ostream& s, const VkImageMemoryBarrier& value)
 {
        s << "VkImageMemoryBarrier = {\n";
@@ -2812,176 +2836,49 @@ std::ostream& operator<< (std::ostream& s, const VkImageMemoryBarrier& value)
        return s;
 }
 
-std::ostream& operator<< (std::ostream& s, const VkMemoryBarrier& value)
-{
-       s << "VkMemoryBarrier = {\n";
-       s << "\tsType = " << value.sType << '\n';
-       s << "\tpNext = " << value.pNext << '\n';
-       s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
-       s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilitiesKHR& value)
-{
-       s << "VkSurfaceCapabilitiesKHR = {\n";
-       s << "\tminImageCount = " << value.minImageCount << '\n';
-       s << "\tmaxImageCount = " << value.maxImageCount << '\n';
-       s << "\tcurrentExtent = " << value.currentExtent << '\n';
-       s << "\tminImageExtent = " << value.minImageExtent << '\n';
-       s << "\tmaxImageExtent = " << value.maxImageExtent << '\n';
-       s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
-       s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
-       s << "\tcurrentTransform = " << value.currentTransform << '\n';
-       s << "\tsupportedCompositeAlpha = " << getCompositeAlphaFlagsKHRStr(value.supportedCompositeAlpha) << '\n';
-       s << "\tsupportedUsageFlags = " << getImageUsageFlagsStr(value.supportedUsageFlags) << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkSurfaceFormatKHR& value)
-{
-       s << "VkSurfaceFormatKHR = {\n";
-       s << "\tformat = " << value.format << '\n';
-       s << "\tcolorSpace = " << value.colorSpace << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkSwapchainCreateInfoKHR& value)
-{
-       s << "VkSwapchainCreateInfoKHR = {\n";
-       s << "\tsType = " << value.sType << '\n';
-       s << "\tpNext = " << value.pNext << '\n';
-       s << "\tflags = " << getSwapchainCreateFlagsKHRStr(value.flags) << '\n';
-       s << "\tsurface = " << value.surface << '\n';
-       s << "\tminImageCount = " << value.minImageCount << '\n';
-       s << "\timageFormat = " << value.imageFormat << '\n';
-       s << "\timageColorSpace = " << value.imageColorSpace << '\n';
-       s << "\timageExtent = " << value.imageExtent << '\n';
-       s << "\timageArrayLayers = " << value.imageArrayLayers << '\n';
-       s << "\timageUsage = " << getImageUsageFlagsStr(value.imageUsage) << '\n';
-       s << "\timageSharingMode = " << value.imageSharingMode << '\n';
-       s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
-       s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
-       s << "\tpreTransform = " << value.preTransform << '\n';
-       s << "\tcompositeAlpha = " << value.compositeAlpha << '\n';
-       s << "\tpresentMode = " << value.presentMode << '\n';
-       s << "\tclipped = " << value.clipped << '\n';
-       s << "\toldSwapchain = " << value.oldSwapchain << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkPresentInfoKHR& value)
-{
-       s << "VkPresentInfoKHR = {\n";
-       s << "\tsType = " << value.sType << '\n';
-       s << "\tpNext = " << value.pNext << '\n';
-       s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
-       s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
-       s << "\tswapchainCount = " << value.swapchainCount << '\n';
-       s << "\tpSwapchains = " << value.pSwapchains << '\n';
-       s << "\tpImageIndices = " << value.pImageIndices << '\n';
-       s << "\tpResults = " << value.pResults << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkDisplayPropertiesKHR& value)
-{
-       s << "VkDisplayPropertiesKHR = {\n";
-       s << "\tdisplay = " << value.display << '\n';
-       s << "\tdisplayName = " << getCharPtrStr(value.displayName) << '\n';
-       s << "\tphysicalDimensions = " << value.physicalDimensions << '\n';
-       s << "\tphysicalResolution = " << value.physicalResolution << '\n';
-       s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
-       s << "\tplaneReorderPossible = " << value.planeReorderPossible << '\n';
-       s << "\tpersistentContent = " << value.persistentContent << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkDisplayModeParametersKHR& value)
-{
-       s << "VkDisplayModeParametersKHR = {\n";
-       s << "\tvisibleRegion = " << value.visibleRegion << '\n';
-       s << "\trefreshRate = " << value.refreshRate << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkDisplayModePropertiesKHR& value)
-{
-       s << "VkDisplayModePropertiesKHR = {\n";
-       s << "\tdisplayMode = " << value.displayMode << '\n';
-       s << "\tparameters = " << value.parameters << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkDisplayModeCreateInfoKHR& value)
+std::ostream& operator<< (std::ostream& s, const VkRenderPassBeginInfo& value)
 {
-       s << "VkDisplayModeCreateInfoKHR = {\n";
+       s << "VkRenderPassBeginInfo = {\n";
        s << "\tsType = " << value.sType << '\n';
        s << "\tpNext = " << value.pNext << '\n';
-       s << "\tflags = " << getDisplayModeCreateFlagsKHRStr(value.flags) << '\n';
-       s << "\tparameters = " << value.parameters << '\n';
-       s << '}';
-       return s;
-}
-
-std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneCapabilitiesKHR& value)
-{
-       s << "VkDisplayPlaneCapabilitiesKHR = {\n";
-       s << "\tsupportedAlpha = " << getDisplayPlaneAlphaFlagsKHRStr(value.supportedAlpha) << '\n';
-       s << "\tminSrcPosition = " << value.minSrcPosition << '\n';
-       s << "\tmaxSrcPosition = " << value.maxSrcPosition << '\n';
-       s << "\tminSrcExtent = " << value.minSrcExtent << '\n';
-       s << "\tmaxSrcExtent = " << value.maxSrcExtent << '\n';
-       s << "\tminDstPosition = " << value.minDstPosition << '\n';
-       s << "\tmaxDstPosition = " << value.maxDstPosition << '\n';
-       s << "\tminDstExtent = " << value.minDstExtent << '\n';
-       s << "\tmaxDstExtent = " << value.maxDstExtent << '\n';
+       s << "\trenderPass = " << value.renderPass << '\n';
+       s << "\tframebuffer = " << value.framebuffer << '\n';
+       s << "\trenderArea = " << value.renderArea << '\n';
+       s << "\tclearValueCount = " << value.clearValueCount << '\n';
+       s << "\tpClearValues = " << value.pClearValues << '\n';
        s << '}';
        return s;
 }
 
-std::ostream& operator<< (std::ostream& s, const VkDisplayPlanePropertiesKHR& value)
+std::ostream& operator<< (std::ostream& s, const VkDispatchIndirectCommand& value)
 {
-       s << "VkDisplayPlanePropertiesKHR = {\n";
-       s << "\tcurrentDisplay = " << value.currentDisplay << '\n';
-       s << "\tcurrentStackIndex = " << value.currentStackIndex << '\n';
+       s << "VkDispatchIndirectCommand = {\n";
+       s << "\tx = " << value.x << '\n';
+       s << "\ty = " << value.y << '\n';
+       s << "\tz = " << value.z << '\n';
        s << '}';
        return s;
 }
 
-std::ostream& operator<< (std::ostream& s, const VkDisplaySurfaceCreateInfoKHR& value)
+std::ostream& operator<< (std::ostream& s, const VkDrawIndexedIndirectCommand& value)
 {
-       s << "VkDisplaySurfaceCreateInfoKHR = {\n";
-       s << "\tsType = " << value.sType << '\n';
-       s << "\tpNext = " << value.pNext << '\n';
-       s << "\tflags = " << getDisplaySurfaceCreateFlagsKHRStr(value.flags) << '\n';
-       s << "\tdisplayMode = " << value.displayMode << '\n';
-       s << "\tplaneIndex = " << value.planeIndex << '\n';
-       s << "\tplaneStackIndex = " << value.planeStackIndex << '\n';
-       s << "\ttransform = " << value.transform << '\n';
-       s << "\tglobalAlpha = " << value.globalAlpha << '\n';
-       s << "\talphaMode = " << value.alphaMode << '\n';
-       s << "\timageExtent = " << value.imageExtent << '\n';
+       s << "VkDrawIndexedIndirectCommand = {\n";
+       s << "\tindexCount = " << value.indexCount << '\n';
+       s << "\tinstanceCount = " << value.instanceCount << '\n';
+       s << "\tfirstIndex = " << value.firstIndex << '\n';
+       s << "\tvertexOffset = " << value.vertexOffset << '\n';
+       s << "\tfirstInstance = " << value.firstInstance << '\n';
        s << '}';
        return s;
 }
 
-std::ostream& operator<< (std::ostream& s, const VkDisplayPresentInfoKHR& value)
+std::ostream& operator<< (std::ostream& s, const VkDrawIndirectCommand& value)
 {
-       s << "VkDisplayPresentInfoKHR = {\n";
-       s << "\tsType = " << value.sType << '\n';
-       s << "\tpNext = " << value.pNext << '\n';
-       s << "\tsrcRect = " << value.srcRect << '\n';
-       s << "\tdstRect = " << value.dstRect << '\n';
-       s << "\tpersistent = " << value.persistent << '\n';
+       s << "VkDrawIndirectCommand = {\n";
+       s << "\tvertexCount = " << value.vertexCount << '\n';
+       s << "\tinstanceCount = " << value.instanceCount << '\n';
+       s << "\tfirstVertex = " << value.firstVertex << '\n';
+       s << "\tfirstInstance = " << value.firstInstance << '\n';
        s << '}';
        return s;
 }
index 75b183c..49d993c 100644 (file)
@@ -18,9 +18,9 @@ struct VkInstanceCreateInfo
        const void*                                     pNext;
        VkInstanceCreateFlags           flags;
        const VkApplicationInfo*        pApplicationInfo;
-       deUint32                                        enabledLayerNameCount;
+       deUint32                                        enabledLayerCount;
        const char* const*                      ppEnabledLayerNames;
-       deUint32                                        enabledExtensionNameCount;
+       deUint32                                        enabledExtensionCount;
        const char* const*                      ppEnabledExtensionNames;
 };
 
@@ -46,6 +46,7 @@ struct VkPhysicalDeviceFeatures
        VkBool32        dualSrcBlend;
        VkBool32        logicOp;
        VkBool32        multiDrawIndirect;
+       VkBool32        drawIndirectFirstInstance;
        VkBool32        depthClamp;
        VkBool32        depthBiasClamp;
        VkBool32        fillModeNonSolid;
@@ -89,6 +90,7 @@ struct VkPhysicalDeviceFeatures
        VkBool32        sparseResidency16Samples;
        VkBool32        sparseResidencyAliased;
        VkBool32        variableMultisampleRate;
+       VkBool32        inheritedQueries;
 };
 
 struct VkFormatProperties
@@ -100,9 +102,9 @@ struct VkFormatProperties
 
 struct VkExtent3D
 {
-       deInt32 width;
-       deInt32 height;
-       deInt32 depth;
+       deUint32        width;
+       deUint32        height;
+       deUint32        depth;
 };
 
 struct VkImageFormatProperties
@@ -207,6 +209,7 @@ struct VkPhysicalDeviceLimits
        VkSampleCountFlags      sampledImageStencilSampleCounts;
        VkSampleCountFlags      storageImageSampleCounts;
        deUint32                        maxSampleMaskWords;
+       VkBool32                        timestampComputeAndGraphics;
        float                           timestampPeriod;
        deUint32                        maxClipDistances;
        deUint32                        maxCullDistances;
@@ -290,9 +293,9 @@ struct VkDeviceCreateInfo
        VkDeviceCreateFlags                             flags;
        deUint32                                                queueCreateInfoCount;
        const VkDeviceQueueCreateInfo*  pQueueCreateInfos;
-       deUint32                                                enabledLayerNameCount;
+       deUint32                                                enabledLayerCount;
        const char* const*                              ppEnabledLayerNames;
-       deUint32                                                enabledExtensionNameCount;
+       deUint32                                                enabledExtensionCount;
        const char* const*                              ppEnabledExtensionNames;
        const VkPhysicalDeviceFeatures* pEnabledFeatures;
 };
@@ -313,14 +316,15 @@ struct VkLayerProperties
 
 struct VkSubmitInfo
 {
-       VkStructureType                 sType;
-       const void*                             pNext;
-       deUint32                                waitSemaphoreCount;
-       const VkSemaphore*              pWaitSemaphores;
-       deUint32                                commandBufferCount;
-       const VkCommandBuffer*  pCommandBuffers;
-       deUint32                                signalSemaphoreCount;
-       const VkSemaphore*              pSignalSemaphores;
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       deUint32                                        waitSemaphoreCount;
+       const VkSemaphore*                      pWaitSemaphores;
+       const VkPipelineStageFlags*     pWaitDstStageMask;
+       deUint32                                        commandBufferCount;
+       const VkCommandBuffer*          pCommandBuffers;
+       deUint32                                        signalSemaphoreCount;
+       const VkSemaphore*                      pSignalSemaphores;
 };
 
 struct VkMemoryAllocateInfo
@@ -357,7 +361,7 @@ struct VkSparseImageFormatProperties
 struct VkSparseImageMemoryRequirements
 {
        VkSparseImageFormatProperties   formatProperties;
-       deUint32                                                imageMipTailStartLod;
+       deUint32                                                imageMipTailFirstLod;
        VkDeviceSize                                    imageMipTailSize;
        VkDeviceSize                                    imageMipTailOffset;
        VkDeviceSize                                    imageMipTailStride;
@@ -460,7 +464,7 @@ struct VkQueryPoolCreateInfo
        const void*                                             pNext;
        VkQueryPoolCreateFlags                  flags;
        VkQueryType                                             queryType;
-       deUint32                                                entryCount;
+       deUint32                                                queryCount;
        VkQueryPipelineStatisticFlags   pipelineStatistics;
 };
 
@@ -511,6 +515,7 @@ struct VkSubresourceLayout
        VkDeviceSize    offset;
        VkDeviceSize    size;
        VkDeviceSize    rowPitch;
+       VkDeviceSize    arrayPitch;
        VkDeviceSize    depthPitch;
 };
 
@@ -626,7 +631,7 @@ struct VkPipelineTessellationStateCreateInfo
 {
        VkStructureType                                                 sType;
        const void*                                                             pNext;
-       VkPipelineTesselationStateCreateFlags   flags;
+       VkPipelineTessellationStateCreateFlags  flags;
        deUint32                                                                patchControlPoints;
 };
 
@@ -648,8 +653,8 @@ struct VkOffset2D
 
 struct VkExtent2D
 {
-       deInt32 width;
-       deInt32 height;
+       deUint32        width;
+       deUint32        height;
 };
 
 struct VkRect2D
@@ -823,6 +828,7 @@ struct VkSamplerCreateInfo
        VkSamplerAddressMode    addressModeV;
        VkSamplerAddressMode    addressModeW;
        float                                   mipLodBias;
+       VkBool32                                anisotropyEnable;
        float                                   maxAnisotropy;
        VkBool32                                compareEnable;
        VkCompareOp                             compareOp;
@@ -847,7 +853,7 @@ struct VkDescriptorSetLayoutCreateInfo
        const void*                                                     pNext;
        VkDescriptorSetLayoutCreateFlags        flags;
        deUint32                                                        bindingCount;
-       const VkDescriptorSetLayoutBinding*     pBinding;
+       const VkDescriptorSetLayoutBinding*     pBindings;
 };
 
 struct VkDescriptorPoolSize
@@ -871,7 +877,7 @@ struct VkDescriptorSetAllocateInfo
        VkStructureType                                 sType;
        const void*                                             pNext;
        VkDescriptorPool                                descriptorPool;
-       deUint32                                                setLayoutCount;
+       deUint32                                                descriptorSetCount;
        const VkDescriptorSetLayout*    pSetLayouts;
 };
 
@@ -959,7 +965,7 @@ struct VkSubpassDescription
        const VkAttachmentReference*    pResolveAttachments;
        const VkAttachmentReference*    pDepthStencilAttachment;
        deUint32                                                preserveAttachmentCount;
-       const VkAttachmentReference*    pPreserveAttachments;
+       const deUint32*                                 pPreserveAttachments;
 };
 
 struct VkSubpassDependency
@@ -1000,14 +1006,13 @@ struct VkCommandBufferAllocateInfo
        const void*                             pNext;
        VkCommandPool                   commandPool;
        VkCommandBufferLevel    level;
-       deUint32                                bufferCount;
+       deUint32                                commandBufferCount;
 };
 
-struct VkCommandBufferBeginInfo
+struct VkCommandBufferInheritanceInfo
 {
        VkStructureType                                 sType;
        const void*                                             pNext;
-       VkCommandBufferUsageFlags               flags;
        VkRenderPass                                    renderPass;
        deUint32                                                subpass;
        VkFramebuffer                                   framebuffer;
@@ -1016,6 +1021,14 @@ struct VkCommandBufferBeginInfo
        VkQueryPipelineStatisticFlags   pipelineStatistics;
 };
 
+struct VkCommandBufferBeginInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkCommandBufferUsageFlags                               flags;
+       const VkCommandBufferInheritanceInfo*   pInheritanceInfo;
+};
+
 struct VkBufferCopy
 {
        VkDeviceSize    srcOffset;
@@ -1043,11 +1056,9 @@ struct VkImageCopy
 struct VkImageBlit
 {
        VkImageSubresourceLayers        srcSubresource;
-       VkOffset3D                                      srcOffset;
-       VkExtent3D                                      srcExtent;
+       VkOffset3D                                      srcOffsets[2];
        VkImageSubresourceLayers        dstSubresource;
-       VkOffset3D                                      dstOffset;
-       VkExtent3D                                      dstExtent;
+       VkOffset3D                                      dstOffsets[2];
 };
 
 struct VkBufferImageCopy
@@ -1102,15 +1113,12 @@ struct VkImageResolve
        VkExtent3D                                      extent;
 };
 
-struct VkRenderPassBeginInfo
+struct VkMemoryBarrier
 {
-       VkStructureType         sType;
-       const void*                     pNext;
-       VkRenderPass            renderPass;
-       VkFramebuffer           framebuffer;
-       VkRect2D                        renderArea;
-       deUint32                        clearValueCount;
-       const VkClearValue*     pClearValues;
+       VkStructureType sType;
+       const void*             pNext;
+       VkAccessFlags   srcAccessMask;
+       VkAccessFlags   dstAccessMask;
 };
 
 struct VkBufferMemoryBarrier
@@ -1126,30 +1134,6 @@ struct VkBufferMemoryBarrier
        VkDeviceSize    size;
 };
 
-struct VkDispatchIndirectCommand
-{
-       deUint32        x;
-       deUint32        y;
-       deUint32        z;
-};
-
-struct VkDrawIndexedIndirectCommand
-{
-       deUint32        indexCount;
-       deUint32        instanceCount;
-       deUint32        firstIndex;
-       deInt32         vertexOffset;
-       deUint32        firstInstance;
-};
-
-struct VkDrawIndirectCommand
-{
-       deUint32        vertexCount;
-       deUint32        instanceCount;
-       deUint32        firstVertex;
-       deUint32        firstInstance;
-};
-
 struct VkImageMemoryBarrier
 {
        VkStructureType                 sType;
@@ -1164,138 +1148,38 @@ struct VkImageMemoryBarrier
        VkImageSubresourceRange subresourceRange;
 };
 
-struct VkMemoryBarrier
-{
-       VkStructureType sType;
-       const void*             pNext;
-       VkAccessFlags   srcAccessMask;
-       VkAccessFlags   dstAccessMask;
-};
-
-struct VkSurfaceCapabilitiesKHR
-{
-       deUint32                                                minImageCount;
-       deUint32                                                maxImageCount;
-       VkExtent2D                                              currentExtent;
-       VkExtent2D                                              minImageExtent;
-       VkExtent2D                                              maxImageExtent;
-       deUint32                                                maxImageArrayLayers;
-       VkSurfaceTransformFlagsKHR              supportedTransforms;
-       VkSurfaceTransformFlagBitsKHR   currentTransform;
-       VkCompositeAlphaFlagsKHR                supportedCompositeAlpha;
-       VkImageUsageFlags                               supportedUsageFlags;
-};
-
-struct VkSurfaceFormatKHR
-{
-       VkFormat                format;
-       VkColorSpaceKHR colorSpace;
-};
-
-struct VkSwapchainCreateInfoKHR
-{
-       VkStructureType                                 sType;
-       const void*                                             pNext;
-       VkSwapchainCreateFlagsKHR               flags;
-       VkSurfaceKHR                                    surface;
-       deUint32                                                minImageCount;
-       VkFormat                                                imageFormat;
-       VkColorSpaceKHR                                 imageColorSpace;
-       VkExtent2D                                              imageExtent;
-       deUint32                                                imageArrayLayers;
-       VkImageUsageFlags                               imageUsage;
-       VkSharingMode                                   imageSharingMode;
-       deUint32                                                queueFamilyIndexCount;
-       const deUint32*                                 pQueueFamilyIndices;
-       VkSurfaceTransformFlagBitsKHR   preTransform;
-       VkCompositeAlphaFlagBitsKHR             compositeAlpha;
-       VkPresentModeKHR                                presentMode;
-       VkBool32                                                clipped;
-       VkSwapchainKHR                                  oldSwapchain;
-};
-
-struct VkPresentInfoKHR
-{
-       VkStructureType                 sType;
-       const void*                             pNext;
-       deUint32                                waitSemaphoreCount;
-       const VkSemaphore*              pWaitSemaphores;
-       deUint32                                swapchainCount;
-       const VkSwapchainKHR*   pSwapchains;
-       const deUint32*                 pImageIndices;
-       VkResult*                               pResults;
-};
-
-struct VkDisplayPropertiesKHR
-{
-       VkDisplayKHR                            display;
-       const char*                                     displayName;
-       VkExtent2D                                      physicalDimensions;
-       VkExtent2D                                      physicalResolution;
-       VkSurfaceTransformFlagsKHR      supportedTransforms;
-       VkBool32                                        planeReorderPossible;
-       VkBool32                                        persistentContent;
-};
-
-struct VkDisplayModeParametersKHR
-{
-       VkExtent2D      visibleRegion;
-       deUint32        refreshRate;
-};
-
-struct VkDisplayModePropertiesKHR
-{
-       VkDisplayModeKHR                        displayMode;
-       VkDisplayModeParametersKHR      parameters;
-};
-
-struct VkDisplayModeCreateInfoKHR
-{
-       VkStructureType                         sType;
-       const void*                                     pNext;
-       VkDisplayModeCreateFlagsKHR     flags;
-       VkDisplayModeParametersKHR      parameters;
-};
-
-struct VkDisplayPlaneCapabilitiesKHR
+struct VkRenderPassBeginInfo
 {
-       VkDisplayPlaneAlphaFlagsKHR     supportedAlpha;
-       VkOffset2D                                      minSrcPosition;
-       VkOffset2D                                      maxSrcPosition;
-       VkExtent2D                                      minSrcExtent;
-       VkExtent2D                                      maxSrcExtent;
-       VkOffset2D                                      minDstPosition;
-       VkOffset2D                                      maxDstPosition;
-       VkExtent2D                                      minDstExtent;
-       VkExtent2D                                      maxDstExtent;
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkRenderPass            renderPass;
+       VkFramebuffer           framebuffer;
+       VkRect2D                        renderArea;
+       deUint32                        clearValueCount;
+       const VkClearValue*     pClearValues;
 };
 
-struct VkDisplayPlanePropertiesKHR
+struct VkDispatchIndirectCommand
 {
-       VkDisplayKHR    currentDisplay;
-       deUint32                currentStackIndex;
+       deUint32        x;
+       deUint32        y;
+       deUint32        z;
 };
 
-struct VkDisplaySurfaceCreateInfoKHR
+struct VkDrawIndexedIndirectCommand
 {
-       VkStructureType                                 sType;
-       const void*                                             pNext;
-       VkDisplaySurfaceCreateFlagsKHR  flags;
-       VkDisplayModeKHR                                displayMode;
-       deUint32                                                planeIndex;
-       deUint32                                                planeStackIndex;
-       VkSurfaceTransformFlagBitsKHR   transform;
-       float                                                   globalAlpha;
-       VkDisplayPlaneAlphaFlagBitsKHR  alphaMode;
-       VkExtent2D                                              imageExtent;
+       deUint32        indexCount;
+       deUint32        instanceCount;
+       deUint32        firstIndex;
+       deInt32         vertexOffset;
+       deUint32        firstInstance;
 };
 
-struct VkDisplayPresentInfoKHR
+struct VkDrawIndirectCommand
 {
-       VkStructureType sType;
-       const void*             pNext;
-       VkRect2D                srcRect;
-       VkRect2D                dstRect;
-       VkBool32                persistent;
+       deUint32        vertexCount;
+       deUint32        instanceCount;
+       deUint32        firstVertex;
+       deUint32        firstInstance;
 };
 
index 5421b11..52f65d6 100644 (file)
@@ -14,7 +14,7 @@ inline VkAllocationCallbacks makeAllocationCallbacks (void* pUserData, PFN_vkAll
        return res;
 }
 
-inline VkExtent3D makeExtent3D (deInt32 width, deInt32 height, deInt32 depth)
+inline VkExtent3D makeExtent3D (deUint32 width, deUint32 height, deUint32 depth)
 {
        VkExtent3D res;
        res.width       = width;
@@ -88,12 +88,13 @@ inline VkSparseImageMemoryBindInfo makeSparseImageMemoryBindInfo (VkImage image,
        return res;
 }
 
-inline VkSubresourceLayout makeSubresourceLayout (VkDeviceSize offset, VkDeviceSize size, VkDeviceSize rowPitch, VkDeviceSize depthPitch)
+inline VkSubresourceLayout makeSubresourceLayout (VkDeviceSize offset, VkDeviceSize size, VkDeviceSize rowPitch, VkDeviceSize arrayPitch, VkDeviceSize depthPitch)
 {
        VkSubresourceLayout res;
        res.offset              = offset;
        res.size                = size;
        res.rowPitch    = rowPitch;
+       res.arrayPitch  = arrayPitch;
        res.depthPitch  = depthPitch;
        return res;
 }
@@ -177,7 +178,7 @@ inline VkOffset2D makeOffset2D (deInt32 x, deInt32 y)
        return res;
 }
 
-inline VkExtent2D makeExtent2D (deInt32 width, deInt32 height)
+inline VkExtent2D makeExtent2D (deUint32 width, deUint32 height)
 {
        VkExtent2D res;
        res.width       = width;
@@ -281,7 +282,7 @@ inline VkAttachmentReference makeAttachmentReference (deUint32 attachment, VkIma
        return res;
 }
 
-inline VkSubpassDescription makeSubpassDescription (VkSubpassDescriptionFlags flags, VkPipelineBindPoint pipelineBindPoint, deUint32 inputAttachmentCount, const VkAttachmentReference* pInputAttachments, deUint32 colorAttachmentCount, const VkAttachmentReference* pColorAttachments, const VkAttachmentReference* pResolveAttachments, const VkAttachmentReference* pDepthStencilAttachment, deUint32 preserveAttachmentCount, const VkAttachmentReference* pPreserveAttachments)
+inline VkSubpassDescription makeSubpassDescription (VkSubpassDescriptionFlags flags, VkPipelineBindPoint pipelineBindPoint, deUint32 inputAttachmentCount, const VkAttachmentReference* pInputAttachments, deUint32 colorAttachmentCount, const VkAttachmentReference* pColorAttachments, const VkAttachmentReference* pResolveAttachments, const VkAttachmentReference* pDepthStencilAttachment, deUint32 preserveAttachmentCount, const deUint32* pPreserveAttachments)
 {
        VkSubpassDescription res;
        res.flags                                       = flags;
@@ -366,19 +367,3 @@ inline VkDrawIndirectCommand makeDrawIndirectCommand (deUint32 vertexCount, deUi
        res.firstInstance       = firstInstance;
        return res;
 }
-
-inline VkSurfaceFormatKHR makeSurfaceFormatKHR (VkFormat format, VkColorSpaceKHR colorSpace)
-{
-       VkSurfaceFormatKHR res;
-       res.format              = format;
-       res.colorSpace  = colorSpace;
-       return res;
-}
-
-inline VkDisplayPlanePropertiesKHR makeDisplayPlanePropertiesKHR (VkDisplayKHR currentDisplay, deUint32 currentStackIndex)
-{
-       VkDisplayPlanePropertiesKHR res;
-       res.currentDisplay              = currentDisplay;
-       res.currentStackIndex   = currentStackIndex;
-       return res;
-}
index a9a1b5c..14dceb0 100644 (file)
@@ -34,7 +34,7 @@ virtual VkResult      setEvent                                                                                (VkDevice device, VkEvent event) const = 0;
 virtual VkResult       resetEvent                                                                              (VkDevice device, VkEvent event) const = 0;
 virtual VkResult       createQueryPool                                                                 (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const = 0;
 virtual void           destroyQueryPool                                                                (VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) const = 0;
-virtual VkResult       getQueryPoolResults                                                             (VkDevice device, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
+virtual VkResult       getQueryPoolResults                                                             (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
 virtual VkResult       createBuffer                                                                    (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const = 0;
 virtual void           destroyBuffer                                                                   (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const = 0;
 virtual VkResult       createBufferView                                                                (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const = 0;
@@ -79,8 +79,8 @@ virtual VkResult      beginCommandBuffer                                                              (VkCommandBuffer commandBuffer, const
 virtual VkResult       endCommandBuffer                                                                (VkCommandBuffer commandBuffer) const = 0;
 virtual VkResult       resetCommandBuffer                                                              (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const = 0;
 virtual void           cmdBindPipeline                                                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const = 0;
-virtual void           cmdSetViewport                                                                  (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports) const = 0;
-virtual void           cmdSetScissor                                                                   (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors) const = 0;
+virtual void           cmdSetViewport                                                                  (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const = 0;
+virtual void           cmdSetScissor                                                                   (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const = 0;
 virtual void           cmdSetLineWidth                                                                 (VkCommandBuffer commandBuffer, float lineWidth) const = 0;
 virtual void           cmdSetDepthBias                                                                 (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const = 0;
 virtual void           cmdSetBlendConstants                                                    (VkCommandBuffer commandBuffer, const float blendConstants[4]) const = 0;
@@ -90,7 +90,7 @@ virtual void          cmdSetStencilWriteMask                                                  (VkCommandBuffer commandBuffer, VkSte
 virtual void           cmdSetStencilReference                                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const = 0;
 virtual void           cmdBindDescriptorSets                                                   (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const = 0;
 virtual void           cmdBindIndexBuffer                                                              (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const = 0;
-virtual void           cmdBindVertexBuffers                                                    (VkCommandBuffer commandBuffer, deUint32 startBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const = 0;
+virtual void           cmdBindVertexBuffers                                                    (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const = 0;
 virtual void           cmdDraw                                                                                 (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const = 0;
 virtual void           cmdDrawIndexed                                                                  (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const = 0;
 virtual void           cmdDrawIndirect                                                                 (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const = 0;
@@ -110,15 +110,15 @@ virtual void              cmdClearAttachments                                                             (VkCommandBuffer commandBuffer, deUint3
 virtual void           cmdResolveImage                                                                 (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const = 0;
 virtual void           cmdSetEvent                                                                             (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const = 0;
 virtual void           cmdResetEvent                                                                   (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const = 0;
-virtual void           cmdWaitEvents                                                                   (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers) const = 0;
-virtual void           cmdPipelineBarrier                                                              (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const void* const* ppMemoryBarriers) const = 0;
-virtual void           cmdBeginQuery                                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry, VkQueryControlFlags flags) const = 0;
-virtual void           cmdEndQuery                                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 entry) const = 0;
-virtual void           cmdResetQueryPool                                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount) const = 0;
-virtual void           cmdWriteTimestamp                                                               (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 entry) const = 0;
-virtual void           cmdCopyQueryPoolResults                                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 startQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
+virtual void           cmdWaitEvents                                                                   (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const = 0;
+virtual void           cmdPipelineBarrier                                                              (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const = 0;
+virtual void           cmdBeginQuery                                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const = 0;
+virtual void           cmdEndQuery                                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const = 0;
+virtual void           cmdResetQueryPool                                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const = 0;
+virtual void           cmdWriteTimestamp                                                               (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const = 0;
+virtual void           cmdCopyQueryPoolResults                                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
 virtual void           cmdPushConstants                                                                (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const = 0;
 virtual void           cmdBeginRenderPass                                                              (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const = 0;
 virtual void           cmdNextSubpass                                                                  (VkCommandBuffer commandBuffer, VkSubpassContents contents) const = 0;
 virtual void           cmdEndRenderPass                                                                (VkCommandBuffer commandBuffer) const = 0;
-virtual void           cmdExecuteCommands                                                              (VkCommandBuffer commandBuffer, deUint32 commandBuffersCount, const VkCommandBuffer* pCommandBuffers) const = 0;
+virtual void           cmdExecuteCommands                                                              (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const = 0;
index 17cafe3..d081772 100644 (file)
@@ -261,6 +261,9 @@ def parseCompositeTypes (src):
        types   = []
 
        for type, structname, contents, typename in matches:
+               if typename[-3:] == "KHR":
+                       continue # \todo [2016-01-05 pyry] Figure out how to handle platform-specific types
+
                types.append(parseCompositeType(typeMap[type], typename, contents))
 
        return types
index 00476b8..c7379a8 100644 (file)
@@ -39,6 +39,7 @@
 #include "gluVarType.hpp"
 #include "tcuTestLog.hpp"
 #include "vkPrograms.hpp"
+#include "vkQueryUtil.hpp"
 #include "vktTestCase.hpp"
 
 namespace vkt
@@ -99,15 +100,15 @@ private:
 
  tcu::TestStatus BufferTestInstance::bufferCreateAndAllocTest (VkDeviceSize size)
 {
-       const VkDevice                  vkDevice        = m_context.getDevice();
-       const DeviceInterface&  vk                      = m_context.getDeviceInterface();
+       const VkDevice                  vkDevice                        = m_context.getDevice();
+       const DeviceInterface&  vk                                      = m_context.getDeviceInterface();
        VkBuffer                                testBuffer;
        VkMemoryRequirements    memReqs;
        VkDeviceMemory                  memory;
+       const deUint32                  queueFamilyIndex        = m_context.getUniversalQueueFamilyIndex();
 
        // Create buffer
        {
-               const deUint32                                  queueFamilyIndex        = m_context.getUniversalQueueFamilyIndex();
                const VkBufferCreateInfo                bufferParams            =
                {
                        VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
@@ -146,8 +147,52 @@ private:
                if (vk.allocateMemory(vkDevice, &memAlloc, (const VkAllocationCallbacks*)DE_NULL, &memory) != VK_SUCCESS)
                        return tcu::TestStatus::fail("Alloc memory failed! (requested memory size: " + de::toString(size) + ")");
 
-               if (vk.bindBufferMemory(vkDevice, testBuffer, memory, 0) != VK_SUCCESS)
-                       return tcu::TestStatus::fail("Bind buffer memory failed! (requested memory size: " + de::toString(size) + ")");
+
+               if ((m_testCase.flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) ||
+                       (m_testCase.flags & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT) ||
+                       (m_testCase.flags & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT))
+               {
+                       VkQueue queue                                                                                           = 0;
+
+                       vk.getDeviceQueue(vkDevice, queueFamilyIndex, 0, &queue);
+
+                       const VkSparseMemoryBind                        sparseMemoryBind                =
+                       {
+                               0,                                                                              // VkDeviceSize                                                         resourceOffset;
+                               memReqs.size,                                                   // VkDeviceSize                                                         size;
+                               memory,                                                                 // VkDeviceMemory                                                       memory;
+                               0,                                                                              // VkDeviceSize                                                         memoryOffset;
+                               0                                                                               // VkSparseMemoryBindFlags                                      flags;
+                       };
+
+                       const VkSparseBufferMemoryBindInfo      sparseBufferMemoryBindInfo      =
+                       {
+                               testBuffer,                                                             // VkBuffer                                                                     buffer;
+                               1u,                                                                             // deUint32                                                                     bindCount;
+                               &sparseMemoryBind                                               // const VkSparseMemoryBind*                            pBinds;
+                       };
+
+                       const VkBindSparseInfo                          bindSparseInfo                  =
+                       {
+                               VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,             // VkStructureType                                                      sType;
+                               DE_NULL,                                                                // const void*                                                          pNext;
+                               0,                                                                              // deUint32                                                                     waitSemaphoreCount;
+                               DE_NULL,                                                                // const VkSemaphore*                                           pWaitSemaphores;
+                               1u,                                                                             // deUint32                                                                     bufferBindCount;
+                               &sparseBufferMemoryBindInfo,                    // const VkSparseBufferMemoryBindInfo*          pBufferBinds;
+                               0,                                                                              // deUint32                                                                     imageOpaqueBindCount;
+                               DE_NULL,                                                                // const VkSparseImageOpaqueMemoryBindInfo*     pImageOpaqueBinds;
+                               0,                                                                              // deUint32                                                                     imageBindCount;
+                               DE_NULL,                                                                // const VkSparseImageMemoryBindInfo*           pImageBinds;
+                               0,                                                                              // deUint32                                                                     signalSemaphoreCount;
+                               DE_NULL,                                                                // const VkSemaphore*                                           pSignalSemaphores;
+                       };
+
+                       if (vk.queueBindSparse(queue, 1, &bindSparseInfo, DE_NULL) != VK_SUCCESS)
+                               return tcu::TestStatus::fail("Bind sparse buffer memory failed! (requested memory size: " + de::toString(size) + ")");
+               } else
+                       if (vk.bindBufferMemory(vkDevice, testBuffer, memory, 0) != VK_SUCCESS)
+                               return tcu::TestStatus::fail("Bind buffer memory failed! (requested memory size: " + de::toString(size) + ")");
        }
 
        vk.freeMemory(vkDevice, memory, (const VkAllocationCallbacks*)DE_NULL);
@@ -158,6 +203,17 @@ private:
 
 tcu::TestStatus BufferTestInstance::iterate (void)
 {
+       const VkPhysicalDeviceFeatures& physicalDeviceFeatures  = m_context.getDeviceFeatures();
+
+       if ((m_testCase.flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT ) && !physicalDeviceFeatures.sparseBinding)
+               TCU_THROW(NotSupportedError, "Sparse bindings feature is not supported");
+
+       if ((m_testCase.flags & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT ) && !physicalDeviceFeatures.sparseResidencyBuffer)
+               TCU_THROW(NotSupportedError, "Sparse buffer residency feature is not supported");
+
+       if ((m_testCase.flags & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT ) && !physicalDeviceFeatures.sparseResidencyAliased)
+               TCU_THROW(NotSupportedError, "Sparse aliased residency feature is not supported");
+
        const VkDeviceSize testSizes[] =
        {
                1,
@@ -165,7 +221,7 @@ tcu::TestStatus BufferTestInstance::iterate (void)
                15991,
                16384
        };
-       tcu::TestStatus testStatus                                      = tcu::TestStatus::pass("Buffer test");
+       tcu::TestStatus                                 testStatus                      = tcu::TestStatus::pass("Buffer test");
 
        for (int i = 0; i < DE_LENGTH_OF_ARRAY(testSizes); i++)
        {
@@ -175,13 +231,16 @@ tcu::TestStatus BufferTestInstance::iterate (void)
 
        if (m_testCase.usage & (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT))
        {
-               const VkPhysicalDevice          vkPhysicalDevice        = m_context.getPhysicalDevice();
-               const InstanceInterface&        vkInstance                      = m_context.getInstanceInterface();
+               const VkPhysicalDevice                                  vkPhysicalDevice        = m_context.getPhysicalDevice();
+               const InstanceInterface&                                vkInstance                      = m_context.getInstanceInterface();
+               const VkPhysicalDeviceMemoryProperties  memoryProperties        = getPhysicalDeviceMemoryProperties(vkInstance, vkPhysicalDevice);
                VkPhysicalDeviceProperties      props;
 
                vkInstance.getPhysicalDeviceProperties(vkPhysicalDevice, &props);
 
-               testStatus = bufferCreateAndAllocTest(props.limits.maxTexelBufferElements);
+               const VkDeviceSize maxTestBufferSize = de::min((VkDeviceSize) props.limits.maxTexelBufferElements, memoryProperties.memoryHeaps[memoryProperties.memoryTypes[0].heapIndex].size / 16);
+
+               testStatus = bufferCreateAndAllocTest(maxTestBufferSize);
        }
 
        return testStatus;
index 1d83957..f44908e 100644 (file)
@@ -171,7 +171,7 @@ BufferViewTestInstance::BufferViewTestInstance (Context& context, BufferViewCase
                        0u,                                                                                                                                                     // VkImageCreateFlags   flags;
                        VK_IMAGE_TYPE_2D,                                                                                                                       // VkImageType                  imageType;
                        m_colorFormat,                                                                                                                          // VkFormat                             format;
-                       { m_renderSize.x(), m_renderSize.y(), 1u },                                                                     // VkExtent3D                   extent;
+                       { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y(), 1u },                         // VkExtent3D                   extent;
                        1u,                                                                                                                                                     // deUint32                             mipLevels;
                        1u,                                                                                                                                                     // deUint32                             arraySize;
                        VK_SAMPLE_COUNT_1_BIT,                                                                                                          // deUint32                             samples;
@@ -505,8 +505,8 @@ BufferViewTestInstance::BufferViewTestInstance (Context& context, BufferViewCase
                };
                const VkRect2D scissor =
                {
-                       { 0, 0 },                                                                                               // VkOffset2D  offset;
-                       { m_renderSize.x(), m_renderSize.y() }                                  // VkExtent2D  extent;
+                       { 0, 0 },                                                                                                       // VkOffset2D  offset;
+                       { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y() }      // VkExtent2D  extent;
                };
                const VkPipelineViewportStateCreateInfo viewportStateParams =
                {
@@ -666,12 +666,7 @@ BufferViewTestInstance::BufferViewTestInstance (Context& context, BufferViewCase
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                      sType;
                        DE_NULL,                                                                                // const void*                          pNext;
                        0u,                                                                                             // VkCmdBufferOptimizeFlags     flags;
-                       DE_NULL,                                                                                // VkRenderPass                         renderPass;
-                       0u,                                                                                             // deUint32                                     subpass;
-                       DE_NULL,                                                                                        // VkFramebuffer                        framebuffer;
-                       VK_FALSE,
-                       (VkQueryControlFlags)0,
-                       (VkQueryPipelineStatisticFlags)0,
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue clearValue = makeClearValueColorF32(0.0, 0.0, 0.0, 0.0);
@@ -687,7 +682,10 @@ BufferViewTestInstance::BufferViewTestInstance (Context& context, BufferViewCase
                        DE_NULL,                                                                                                // const void*                  pNext;
                        *m_renderPass,                                                                                  // VkRenderPass                 renderPass;
                        *m_framebuffer,                                                                                 // VkFramebuffer                framebuffer;
-                       { { 0, 0 }, { m_renderSize.x(), m_renderSize.y() } },   // VkRect2D                             renderArea;
+                       {
+                               { 0, 0 },
+                               { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y() }
+                       },                                                                                                              // VkRect2D                             renderArea;
                        1u,                                                                                                             // deUint32                             clearValueCount;
                        attachmentClearValues                                                                   // const VkClearValue*  pClearValues;
                };
@@ -715,9 +713,8 @@ BufferViewTestInstance::BufferViewTestInstance (Context& context, BufferViewCase
                                1u                                                                              // deUint32                             arraySize;
                        }
                };
-               const void* const       initialImageBarrierPtr          = &initialImageBarrier;
 
-               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_FALSE, 1, &initialImageBarrierPtr);
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &initialImageBarrier);
 
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
@@ -727,6 +724,7 @@ BufferViewTestInstance::BufferViewTestInstance (Context& context, BufferViewCase
                vk.cmdBindDescriptorSets(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0u, 1, &*m_descriptorSet, 0u, DE_NULL);
                vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &m_vertexBuffer.get(), vertexBufferOffset);
                vk.cmdDraw(*m_cmdBuffer, (deUint32)m_vertices.size(), 1, 0, 0);
+               vk.cmdEndRenderPass(*m_cmdBuffer);
 
                const VkImageMemoryBarrier imageBarrier =
                {
@@ -768,17 +766,17 @@ BufferViewTestInstance::BufferViewTestInstance (Context& context, BufferViewCase
                        (deUint32)m_renderSize.y(),                                     // deUint32                                     bufferImageHeight;
                        { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u },      // VkImageSubresourceCopy       imageSubresource;
                        { 0, 0, 0 },                                                            // VkOffset3D                           imageOffset;
-                       { m_renderSize.x(), m_renderSize.y(), 1 }       // VkExtent3D                           imageExtent;
+                       {
+                               (deUint32)m_renderSize.x(),
+                               (deUint32)m_renderSize.y(),
+                               1u
+                       }                                                                                       // VkExtent3D                           imageExtent;
                };
 
-               const void* const       imageBarrierPtr         = &imageBarrier;
-               const void* const       bufferBarrierPtr        = &bufferBarrier;
-
-               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 1, &imageBarrierPtr);
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
                vk.cmdCopyImageToBuffer(*m_cmdBuffer, *m_colorImage, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *m_resultBuffer, 1, &copyRegion);
-               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1, &bufferBarrierPtr);
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
-               vk.cmdEndRenderPass(*m_cmdBuffer);
                VK_CHECK(vk.endCommandBuffer(*m_cmdBuffer));
        }
 
@@ -833,6 +831,7 @@ tcu::TestStatus BufferViewTestInstance::iterate (void)
                DE_NULL,
                0u,
                (const VkSemaphore*)DE_NULL,
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,
                &m_cmdBuffer.get(),
                0u,
index f126067..9c14d79 100644 (file)
@@ -106,7 +106,7 @@ tcu::TestStatus BufferViewTestInstance::iterate (void)
        const VkDevice                          vkDevice                                = m_context.getDevice();
        const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
        const deUint32                          queueFamilyIndex                = m_context.getUniversalQueueFamilyIndex();
-       const VkDeviceSize                      size                                    = 16 * 1024;
+       const VkDeviceSize                      size                                    = 3 * 5 * 7 * 64;
        VkBuffer                                        testBuffer;
        VkMemoryRequirements            memReqs;
        VkFormatProperties                      properties;
@@ -205,7 +205,7 @@ tcu::TestStatus BufferViewTestInstance::iterate (void)
 {
        de::MovePtr<tcu::TestCaseGroup> bufferViewTests (new tcu::TestCaseGroup(testCtx, "create", "BufferView Construction Tests"));
 
-       const VkDeviceSize range = 96;
+       const VkDeviceSize range = VK_WHOLE_SIZE;
        for (deUint32 format = VK_FORMAT_UNDEFINED + 1; format < VK_FORMAT_LAST; format++)
        {
                std::ostringstream      testName;
index 8407dd3..3e5810a 100644 (file)
@@ -418,12 +418,7 @@ tcu::TestStatus executePrimaryBufferTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Fill create info struct for event
@@ -467,9 +462,7 @@ tcu::TestStatus executePrimaryBufferTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -522,12 +515,7 @@ tcu::TestStatus executeLargePrimaryBufferTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Fill create info struct for event
@@ -570,9 +558,7 @@ tcu::TestStatus executeLargePrimaryBufferTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -628,12 +614,7 @@ tcu::TestStatus resetBufferImplicitlyTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               DE_NULL,                                                                                                        // renderPass
-               0u,                                                                                                                     // subpass
-               DE_NULL,                                                                                                        // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const VkEventCreateInfo                                 eventCreateInfo                 =
@@ -667,9 +648,7 @@ tcu::TestStatus resetBufferImplicitlyTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1u,                                                                                                                     // commandBufferCount
                &cmdBuf.get(),                                                                                          // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -743,12 +722,7 @@ tcu::TestStatus recordSinglePrimaryBufferTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Fill create info struct for event
@@ -805,12 +779,7 @@ tcu::TestStatus recordLargePrimaryBufferTest(Context &context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Fill create info struct for event
@@ -864,9 +833,7 @@ tcu::TestStatus recordLargePrimaryBufferTest(Context &context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -908,11 +875,10 @@ tcu::TestStatus recordSingleSecondaryBufferTest(Context& context)
        };
        const Unique<VkCommandBuffer>                   secCmdBuf                               (allocateCommandBuffer(vk, vkDevice, &cmdBufParams));
 
-       const VkCommandBufferBeginInfo                  secCmdBufBeginInfo              =
+       const VkCommandBufferInheritanceInfo    secCmdBufInheritInfo    =
        {
-               VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
                DE_NULL,
-               0,                                                                                                                      // flags
                (VkRenderPass)0u,                                                                                       // renderPass
                0u,                                                                                                                     // subpass
                (VkFramebuffer)0u,                                                                                      // framebuffer
@@ -920,6 +886,13 @@ tcu::TestStatus recordSingleSecondaryBufferTest(Context& context)
                (VkQueryControlFlags)0u,                                                                        // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
+       const VkCommandBufferBeginInfo                  secCmdBufBeginInfo              =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+               DE_NULL,
+               0,                                                                                                                      // flags
+               &secCmdBufInheritInfo,
+       };
 
        // Fill create info struct for event
        const VkEventCreateInfo                                 eventCreateInfo                 =
@@ -975,12 +948,7 @@ tcu::TestStatus recordLargeSecondaryBufferTest(Context &context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Fill create info struct for event
@@ -1035,9 +1003,7 @@ tcu::TestStatus recordLargeSecondaryBufferTest(Context &context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1085,12 +1051,7 @@ tcu::TestStatus submitPrimaryBufferTwiceTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Fill create info struct for event
@@ -1134,9 +1095,7 @@ tcu::TestStatus submitPrimaryBufferTwiceTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1217,6 +1176,13 @@ tcu::TestStatus submitSecondaryBufferTwiceTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
+       };
+
+       const VkCommandBufferInheritanceInfo    secCmdBufInheritInfo    =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
                (VkRenderPass)0u,                                                                                       // renderPass
                0u,                                                                                                                     // subpass
                (VkFramebuffer)0u,                                                                                      // framebuffer
@@ -1224,18 +1190,12 @@ tcu::TestStatus submitSecondaryBufferTwiceTest(Context& context)
                (VkQueryControlFlags)0u,                                                                        // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
-
        const VkCommandBufferBeginInfo                  secCmdBufBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0u,                                                                                                                     // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               &secCmdBufInheritInfo,
        };
 
        // Fill create info struct for event
@@ -1289,9 +1249,7 @@ tcu::TestStatus submitSecondaryBufferTwiceTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf1.get(),                                                                                     // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1331,9 +1289,7 @@ tcu::TestStatus submitSecondaryBufferTwiceTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf2.get(),                                                                                     // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1384,12 +1340,7 @@ tcu::TestStatus oneTimeSubmitFlagPrimaryBufferTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                            // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Fill create info struct for event
@@ -1433,9 +1384,7 @@ tcu::TestStatus oneTimeSubmitFlagPrimaryBufferTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1528,6 +1477,13 @@ tcu::TestStatus oneTimeSubmitFlagSecondaryBufferTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
+       };
+
+       const VkCommandBufferInheritanceInfo    secCmdBufInheritInfo    =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
                (VkRenderPass)0u,                                                                                       // renderPass
                0u,                                                                                                                     // subpass
                (VkFramebuffer)0u,                                                                                      // framebuffer
@@ -1535,18 +1491,12 @@ tcu::TestStatus oneTimeSubmitFlagSecondaryBufferTest(Context& context)
                (VkQueryControlFlags)0u,                                                                        // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
-
        const VkCommandBufferBeginInfo                  secCmdBufBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                            // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               &secCmdBufInheritInfo,
        };
 
        // Fill create info struct for event
@@ -1600,9 +1550,7 @@ tcu::TestStatus oneTimeSubmitFlagSecondaryBufferTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf1.get(),                                                                                     // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1654,9 +1602,7 @@ tcu::TestStatus oneTimeSubmitFlagSecondaryBufferTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf2.get(),                                                                                     // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1707,12 +1653,7 @@ tcu::TestStatus simultaneousUsePrimaryBufferTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,                           // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Fill create info struct for event
@@ -1737,7 +1678,7 @@ tcu::TestStatus simultaneousUsePrimaryBufferTest(Context& context)
                VkPipelineStageFlags stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
 
                // wait for event
-               vk.cmdWaitEvents(*primCmdBuf, 1u, &eventOne.get(), stageMask, stageMask, 0u, DE_NULL);
+               vk.cmdWaitEvents(*primCmdBuf, 1u, &eventOne.get(), stageMask, stageMask, 0u, DE_NULL, 0u, DE_NULL, 0u, DE_NULL);
 
                // Set the second event
                vk.cmdSetEvent(*primCmdBuf, eventTwo.get(), stageMask);
@@ -1762,9 +1703,7 @@ tcu::TestStatus simultaneousUsePrimaryBufferTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1843,6 +1782,13 @@ tcu::TestStatus simultaneousUseSecondaryBufferTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
+       };
+
+       const VkCommandBufferInheritanceInfo    secCmdBufInheritInfo    =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
                (VkRenderPass)0u,                                                                                       // renderPass
                0u,                                                                                                                     // subpass
                (VkFramebuffer)0u,                                                                                      // framebuffer
@@ -1850,18 +1796,12 @@ tcu::TestStatus simultaneousUseSecondaryBufferTest(Context& context)
                (VkQueryControlFlags)0u,                                                                        // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
-
        const VkCommandBufferBeginInfo                  secCmdBufBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,                           // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               &secCmdBufInheritInfo,
        };
 
        // Fill create info struct for event
@@ -1887,7 +1827,7 @@ tcu::TestStatus simultaneousUseSecondaryBufferTest(Context& context)
                VkPipelineStageFlags stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
 
                // wait for event
-               vk.cmdWaitEvents(*secCmdBuf, 1, &eventOne.get(), stageMask, stageMask, 0, DE_NULL);
+               vk.cmdWaitEvents(*secCmdBuf, 1, &eventOne.get(), stageMask, stageMask, 0, DE_NULL, 0u, DE_NULL, 0u, DE_NULL);
 
                // reset event
                vk.cmdSetEvent(*secCmdBuf, *eventTwo, stageMask);
@@ -1919,9 +1859,7 @@ tcu::TestStatus simultaneousUseSecondaryBufferTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -1993,25 +1931,26 @@ tcu::TestStatus recordBufferQueryPreciseWithFlagTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
+       };
+
+       const VkCommandBufferInheritanceInfo    secBufferInheritInfo    =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
                0u,                                                                                                                     // renderPass
                0u,                                                                                                                     // subpass
                0u,                                                                                                                     // framebuffer
-               DE_FALSE,                                                                                                       // occlusionQueryEnable
-               0u,                                                                                                                     // queryFlags
+               VK_TRUE,                                                                                                        // occlusionQueryEnable
+               VK_QUERY_CONTROL_PRECISE_BIT,                                                           // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
-
        const VkCommandBufferBeginInfo                  secBufferBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               0u,                                                                                                                     // renderPass
-               0u,                                                                                                                     // subpass
-               0u,                                                                                                                     // framebuffer
-               VK_TRUE,                                                                                                        // occlusionQueryEnable
-               VK_QUERY_CONTROL_PRECISE_BIT,                                                           // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               &secBufferInheritInfo,
        };
 
        // Create an occlusion query with VK_QUERY_CONTROL_PRECISE_BIT set
@@ -2084,25 +2023,26 @@ tcu::TestStatus recordBufferQueryImpreciseWithFlagTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
+       };
+
+       const VkCommandBufferInheritanceInfo    secBufferInheritInfo    =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
                0u,                                                                                                                     // renderPass
                0u,                                                                                                                     // subpass
                0u,                                                                                                                     // framebuffer
-               DE_FALSE,                                                                                                       // occlusionQueryEnable
-               0u,                                                                                                                     // queryFlags
+               VK_TRUE,                                                                                                        // occlusionQueryEnable
+               VK_QUERY_CONTROL_PRECISE_BIT,                                                           // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
-
        const VkCommandBufferBeginInfo                  secBufferBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               0u,                                                                                                                     // renderPass
-               0u,                                                                                                                     // subpass
-               0u,                                                                                                                     // framebuffer
-               VK_TRUE,                                                                                                        // occlusionQueryEnable
-               VK_QUERY_CONTROL_PRECISE_BIT,                                                           // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               &secBufferInheritInfo,
        };
 
        // Create an occlusion query with VK_QUERY_CONTROL_PRECISE_BIT set
@@ -2175,6 +2115,13 @@ tcu::TestStatus recordBufferQueryImpreciseWithoutFlagTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
+       };
+
+       const VkCommandBufferInheritanceInfo    secBufferInheritInfo    =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
                0u,                                                                                                                     // renderPass
                0u,                                                                                                                     // subpass
                0u,                                                                                                                     // framebuffer
@@ -2182,18 +2129,12 @@ tcu::TestStatus recordBufferQueryImpreciseWithoutFlagTest(Context& context)
                0u,                                                                                                                     // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
-
        const VkCommandBufferBeginInfo                  secBufferBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               0u,                                                                                                                     // renderPass
-               0u,                                                                                                                     // subpass
-               0u,                                                                                                                     // framebuffer
-               VK_TRUE,                                                                                                        // occlusionQueryEnable
-               0u,                                                                                                                     // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               &secBufferInheritInfo,
        };
 
        // Create an occlusion query with VK_QUERY_CONTROL_PRECISE_BIT set
@@ -2260,12 +2201,7 @@ tcu::TestStatus submitBufferCountNonZero(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               DE_NULL,                                                                                                        // renderPass
-               0u,                                                                                                                     // subpass
-               DE_NULL,                                                                                                        // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const VkEventCreateInfo                                 eventCreateInfo                 =
@@ -2303,9 +2239,7 @@ tcu::TestStatus submitBufferCountNonZero(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                BUFFER_COUNT,                                                                                           // commandBufferCount
                cmdBuffers,                                                                                                     // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -2360,12 +2294,7 @@ tcu::TestStatus submitBufferCountEqualZero(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               DE_NULL,                                                                                                        // renderPass
-               0u,                                                                                                                     // subpass
-               DE_NULL,                                                                                                        // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const VkEventCreateInfo                                 eventCreateInfo                 =
@@ -2404,9 +2333,7 @@ tcu::TestStatus submitBufferCountEqualZero(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1u,                                                                                                                     // commandBufferCount
                &cmdBuffers[0],                                                                                         // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -2419,6 +2346,7 @@ tcu::TestStatus submitBufferCountEqualZero(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1u,                                                                                                                     // commandBufferCount
                &cmdBuffers[1],                                                                                         // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -2431,7 +2359,7 @@ tcu::TestStatus submitBufferCountEqualZero(Context& context)
        VK_CHECK(vk.queueSubmit(queue, 0, &submitInfoCountZero, fenceZero.get()));
        VK_CHECK(vk.queueSubmit(queue, 1, &submitInfoCountOne, fenceOne.get()));
 
-       const VkFence                                                   fences[]                                = 
+       const VkFence                                                   fences[]                                =
        {
                fenceZero.get(),
                fenceOne.get(),
@@ -2483,12 +2411,7 @@ tcu::TestStatus submitBufferNullFence(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               DE_NULL,                                                                                                        // renderPass
-               0u,                                                                                                                     // subpass
-               DE_NULL,                                                                                                        // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const VkEventCreateInfo                                 eventCreateInfo                 =
@@ -2526,9 +2449,7 @@ tcu::TestStatus submitBufferNullFence(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1u,                                                                                                                     // commandBufferCount
                &cmdBuffers[0],                                                                                         // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -2541,9 +2462,7 @@ tcu::TestStatus submitBufferNullFence(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1u,                                                                                                                     // commandBufferCount
                &cmdBuffers[1],                                                                                         // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -2609,6 +2528,13 @@ tcu::TestStatus executeSecondaryBufferTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
+       };
+
+       const VkCommandBufferInheritanceInfo    secCmdBufInheritInfo    =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
                DE_NULL,                                                                                                        // renderPass
                0u,                                                                                                                     // subpass
                DE_NULL,                                                                                                        // framebuffer
@@ -2616,18 +2542,12 @@ tcu::TestStatus executeSecondaryBufferTest(Context& context)
                (VkQueryControlFlags)0u,                                                                        // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
-
        const VkCommandBufferBeginInfo                  secCmdBufBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               DE_NULL,                                                                                                        // renderPass
-               0u,                                                                                                                     // subpass
-               DE_NULL,                                                                                                        // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               &secCmdBufInheritInfo,
        };
 
        // Fill create info struct for event
@@ -2678,9 +2598,7 @@ tcu::TestStatus executeSecondaryBufferTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1u,                                                                                                                     // commandBufferCount
                &primCmdBuf.get(),                                                                                      // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -2747,6 +2665,13 @@ tcu::TestStatus executeSecondaryBufferTwiceTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                0,                                                                                                                      // flags
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
+       };
+
+       const VkCommandBufferInheritanceInfo    secCmdBufInheritInfo    =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
                (VkRenderPass)0u,                                                                                       // renderPass
                0u,                                                                                                                     // subpass
                (VkFramebuffer)0u,                                                                                      // framebuffer
@@ -2754,18 +2679,12 @@ tcu::TestStatus executeSecondaryBufferTwiceTest(Context& context)
                (VkQueryControlFlags)0u,                                                                        // queryFlags
                (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
        };
-
        const VkCommandBufferBeginInfo                  secCmdBufBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,                           // flags
-               (VkRenderPass)0u,                                                                                       // renderPass
-               0u,                                                                                                                     // subpass
-               (VkFramebuffer)0u,                                                                                      // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               &secCmdBufInheritInfo,
        };
 
        // Fill create info struct for event
@@ -2791,7 +2710,7 @@ tcu::TestStatus executeSecondaryBufferTwiceTest(Context& context)
                        VkPipelineStageFlags stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
 
                        // wait for event
-                       vk.cmdWaitEvents(cmdBuffers[ndx], 1, &eventOne.get(), stageMask, stageMask, 0, DE_NULL);
+                       vk.cmdWaitEvents(cmdBuffers[ndx], 1, &eventOne.get(), stageMask, stageMask, 0, DE_NULL, 0u, DE_NULL, 0u, DE_NULL);
                }
                // end recording of secondary buffers
                VK_CHECK(vk.endCommandBuffer(cmdBuffers[ndx]));
@@ -2830,9 +2749,7 @@ tcu::TestStatus executeSecondaryBufferTwiceTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBufOne.get(),                                                                           // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -2851,9 +2768,7 @@ tcu::TestStatus executeSecondaryBufferTwiceTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &primCmdBufTwo.get(),                                                                           // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
@@ -2981,40 +2896,39 @@ tcu::TestStatus orderBindPipelineTest(Context& context)
        const Unique<VkPipeline>                                pipelineBad                             (createComputePipeline(vk, device, (VkPipelineCache)0u, &createInfoBad));
 
        const VkAccessFlags                                             inputBit                                = (VK_ACCESS_UNIFORM_READ_BIT);
-       const VkBufferMemoryBarrier                             bufferBarrierA                  =
+       const VkBufferMemoryBarrier                             bufferBarriers[]                =
        {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
-               DE_NULL,
-               VK_ACCESS_HOST_WRITE_BIT,                                                                       // outputMask
-               inputBit,                                                                                                       // inputMask
-               VK_QUEUE_FAMILY_IGNORED,                                                                        // srcQueueFamilyIndex
-               VK_QUEUE_FAMILY_IGNORED,                                                                        // destQueueFamilyIndex
-               *bufferA,                                                                                                       // buffer
-               (VkDeviceSize)0u,                                                                                       // offset
-               (VkDeviceSize)bufferSizeA,                                                                      // size
-       };
-
-       const VkBufferMemoryBarrier                             bufferBarrierB                  =
-       {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
-               DE_NULL,
-               VK_ACCESS_HOST_WRITE_BIT,                                                                       // outputMask
-               inputBit,                                                                                                       // inputMask
-               VK_QUEUE_FAMILY_IGNORED,                                                                        // srcQueueFamilyIndex
-               VK_QUEUE_FAMILY_IGNORED,                                                                        // destQueueFamilyIndex
-               *bufferB,                                                                                                       // buffer
-               (VkDeviceSize)0u,                                                                                       // offset
-               (VkDeviceSize)bufferSizeB,                                                                      // size
+               {
+                       VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+                       DE_NULL,
+                       VK_ACCESS_HOST_WRITE_BIT,                                                                       // outputMask
+                       inputBit,                                                                                                       // inputMask
+                       VK_QUEUE_FAMILY_IGNORED,                                                                        // srcQueueFamilyIndex
+                       VK_QUEUE_FAMILY_IGNORED,                                                                        // destQueueFamilyIndex
+                       *bufferA,                                                                                                       // buffer
+                       (VkDeviceSize)0u,                                                                                       // offset
+                       (VkDeviceSize)bufferSizeA,                                                                      // size
+               },
+               {
+                       VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+                       DE_NULL,
+                       VK_ACCESS_HOST_WRITE_BIT,                                                                       // outputMask
+                       inputBit,                                                                                                       // inputMask
+                       VK_QUEUE_FAMILY_IGNORED,                                                                        // srcQueueFamilyIndex
+                       VK_QUEUE_FAMILY_IGNORED,                                                                        // destQueueFamilyIndex
+                       *bufferB,                                                                                                       // buffer
+                       (VkDeviceSize)0u,                                                                                       // offset
+                       (VkDeviceSize)bufferSizeB,                                                                      // size
+               }
        };
 
        const deUint32                                                  numSrcBuffers                   = 1u;
 
        const deUint32* const                                   dynamicOffsets                  = (DE_NULL);
        const deUint32                                                  numDynamicOffsets               = (0);
-       const void* const                                               preBarriers[]                   = { &bufferBarrierA, &bufferBarrierB };
        const int                                                               numPreBarriers                  = numSrcBuffers;
-       const void* const                                               postBarriers[]                  = { result.getResultReadBarrier() };
-       const int                                                               numPostBarriers                 = DE_LENGTH_OF_ARRAY(postBarriers);
+       const vk::VkBufferMemoryBarrier* const  postBarriers                    = result.getResultReadBarrier();
+       const int                                                               numPostBarriers                 = 1;
        const tcu::Vec4                                                 refQuadrantValue14              = (colorA2);
        const tcu::Vec4                                                 refQuadrantValue23              = (colorA1);
        const tcu::Vec4                                                 references[4]                   =
@@ -3060,12 +2974,7 @@ tcu::TestStatus orderBindPipelineTest(Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                            // sType
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // flags
-               DE_NULL,                                                                                                        // renderPass
-               0u,                                                                                                                     // subpass
-               DE_NULL,                                                                                                        // framebuffer
-               VK_FALSE,                                                                                                       // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                        // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                                      // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const Unique<VkFence>                                   cmdCompleteFence                (createFence(vk, device, &fenceCreateInfo));
@@ -3078,10 +2987,16 @@ tcu::TestStatus orderBindPipelineTest(Context& context)
        vk.cmdBindDescriptorSets(*cmd, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0, numDescriptorSets, descriptorSets, numDynamicOffsets, dynamicOffsets);
 
        if (numPreBarriers)
-               vk.cmdPipelineBarrier(*cmd, 0u, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_FALSE, numPreBarriers, preBarriers);
+               vk.cmdPipelineBarrier(*cmd, 0u, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0,
+                                                         0, (const VkMemoryBarrier*)DE_NULL,
+                                                         numPreBarriers, bufferBarriers,
+                                                         0, (const VkImageMemoryBarrier*)DE_NULL);
 
        vk.cmdDispatch(*cmd, numWorkGroups.x(), numWorkGroups.y(), numWorkGroups.z());
-       vk.cmdPipelineBarrier(*cmd, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, numPostBarriers, postBarriers);
+       vk.cmdPipelineBarrier(*cmd, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0,
+                                                 0, (const VkMemoryBarrier*)DE_NULL,
+                                                 numPostBarriers, postBarriers,
+                                                 0, (const VkImageMemoryBarrier*)DE_NULL);
        VK_CHECK(vk.endCommandBuffer(*cmd));
 
        // run
@@ -3092,9 +3007,7 @@ tcu::TestStatus orderBindPipelineTest(Context& context)
                DE_NULL,                                                                                                        // pNext
                0u,                                                                                                                     // waitSemaphoreCount
                DE_NULL,                                                                                                        // pWaitSemaphores
-               // TODO: The following field is in api spec 1.0 37bedec32143807010323f126ad685ab5e9d98de
-               // TODO: but not in the header Loader and Tools 69d4893b673bd552e445ba999ad0e73463d35007
-               // DE_NULL,                                                                                                     // pWaitDstStageMask
+               (const VkPipelineStageFlags*)DE_NULL,                                           // pWaitDstStageMask
                1,                                                                                                                      // commandBufferCount
                &cmd.get(),                                                                                                     // pCommandBuffers
                0u,                                                                                                                     // signalSemaphoreCount
index f379a5f..37908ca 100644 (file)
@@ -62,7 +62,7 @@ public:
 
        inline vk::VkBuffer                                             getBuffer(void) const { return *m_buffer; }
 
-       inline const void *                                             getResultReadBarrier(void) const { return &m_bufferBarrier; }
+       inline const vk::VkBufferMemoryBarrier* getResultReadBarrier(void) const { return &m_bufferBarrier; }
 
 private:
        static vk::Move<vk::VkBuffer>                   createResultBuffer(const vk::DeviceInterface &vki,
index 9510427..5a4beab 100644 (file)
@@ -342,13 +342,6 @@ void CopiesAndBlittingTestInstance::uploadImage(tcu::ConstPixelBufferAccess imag
                }
        };
 
-       const void*                                                             preCopyBarriers[2]              =
-       {
-               &preBufferBarrier,
-               &preImageBarrier
-       };
-       const void* const                                               postCopyBarrier                 = &postImageBarrier;
-
        const VkBufferImageCopy                                 copyRegion                              =
        {
                0u,                                                                                             // VkDeviceSize                         bufferOffset;
@@ -361,7 +354,11 @@ void CopiesAndBlittingTestInstance::uploadImage(tcu::ConstPixelBufferAccess imag
                        1u,                                                                             // deUint32                     layerCount;
                },
                { 0, 0, 0 },                                                                    // VkOffset3D                           imageOffset;
-               { imageAccess.getWidth(), imageAccess.getHeight(), 1u }                 // VkExtent3D                           imageExtent;
+               {
+                       (deUint32)imageAccess.getWidth(),
+                       (deUint32)imageAccess.getHeight(),
+                       1u
+               }                                                                                               // VkExtent3D                           imageExtent;
        };
 
        // Write buffer data
@@ -369,23 +366,18 @@ void CopiesAndBlittingTestInstance::uploadImage(tcu::ConstPixelBufferAccess imag
        flushMappedMemoryRange(vk, vkDevice, bufferAlloc->getMemory(), bufferAlloc->getOffset(), bufferSize);
 
        // Copy buffer to image
-       VkCommandBufferBeginInfo                                cmdBufferBeginInfo              =
+       const VkCommandBufferBeginInfo                  cmdBufferBeginInfo              =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    // VkStructureType                                      sType;
                DE_NULL,                                                                                                // const void*                                          pNext;
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                    // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                                // VkFramebuffer                                        framebuffer;
-               false,                                                                                                  // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u                                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        VK_CHECK(vk.beginCommandBuffer(*cmdBuffer, &cmdBufferBeginInfo));
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 2u, preCopyBarriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &preBufferBarrier, 1, &preImageBarrier);
        vk.cmdCopyBufferToImage(*cmdBuffer, *buffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1u, &postCopyBarrier);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &postImageBarrier);
        VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
 
        const VkSubmitInfo                                              submitInfo                              =
@@ -394,6 +386,7 @@ void CopiesAndBlittingTestInstance::uploadImage(tcu::ConstPixelBufferAccess imag
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &cmdBuffer.get(),                               // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -549,9 +542,6 @@ de::MovePtr<tcu::TextureLevel> CopiesAndBlittingTestInstance::readImage     (const v
                pixelDataSize                                                           // VkDeviceSize         size;
        };
 
-       const void* const       imageBarrierPtr         = &imageBarrier;
-       const void* const       bufferBarrierPtr        = &bufferBarrier;
-
        // Copy image to buffer
 
        const VkBufferImageCopy copyRegion =
@@ -564,23 +554,18 @@ de::MovePtr<tcu::TextureLevel> CopiesAndBlittingTestInstance::readImage   (const v
                imageSize                                                                       // VkExtent3D                           imageExtent;
        };
 
-       VkCommandBufferBeginInfo cmdBufferBeginInfo =
+       const VkCommandBufferBeginInfo cmdBufferBeginInfo =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    // VkStructureType                                      sType;
                DE_NULL,                                                                                                // const void*                                          pNext;
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                    // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                                // VkFramebuffer                                        framebuffer;
-               false,                                                                                                  // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u                                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        VK_CHECK(vk.beginCommandBuffer(*cmdBuffer, &cmdBufferBeginInfo));
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 1, &imageBarrierPtr);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
        vk.cmdCopyImageToBuffer(*cmdBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *buffer, 1, &copyRegion);
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1, &bufferBarrierPtr);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
 
        const VkSubmitInfo submitInfo =
@@ -589,6 +574,7 @@ de::MovePtr<tcu::TextureLevel> CopiesAndBlittingTestInstance::readImage     (const v
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &cmdBuffer.get(),                               // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -630,6 +616,23 @@ CopyImageToImage::CopyImageToImage (Context& context, TestParams params)
        const deUint32                          queueFamilyIndex        = context.getUniversalQueueFamilyIndex();
        SimpleAllocator                         memAlloc                        (vk, vkDevice, getPhysicalDeviceMemoryProperties(context.getInstanceInterface(), context.getPhysicalDevice()));
 
+       VkImageFormatProperties properties;
+       if ((context.getInstanceInterface().getPhysicalDeviceImageFormatProperties (context.getPhysicalDevice(),
+                                                                                                                                                               m_params.src.image.format,
+                                                                                                                                                               VK_IMAGE_TYPE_2D,
+                                                                                                                                                               VK_IMAGE_TILING_OPTIMAL,
+                                                                                                                                                               VK_IMAGE_USAGE_TRANSFER_SRC_BIT, 0,
+                                                                                                                                                               &properties) == VK_ERROR_FORMAT_NOT_SUPPORTED) ||
+               (context.getInstanceInterface().getPhysicalDeviceImageFormatProperties (context.getPhysicalDevice(),
+                                                                                                                                                               m_params.dst.image.format,
+                                                                                                                                                               VK_IMAGE_TYPE_2D,
+                                                                                                                                                               VK_IMAGE_TILING_OPTIMAL,
+                                                                                                                                                               VK_FORMAT_FEATURE_BLIT_DST_BIT, 0,
+                                                                                                                                                               &properties) == VK_ERROR_FORMAT_NOT_SUPPORTED))
+       {
+               TCU_THROW(NotSupportedError, "Format not supported");
+       }
+
        // Create source image
        {
                const VkImageCreateInfo sourceImageParams =
@@ -691,12 +694,12 @@ tcu::TestStatus CopyImageToImage::iterate()
                                                                                                                                                                m_params.src.image.extent.width,
                                                                                                                                                                m_params.src.image.extent.height,
                                                                                                                                                                m_params.src.image.extent.depth));
-       generateBuffer(m_sourceTextureLevel->getAccess(), m_params.src.image.extent.width, m_params.src.image.extent.height, m_params.src.image.extent.depth);
+       generateBuffer(m_sourceTextureLevel->getAccess(), m_params.src.image.extent.width, m_params.src.image.extent.height, m_params.src.image.extent.depth, FILL_MODE_WHITE);
        m_destinationTextureLevel = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(dstTcuFormat,
                                                                                                                                                                         (int)m_params.dst.image.extent.width,
                                                                                                                                                                         (int)m_params.dst.image.extent.height,
                                                                                                                                                                         (int)m_params.dst.image.extent.depth));
-       generateBuffer(m_destinationTextureLevel->getAccess(), m_params.dst.image.extent.width, m_params.dst.image.extent.height, m_params.dst.image.extent.depth);
+       generateBuffer(m_destinationTextureLevel->getAccess(), m_params.dst.image.extent.width, m_params.dst.image.extent.height, m_params.dst.image.extent.depth, FILL_MODE_SEQUENTIAL);
        generateExpectedResult();
 
        uploadImage(m_sourceTextureLevel->getAccess(), m_source.get());
@@ -752,26 +755,18 @@ tcu::TestStatus CopyImageToImage::iterate()
                }
        };
 
-       const void* const       srcImageBarrierPtr              = &srcImageBarrier;
-       const void* const       dstImageBarrierPtr              = &dstImageBarrier;
-
-       VkCommandBufferBeginInfo cmdBufferBeginInfo =
+       const VkCommandBufferBeginInfo cmdBufferBeginInfo =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    // VkStructureType                                      sType;
                DE_NULL,                                                                                                // const void*                                          pNext;
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                    // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                                // VkFramebuffer                                        framebuffer;
-               false,                                                                                                  // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u                                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
-       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 1, &srcImageBarrierPtr);
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &srcImageBarrier);
        vk.cmdCopyImage(*m_cmdBuffer, m_source.get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, m_destination.get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, (deUint32)m_params.regions.size(), imageCopies);
-       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1, &dstImageBarrierPtr);
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &dstImageBarrier);
        VK_CHECK(vk.endCommandBuffer(*m_cmdBuffer));
 
        const VkSubmitInfo submitInfo =
@@ -780,6 +775,7 @@ tcu::TestStatus CopyImageToImage::iterate()
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -895,10 +891,13 @@ CopyBufferToBuffer::CopyBufferToBuffer (Context& context, TestParams params)
 
 tcu::TestStatus CopyBufferToBuffer::iterate()
 {
-       m_sourceTextureLevel            = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(mapVkFormat(VK_FORMAT_R32_UINT), (int)m_params.src.buffer.size, 1));
-       generateBuffer(m_sourceTextureLevel->getAccess(), (int)m_params.src.buffer.size, 1, 1, FILL_MODE_RED);
-       m_destinationTextureLevel       = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(mapVkFormat(VK_FORMAT_R32_UINT), (int)m_params.dst.buffer.size, 1));
-       generateBuffer(m_destinationTextureLevel->getAccess(), (int)m_params.dst.buffer.size, 1, 1, FILL_MODE_WHITE);
+       const int srcLevelWidth = (int)(m_params.src.buffer.size/4); // Here the format is VK_FORMAT_R32_UINT, we need to divide the buffer size by 4
+       m_sourceTextureLevel            = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(mapVkFormat(VK_FORMAT_R32_UINT), srcLevelWidth, 1));
+       generateBuffer(m_sourceTextureLevel->getAccess(), srcLevelWidth, 1, 1, FILL_MODE_RED);
+
+       const int dstLevelWidth = (int)(m_params.dst.buffer.size/4);
+       m_destinationTextureLevel       = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(mapVkFormat(VK_FORMAT_R32_UINT), dstLevelWidth, 1));
+       generateBuffer(m_destinationTextureLevel->getAccess(), dstLevelWidth, 1, 1, FILL_MODE_WHITE);
 
        generateExpectedResult();
 
@@ -935,30 +934,22 @@ tcu::TestStatus CopyBufferToBuffer::iterate()
                m_params.dst.buffer.size                                        // VkDeviceSize         size;
        };
 
-       const void* const srcBufferBarrierPtr = &srcBufferBarrier;
-       const void* const dstBufferBarrierPtr = &dstBufferBarrier;
-
        VkBufferCopy* bufferCopies = ((VkBufferCopy*)deMalloc(m_params.regions.size() * sizeof(VkBufferCopy)));
        for (deUint32 i = 0; i < m_params.regions.size(); i++)
                bufferCopies[i] = m_params.regions[i].bufferCopy;
 
-       VkCommandBufferBeginInfo cmdBufferBeginInfo =
+       const VkCommandBufferBeginInfo cmdBufferBeginInfo =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    // VkStructureType                                      sType;
                DE_NULL,                                                                                                // const void*                                          pNext;
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                    // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                                // VkFramebuffer                                        framebuffer;
-               false,                                                                                                  // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u                                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
-       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 1, &srcBufferBarrierPtr);
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &srcBufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        vk.cmdCopyBuffer(*m_cmdBuffer, m_source.get(), m_destination.get(), (deUint32)m_params.regions.size(), bufferCopies);
-       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1, &dstBufferBarrierPtr);
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &dstBufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        VK_CHECK(vk.endCommandBuffer(*m_cmdBuffer));
 
        const VkSubmitInfo submitInfo =
@@ -967,6 +958,7 @@ tcu::TestStatus CopyBufferToBuffer::iterate()
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -978,7 +970,7 @@ tcu::TestStatus CopyBufferToBuffer::iterate()
        VK_CHECK(vk.waitForFences(vkDevice, 1, &m_fence.get(), true, ~(0ull) /* infinity */));
 
        // Read buffer data
-       de::MovePtr<tcu::TextureLevel>  resultLevel             (new tcu::TextureLevel(mapVkFormat(VK_FORMAT_R32_UINT), (int)m_params.dst.buffer.size, 1));
+       de::MovePtr<tcu::TextureLevel>  resultLevel             (new tcu::TextureLevel(mapVkFormat(VK_FORMAT_R32_UINT), dstLevelWidth, 1));
        invalidateMappedMemoryRange(vk, vkDevice, m_destinationBufferAlloc->getMemory(), m_destinationBufferAlloc->getOffset(), m_params.dst.buffer.size);
        tcu::copy(*resultLevel, tcu::ConstPixelBufferAccess(resultLevel->getFormat(), resultLevel->getSize(), m_destinationBufferAlloc->getHostPtr()));
        deFree(bufferCopies);
@@ -1144,31 +1136,23 @@ tcu::TestStatus CopyImageToBuffer::iterate()
                m_bufferSize                                                            // VkDeviceSize         size;
        };
 
-       const void* const       imageBarrierPtr         = &imageBarrier;
-       const void* const       bufferBarrierPtr        = &bufferBarrier;
-
        // Copy from image to buffer
        VkBufferImageCopy* bufferImageCopies = ((VkBufferImageCopy*)deMalloc(m_params.regions.size() * sizeof(VkBufferImageCopy)));
        for (deUint32 i = 0; i < m_params.regions.size(); i++)
                bufferImageCopies[i] = m_params.regions[i].bufferImageCopy;
 
-       VkCommandBufferBeginInfo cmdBufferBeginInfo =
+       const VkCommandBufferBeginInfo cmdBufferBeginInfo =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    // VkStructureType                                      sType;
                DE_NULL,                                                                                                // const void*                                          pNext;
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                    // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                                // VkFramebuffer                                        framebuffer;
-               false,                                                                                                  // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u                                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
-       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 1, &imageBarrierPtr);
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
        vk.cmdCopyImageToBuffer(*m_cmdBuffer, m_source.get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, m_destination.get(), (deUint32)m_params.regions.size(), bufferImageCopies);
-       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1, &bufferBarrierPtr);
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        VK_CHECK(vk.endCommandBuffer(*m_cmdBuffer));
 
        const VkSubmitInfo                              submitInfo              =
@@ -1177,6 +1161,7 @@ tcu::TestStatus CopyImageToBuffer::iterate()
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -1232,9 +1217,9 @@ void CopyImageToBuffer::copyRegionToTextureLevel(tcu::ConstPixelBufferAccess src
        const VkOffset3D        srcOffset       = region.bufferImageCopy.imageOffset;
        const int                       texelOffset     = (int) region.bufferImageCopy.bufferOffset / texelSize;
 
-       for (int z = 0; z < extent.depth; z++)
+       for (deUint32 z = 0; z < extent.depth; z++)
        {
-               for (int y = 0; y < extent.height; y++)
+               for (deUint32 y = 0; y < extent.height; y++)
                {
                        int                                                                     texelIndex              = texelOffset + (z * imageHeight + y) *  rowLength;
                        const tcu::ConstPixelBufferAccess       srcSubRegion    = tcu::getSubregion(src, srcOffset.x, srcOffset.y + y, srcOffset.z + z,
@@ -1326,12 +1311,12 @@ CopyBufferToImage::CopyBufferToImage (Context& context, TestParams testParams)
 tcu::TestStatus CopyBufferToImage::iterate()
 {
        m_sourceTextureLevel = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(m_textureFormat, (int)m_params.src.buffer.size, 1));
-       generateBuffer(m_sourceTextureLevel->getAccess(), m_params.src.image.extent.width, m_params.src.image.extent.height, m_params.src.image.extent.depth);
+       generateBuffer(m_sourceTextureLevel->getAccess(), m_params.src.image.extent.width, m_params.src.image.extent.height, m_params.src.image.extent.depth, FILL_MODE_WHITE);
        m_destinationTextureLevel = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(m_textureFormat,
                                                                                                                                                                        m_params.dst.image.extent.width,
                                                                                                                                                                        m_params.dst.image.extent.height,
                                                                                                                                                                        m_params.dst.image.extent.depth));
-       generateBuffer(m_destinationTextureLevel->getAccess(), (int)m_params.dst.buffer.size, 1, 1);
+       generateBuffer(m_destinationTextureLevel->getAccess(), (int)m_params.dst.buffer.size, 1, 1, FILL_MODE_SEQUENTIAL);
 
        generateExpectedResult();
 
@@ -1377,31 +1362,23 @@ tcu::TestStatus CopyBufferToImage::iterate()
                }
        };
 
-       const void* const       bufferBarrierPtr        = &bufferBarrier;
-       const void* const       imageBarrierPtr         = &imageBarrier;
-
        // Copy from buffer to image
        VkBufferImageCopy* bufferImageCopies = ((VkBufferImageCopy*)deMalloc(m_params.regions.size() * sizeof(VkBufferImageCopy)));
        for (deUint32 i = 0; i < m_params.regions.size(); i++)
                bufferImageCopies[i] = m_params.regions[i].bufferImageCopy;
 
-       VkCommandBufferBeginInfo cmdBufferBeginInfo =
+       const VkCommandBufferBeginInfo cmdBufferBeginInfo =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    // VkStructureType                                      sType;
                DE_NULL,                                                                                                // const void*                                          pNext;
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                    // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                                // VkFramebuffer                                        framebuffer;
-               false,                                                                                                  // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u                                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
-       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1, &bufferBarrierPtr);
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        vk.cmdCopyBufferToImage(*m_cmdBuffer, m_source.get(), m_destination.get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, (deUint32)m_params.regions.size(), bufferImageCopies);
-       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 1, &imageBarrierPtr);
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
        VK_CHECK(vk.endCommandBuffer(*m_cmdBuffer));
 
        const VkSubmitInfo                              submitInfo              =
@@ -1410,6 +1387,7 @@ tcu::TestStatus CopyBufferToImage::iterate()
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -1463,9 +1441,9 @@ void CopyBufferToImage::copyRegionToTextureLevel(tcu::ConstPixelBufferAccess src
        const VkOffset3D        dstOffset       = region.bufferImageCopy.imageOffset;
        const int                       texelOffset     = (int) region.bufferImageCopy.bufferOffset / texelSize;
 
-       for (int z = 0; z < extent.depth; z++)
+       for (deUint32 z = 0; z < extent.depth; z++)
        {
-               for (int y = 0; y < extent.height; y++)
+               for (deUint32 y = 0; y < extent.height; y++)
                {
                        int                                                                     texelIndex              = texelOffset + (z * imageHeight + y) *  rowLength;
                        const tcu::ConstPixelBufferAccess       srcSubRegion    = tcu::getSubregion(src, texelIndex, 0, region.bufferImageCopy.imageExtent.width, 1);
index a9363e4..f618893 100644 (file)
@@ -275,7 +275,7 @@ bool validateFeatureLimits(VkPhysicalDeviceProperties* properties, VkPhysicalDev
                                deUint32 limitToCheck = featureLimitTable[ndx].uintVal;
                                if (featureLimitTable[ndx].unsuppTableNdx != -1)
                                {
-                                       if (*((VkBool32*)((char*)features+unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].featureOffset)))
+                                       if (*((VkBool32*)((char*)features+unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].featureOffset)) == VK_FALSE)
                                                limitToCheck = unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].uintVal;
                                }
 
@@ -308,7 +308,7 @@ bool validateFeatureLimits(VkPhysicalDeviceProperties* properties, VkPhysicalDev
                                float limitToCheck = featureLimitTable[ndx].floatVal;
                                if (featureLimitTable[ndx].unsuppTableNdx != -1)
                                {
-                                       if (*((VkBool32*)((char*)features+unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].featureOffset)))
+                                       if (*((VkBool32*)((char*)features+unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].featureOffset)) == VK_FALSE)
                                                limitToCheck = unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].floatVal;
                                }
 
@@ -340,7 +340,7 @@ bool validateFeatureLimits(VkPhysicalDeviceProperties* properties, VkPhysicalDev
                                deInt32 limitToCheck = featureLimitTable[ndx].intVal;
                                if (featureLimitTable[ndx].unsuppTableNdx != -1)
                                {
-                                       if (*((VkBool32*)((char*)features+unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].featureOffset)))
+                                       if (*((VkBool32*)((char*)features+unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].featureOffset)) == VK_FALSE)
                                                limitToCheck = unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].intVal;
                                }
                                if (featureLimitTable[ndx].type == LIMIT_TYPE_MIN)
@@ -371,7 +371,7 @@ bool validateFeatureLimits(VkPhysicalDeviceProperties* properties, VkPhysicalDev
                                deUint64 limitToCheck = featureLimitTable[ndx].deviceSizeVal;
                                if (featureLimitTable[ndx].unsuppTableNdx != -1)
                                {
-                                       if (*((VkBool32*)((char*)features+unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].featureOffset)))
+                                       if (*((VkBool32*)((char*)features+unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].featureOffset)) == VK_FALSE)
                                                limitToCheck = unsupportedFeatureTable[featureLimitTable[ndx].unsuppTableNdx].deviceSizeVal;
                                }
 
index e5cdc79..3f610f1 100644 (file)
@@ -293,7 +293,10 @@ struct Instance
 {
        typedef VkInstance Type;
 
-       enum { MAX_CONCURRENT = 32 };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return 32;
+       }
 
        struct Parameters
        {
@@ -337,7 +340,10 @@ struct Device
 {
        typedef VkDevice Type;
 
-       enum { MAX_CONCURRENT = 32 };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return 32;
+       }
 
        struct Parameters
        {
@@ -428,7 +434,10 @@ struct DeviceMemory
 {
        typedef VkDeviceMemory Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context& context)
+       {
+               return context.getDeviceProperties().limits.maxMemoryAllocationCount;
+       }
 
        struct Parameters
        {
@@ -481,7 +490,10 @@ struct Buffer
 {
        typedef VkBuffer Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -522,7 +534,10 @@ struct BufferView
 {
        typedef VkBufferView Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -576,7 +591,10 @@ struct Image
 {
        typedef VkImage Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -648,7 +666,10 @@ struct ImageView
 {
        typedef VkImageView Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -706,7 +727,10 @@ struct Semaphore
 {
        typedef VkSemaphore Type;
 
-       enum { MAX_CONCURRENT = 100 };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return 100;
+       }
 
        struct Parameters
        {
@@ -739,7 +763,10 @@ struct Fence
 {
        typedef VkFence Type;
 
-       enum { MAX_CONCURRENT = 100 };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return 100;
+       }
 
        struct Parameters
        {
@@ -772,7 +799,10 @@ struct Event
 {
        typedef VkEvent Type;
 
-       enum { MAX_CONCURRENT = 100 };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return 100;
+       }
 
        struct Parameters
        {
@@ -805,7 +835,10 @@ struct QueryPool
 {
        typedef VkQueryPool Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -847,7 +880,10 @@ struct ShaderModule
 {
        typedef VkShaderModule Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -928,7 +964,10 @@ struct PipelineCache
 {
        typedef VkPipelineCache Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -959,7 +998,10 @@ struct Sampler
 {
        typedef VkSampler Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context& context)
+       {
+               return context.getDeviceProperties().limits.maxSamplerAllocationCount;
+       }
 
        struct Parameters
        {
@@ -970,6 +1012,7 @@ struct Sampler
                VkSamplerAddressMode    addressModeV;
                VkSamplerAddressMode    addressModeW;
                float                                   mipLodBias;
+               VkBool32                                anisotropyEnable;
                float                                   maxAnisotropy;
                VkBool32                                compareEnable;
                VkCompareOp                             compareOp;
@@ -982,11 +1025,12 @@ struct Sampler
                Parameters (void)
                        : magFilter                                     (VK_FILTER_NEAREST)
                        , minFilter                                     (VK_FILTER_NEAREST)
-                       , mipmapMode                            (VK_SAMPLER_MIPMAP_MODE_BASE)
+                       , mipmapMode                            (VK_SAMPLER_MIPMAP_MODE_NEAREST)
                        , addressModeU                          (VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)
                        , addressModeV                          (VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)
                        , addressModeW                          (VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)
                        , mipLodBias                            (0.0f)
+                       , anisotropyEnable                      (VK_FALSE)
                        , maxAnisotropy                         (1.0f)
                        , compareEnable                         (VK_FALSE)
                        , compareOp                                     (VK_COMPARE_OP_ALWAYS)
@@ -1016,6 +1060,7 @@ struct Sampler
                        params.addressModeV,
                        params.addressModeW,
                        params.mipLodBias,
+                       params.anisotropyEnable,
                        params.maxAnisotropy,
                        params.compareEnable,
                        params.compareOp,
@@ -1033,7 +1078,10 @@ struct DescriptorSetLayout
 {
        typedef VkDescriptorSetLayout Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -1138,7 +1186,10 @@ struct PipelineLayout
 {
        typedef VkPipelineLayout Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -1201,7 +1252,10 @@ struct RenderPass
 {
        typedef VkRenderPass Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        // \todo [2015-09-17 pyry] More interesting configurations
        struct Parameters
@@ -1289,7 +1343,10 @@ struct GraphicsPipeline
 {
        typedef VkPipeline Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        // \todo [2015-09-17 pyry] More interesting configurations
        struct Parameters
@@ -1503,7 +1560,10 @@ struct ComputePipeline
 {
        typedef VkPipeline Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        // \todo [2015-09-17 pyry] More interesting configurations
        struct Parameters
@@ -1570,7 +1630,10 @@ struct DescriptorPool
 {
        typedef VkDescriptorPool Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -1622,7 +1685,10 @@ struct DescriptorSet
 {
        typedef VkDescriptorSet Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -1688,7 +1754,10 @@ struct Framebuffer
 {
        typedef VkFramebuffer Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -1755,7 +1824,10 @@ struct CommandPool
 {
        typedef VkCommandPool Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -1789,7 +1861,10 @@ struct CommandBuffer
 {
        typedef VkCommandBuffer Type;
 
-       enum { MAX_CONCURRENT = DEFAULT_MAX_CONCURRENT_OBJECTS };
+       static deUint32 getMaxConcurrent (Context&)
+       {
+               return DEFAULT_MAX_CONCURRENT_OBJECTS;
+       }
 
        struct Parameters
        {
@@ -1883,7 +1958,7 @@ tcu::TestStatus createMaxConcurrentTest (Context& context, typename Object::Para
        typedef Unique<typename Object::Type>   UniqueObject;
        typedef SharedPtr<UniqueObject>                 ObjectPtr;
 
-       const deUint32                                          numObjects      = Object::MAX_CONCURRENT;
+       const deUint32                                          numObjects      = Object::getMaxConcurrent(context);
        const Environment                                       env                     (context, numObjects);
        const typename Object::Resources        res                     (env, params);
        vector<ObjectPtr>                                       objects         (numObjects);
@@ -2014,10 +2089,10 @@ tcu::TestStatus multithreadedCreatePerThreadDeviceTest (Context& context, typena
 template<typename Object>
 tcu::TestStatus createSingleAllocCallbacksTest (Context& context, typename Object::Parameters params)
 {
-       const deUint32                                          noCmdScope              = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE
-                                                                                                               | VK_SYSTEM_ALLOCATION_SCOPE_DEVICE
-                                                                                                               | VK_SYSTEM_ALLOCATION_SCOPE_CACHE
-                                                                                                               | VK_SYSTEM_ALLOCATION_SCOPE_OBJECT;
+       const deUint32                                          noCmdScope              = (1u << VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE)
+                                                                                                               | (1u << VK_SYSTEM_ALLOCATION_SCOPE_DEVICE)
+                                                                                                               | (1u << VK_SYSTEM_ALLOCATION_SCOPE_CACHE)
+                                                                                                               | (1u << VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
 
        // Callbacks used by resources
        AllocationCallbackRecorder                      resCallbacks    (getSystemAllocator(), 128);
index 58037dd..a694381 100644 (file)
@@ -78,11 +78,12 @@ tcu::TestStatus createSamplerTest (Context& context)
                        0u,                                                                                     // flags
                        VK_FILTER_NEAREST,                                                      // magFilter
                        VK_FILTER_NEAREST,                                                      // minFilter
-                       VK_SAMPLER_MIPMAP_MODE_BASE,                            // mipmapMode
+                       VK_SAMPLER_MIPMAP_MODE_NEAREST,                         // mipmapMode
                        VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,          // addressModeU
                        VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,          // addressModeV
                        VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,          // addressModeW
                        0.0f,                                                                           // mipLodBias
+                       VK_FALSE,                                                                       // anisotropyEnable
                        1.0f,                                                                           // maxAnisotropy
                        DE_FALSE,                                                                       // compareEnable
                        VK_COMPARE_OP_ALWAYS,                                           // compareOp
@@ -131,12 +132,12 @@ void createTriangleAsmProgs (SourceCollections& dst)
                "                OpName %4 \"main\"\n"
                "                OpName %10 \"gl_Position\"\n"
                "                OpName %12 \"a_position\"\n"
-               "                OpName %16 \"gl_VertexID\"\n"
-               "                OpName %17 \"gl_InstanceID\"\n"
+               "                OpName %16 \"gl_VertexIndex\"\n"
+               "                OpName %17 \"gl_InstanceIndex\"\n"
                "                OpDecorate %10 BuiltIn Position\n"
                "                OpDecorate %12 Location 0\n"
-               "                OpDecorate %16 BuiltIn VertexId\n"
-               "                OpDecorate %17 BuiltIn InstanceId\n"
+               "                OpDecorate %16 BuiltIn VertexIndex\n"
+               "                OpDecorate %17 BuiltIn InstanceIndex\n"
                "%2 =    OpTypeVoid\n"
                "%3 =    OpTypeFunction %2\n"
                "%7 =    OpTypeFloat 32\n"
@@ -254,7 +255,7 @@ tcu::TestStatus renderTriangleTest (Context& context)
                0u,                                                                                                                                             // flags
                VK_IMAGE_TYPE_2D,                                                                                                               // imageType
                VK_FORMAT_R8G8B8A8_UNORM,                                                                                               // format
-               { renderSize.x(), renderSize.y(), 1 },                                                                  // extent
+               { (deUint32)renderSize.x(), (deUint32)renderSize.y(), 1 },                              // extent
                1u,                                                                                                                                             // mipLevels
                1u,                                                                                                                                             // arraySize
                VK_SAMPLE_COUNT_1_BIT,                                                                                                  // samples
@@ -432,8 +433,8 @@ tcu::TestStatus renderTriangleTest (Context& context)
                        0u,                                                                                                                     // y
                },                                                                                                                      // offset
                {
-                       renderSize.x(),                                                                                         // width
-                       renderSize.y(),                                                                                         // height
+                       (deUint32)renderSize.x(),                                                                       // width
+                       (deUint32)renderSize.y(),                                                                       // height
                },                                                                                                                      // extent;
        };
        const VkPipelineViewportStateCreateInfo         viewportParams                  =
@@ -604,12 +605,7 @@ tcu::TestStatus renderTriangleTest (Context& context)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    // sType
                DE_NULL,                                                                                                // pNext
                0u,                                                                                                             // flags
-               DE_NULL,                                                                                                // renderPass
-               0u,                                                                                                             // subpass
-               DE_NULL,                                                                                                // framebuffer
-               VK_FALSE,                                                                                               // occlusionQueryEnable
-               (VkQueryControlFlags)0u,                                                                // queryFlags
-               (VkQueryPipelineStatisticFlags)0u,                                              // pipelineStatistics
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Record commands
@@ -643,8 +639,7 @@ tcu::TestStatus renderTriangleTest (Context& context)
                                1u,                                                                                     // layerCount
                        }                                                                                       // subresourceRange
                };
-               const void*                             barriers[]                              = { &vertFlushBarrier, &colorAttBarrier };
-               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, (VkDependencyFlags)0, 1, &vertFlushBarrier, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &colorAttBarrier);
        }
 
        {
@@ -655,7 +650,10 @@ tcu::TestStatus renderTriangleTest (Context& context)
                        DE_NULL,                                                                                        // pNext
                        *renderPass,                                                                            // renderPass
                        *framebuffer,                                                                           // framebuffer
-                       { { 0, 0 }, { renderSize.x(), renderSize.y() } },       // renderArea
+                       {
+                               { 0, 0 },
+                               { (deUint32)renderSize.x(), (deUint32)renderSize.y() }
+                       },                                                                                                      // renderArea
                        1u,                                                                                                     // clearValueCount
                        &clearValue,                                                                            // pClearValues
                };
@@ -690,8 +688,7 @@ tcu::TestStatus renderTriangleTest (Context& context)
                                1u,                                                                                     // arraySize
                        }                                                                                       // subresourceRange
                };
-               const void*                             barriers[]                              = { &renderFinishBarrier };
-               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &renderFinishBarrier);
        }
 
        {
@@ -707,7 +704,11 @@ tcu::TestStatus renderTriangleTest (Context& context)
                                1u,                                                                             // layerCount
                        },                                                                              // imageSubresource
                        { 0u, 0u, 0u },                                                 // imageOffset
-                       { renderSize.x(), renderSize.y(), 1u }  // imageExtent
+                       {
+                               (deUint32)renderSize.x(),
+                               (deUint32)renderSize.y(),
+                               1u
+                       }                                                                               // imageExtent
                };
                vk.cmdCopyImageToBuffer(*cmdBuf, *image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *readImageBuffer, 1u, &copyParams);
        }
@@ -725,8 +726,7 @@ tcu::TestStatus renderTriangleTest (Context& context)
                        0u,                                                                                     // offset
                        imageSizeBytes                                                          // size
                };
-               const void*                             barriers[]                              = { &copyFinishBarrier };
-               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &copyFinishBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        }
 
        VK_CHECK(vk.endCommandBuffer(*cmdBuf));
@@ -761,6 +761,7 @@ tcu::TestStatus renderTriangleTest (Context& context)
                        DE_NULL,                                                                // pNext
                        0u,                                                                             // waitSemaphoreCount
                        DE_NULL,                                                                // pWaitSemaphores
+                       (const VkPipelineStageFlags*)DE_NULL,
                        1u,                                                                             // commandBufferCount
                        &cmdBuf.get(),                                                  // pCommandBuffers
                        0u,                                                                             // signalSemaphoreCount
index 0728c16..6a90c62 100644 (file)
@@ -78,12 +78,12 @@ enum ResourceFlag
        RESOURCE_FLAG_LAST                              = (1u << 1u)
 };
 
-static const char* const s_quadrantGenVertexPosSource =        "       highp int quadPhase = gl_VertexID % 6;\n"
+static const char* const s_quadrantGenVertexPosSource =        "       highp int quadPhase = gl_VertexIndex % 6;\n"
                                                                                                                "       highp int quadXcoord = int(quadPhase == 1 || quadPhase == 4 || quadPhase == 5);\n"
                                                                                                                "       highp int quadYcoord = int(quadPhase == 2 || quadPhase == 3 || quadPhase == 5);\n"
-                                                                                                               "       highp int quadOriginX = (gl_VertexID / 6) % 2;\n"
-                                                                                                               "       highp int quadOriginY = (gl_VertexID / 6) / 2;\n"
-                                                                                                               "       quadrant_id = gl_VertexID / 6;\n"
+                                                                                                               "       highp int quadOriginX = (gl_VertexIndex / 6) % 2;\n"
+                                                                                                               "       highp int quadOriginY = (gl_VertexIndex / 6) / 2;\n"
+                                                                                                               "       quadrant_id = gl_VertexIndex / 6;\n"
                                                                                                                "       result_position = vec4(float(quadOriginX + quadXcoord - 1), float(quadOriginY + quadYcoord - 1), 0.0, 1.0);\n";
 
 bool isUniformDescriptorType (vk::VkDescriptorType type)
@@ -116,6 +116,14 @@ vk::VkImageType viewTypeToImageType (vk::VkImageViewType type)
        }
 }
 
+vk::VkImageLayout getImageLayoutForDescriptorType (vk::VkDescriptorType descType)
+{
+       if (descType == vk::VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)
+               return vk::VK_IMAGE_LAYOUT_GENERAL;
+       else
+               return vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+}
+
 deUint32 getTextureLevelPyramidDataSize (const tcu::TextureLevelPyramid& srcImage)
 {
        deUint32 dataSize = 0;
@@ -175,9 +183,9 @@ void writeTextureLevelPyramidData (void* dst, deUint32 dstLen, const tcu::Textur
                                        0,
                                },                                                                                                                      // imageOffset
                                {
-                                       sliceSize.x(),
-                                       sliceSize.y(),
-                                       sliceSize.z(),
+                                       (deUint32)sliceSize.x(),
+                                       (deUint32)sliceSize.y(),
+                                       (deUint32)sliceSize.z(),
                                }                                                                                                                       // imageExtent
                        };
                        copySlices->push_back(copySlice);
@@ -322,7 +330,7 @@ vk::Move<vk::VkImage> SingleTargetRenderInstance::createColorAttachment (const v
                (vk::VkImageCreateFlags)0,
                vk::VK_IMAGE_TYPE_2D,                                                   // imageType
                vk::mapTextureFormat(format),                                   // format
-               { (deInt32)size.x(), (deInt32)size.y(), 1 },    // extent
+               { size.x(), size.y(), 1u },                                             // extent
                1,                                                                                              // mipLevels
                1,                                                                                              // arraySize
                vk::VK_SAMPLE_COUNT_1_BIT,                                              // samples
@@ -525,12 +533,7 @@ void SingleTargetRenderInstance::readRenderTarget (tcu::TextureLevel& dst)
                vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                vk::VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,        // flags
-               (vk::VkRenderPass)0u,                                                           // renderPass
-               0u,                                                                                                     // subpass
-               (vk::VkFramebuffer)0u,                                                          // framebuffer
-               vk::VK_FALSE,                                                                           // occlusionQueryEnable
-               (vk::VkQueryControlFlags)0,
-               (vk::VkQueryPipelineStatisticFlags)0,
+               (const vk::VkCommandBufferInheritanceInfo*)DE_NULL,
        };
        const vk::VkImageSubresourceLayers              firstSlice                                      =
        {
@@ -546,22 +549,26 @@ void SingleTargetRenderInstance::readRenderTarget (tcu::TextureLevel& dst)
                m_targetSize.y(),                                                               // bufferImageHeight
                firstSlice,                                                                             // imageSubresource
                { 0, 0, 0 },                                                                    // imageOffset
-               { (deInt32)m_targetSize.x(), (deInt32)m_targetSize.y(), 1 }             // imageExtent
+               { m_targetSize.x(), m_targetSize.y(), 1u }              // imageExtent
        };
 
        const de::MovePtr<vk::Allocation>               bufferMemory                            = allocateAndBindObjectMemory(m_vki, m_device, m_allocator, *buffer, vk::MemoryRequirement::HostVisible);
 
        const vk::Unique<vk::VkCommandBuffer>   cmd                                                     (vk::allocateCommandBuffer(m_vki, m_device, &cmdBufAllocInfo));
        const vk::Unique<vk::VkFence>                   cmdCompleteFence                        (vk::createFence(m_vki, m_device, &fenceCreateInfo));
-       const void* const                                               imageBarrierPtr                         = &imageBarrier;
-       const void* const                                               bufferBarrierPtr                        = &memoryBarrier;
        const deUint64                                                  infiniteTimeout                         = ~(deUint64)0u;
 
        // copy content to buffer
        VK_CHECK(m_vki.beginCommandBuffer(*cmd, &cmdBufBeginInfo));
-       m_vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_FALSE, 1, &imageBarrierPtr);
+       m_vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0,
+                                                        0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                        0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                        1, &imageBarrier);
        m_vki.cmdCopyImageToBuffer(*cmd, *m_colorAttachmentImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *buffer, 1, &copyRegion);
-       m_vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_FALSE, 1, &bufferBarrierPtr);
+       m_vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                        0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                        1, &memoryBarrier,
+                                                        0, (const vk::VkImageMemoryBarrier*)DE_NULL);
        VK_CHECK(m_vki.endCommandBuffer(*cmd));
 
        // wait for transfer to complete
@@ -572,6 +579,7 @@ void SingleTargetRenderInstance::readRenderTarget (tcu::TextureLevel& dst)
                        DE_NULL,
                        0u,
                        (const vk::VkSemaphore*)0,
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &cmd.get(),
                        0u,
@@ -637,19 +645,16 @@ tcu::TestStatus SingleTargetRenderInstance::iterate (void)
                        vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                        DE_NULL,
                        vk::VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,        // flags
-                       (vk::VkRenderPass)0u,                                                           // renderPass
-                       0u,                                                                                                     // subpass
-                       (vk::VkFramebuffer)0u,                                                          // framebuffer
-                       vk::VK_FALSE,                                                                           // occlusionQueryEnable
-                       (vk::VkQueryControlFlags)0,
-                       (vk::VkQueryPipelineStatisticFlags)0,
+                       (const vk::VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const vk::Unique<vk::VkCommandBuffer>   cmd                                     (vk::allocateCommandBuffer(m_vki, m_device, &cmdBufAllocInfo));
-               const void* const                                               imageBarrierPtr         = &imageBarrier;
 
                VK_CHECK(m_vki.beginCommandBuffer(*cmd, &cmdBufBeginInfo));
-               m_vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_FALSE, 1, &imageBarrierPtr);
+               m_vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                1, &imageBarrier);
                VK_CHECK(m_vki.endCommandBuffer(*cmd));
 
                {
@@ -659,6 +664,7 @@ tcu::TestStatus SingleTargetRenderInstance::iterate (void)
                                DE_NULL,
                                0u,
                                (const vk::VkSemaphore*)0,
+                               (const vk::VkPipelineStageFlags*)DE_NULL,
                                1u,
                                &cmd.get(),
                                0u,
@@ -816,7 +822,7 @@ vk::Move<vk::VkPipeline> SingleCmdRenderInstance::createPipeline (vk::VkPipeline
        {
                vk::VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
                DE_NULL,
-               (vk::VkPipelineTesselationStateCreateFlags)0,
+               (vk::VkPipelineTessellationStateCreateFlags)0,
                3u,                                                                                     // patchControlPoints
        };
        const vk::VkViewport                                                            viewport                        =
@@ -830,8 +836,8 @@ vk::Move<vk::VkPipeline> SingleCmdRenderInstance::createPipeline (vk::VkPipeline
        };
        const vk::VkRect2D                                                                      renderArea                      =
        {
-               { 0, 0 },                                                                                                       // offset
-               { (deInt32)m_targetSize.x(), (deInt32)m_targetSize.y() },       // extent
+               { 0, 0 },                                                                       // offset
+               { m_targetSize.x(), m_targetSize.y() },         // extent
        };
        const vk::VkPipelineViewportStateCreateInfo                     vpState                         =
        {
@@ -949,8 +955,8 @@ void SingleCmdRenderInstance::renderToTarget (void)
 {
        const vk::VkRect2D                                                                      renderArea                                              =
        {
-               { 0, 0 },                                                                                                       // offset
-               { (deInt32)m_targetSize.x(), (deInt32)m_targetSize.y() },       // extent
+               { 0, 0 },                                                               // offset
+               { m_targetSize.x(), m_targetSize.y() }, // extent
        };
        const vk::VkCommandBufferAllocateInfo                           mainCmdBufCreateInfo                    =
        {
@@ -965,12 +971,7 @@ void SingleCmdRenderInstance::renderToTarget (void)
                vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                vk::VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,        // flags
-               (vk::VkRenderPass)0u,                                                           // renderPass
-               0u,                                                                                                     // subpass
-               (vk::VkFramebuffer)0u,                                                          // framebuffer
-               vk::VK_FALSE,                                                                           // occlusionQueryEnable
-               (vk::VkQueryControlFlags)0,
-               (vk::VkQueryPipelineStatisticFlags)0,
+               (const vk::VkCommandBufferInheritanceInfo*)DE_NULL,
        };
        const vk::VkCommandBufferAllocateInfo                           passCmdBufCreateInfo                    =
        {
@@ -980,12 +981,10 @@ void SingleCmdRenderInstance::renderToTarget (void)
                vk::VK_COMMAND_BUFFER_LEVEL_SECONDARY,  // level
                1u,                                                                             // count
        };
-       const vk::VkCommandBufferBeginInfo                                      passCmdBufBeginInfo                             =
+       const vk::VkCommandBufferInheritanceInfo                        passCmdBufInheritInfo                   =
        {
-               vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+               vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
                DE_NULL,
-               vk::VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
-               vk::VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,   // flags
                (vk::VkRenderPass)*m_renderPass,                                                // renderPass
                0u,                                                                                                             // subpass
                (vk::VkFramebuffer)*m_framebuffer,                                              // framebuffer
@@ -993,6 +992,14 @@ void SingleCmdRenderInstance::renderToTarget (void)
                (vk::VkQueryControlFlags)0,
                (vk::VkQueryPipelineStatisticFlags)0,
        };
+       const vk::VkCommandBufferBeginInfo                                      passCmdBufBeginInfo                             =
+       {
+               vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+               DE_NULL,
+               vk::VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
+               vk::VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,   // flags
+               &passCmdBufInheritInfo,
+       };
        const vk::VkFenceCreateInfo                                                     fenceCreateInfo                         =
        {
                vk::VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
@@ -1048,6 +1055,7 @@ void SingleCmdRenderInstance::renderToTarget (void)
                        DE_NULL,
                        0u,
                        (const vk::VkSemaphore*)0,
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &mainCmd.get(),
                        0u,
@@ -1439,39 +1447,38 @@ void BufferRenderInstance::writeDrawCmdBuffer (vk::VkCommandBuffer cmd) const
 
        // make host writes device-visible
        const vk::VkAccessFlags                         inputBit                        = (isUniformBuffer) ? (vk::VK_ACCESS_UNIFORM_READ_BIT) : (vk::VK_ACCESS_SHADER_READ_BIT);
-       const vk::VkBufferMemoryBarrier         memoryBarrierA          =
-       {
-               vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
-               DE_NULL,
-               vk::VK_ACCESS_HOST_WRITE_BIT,                           // outputMask
-               inputBit,                                                                       // inputMask
-               vk::VK_QUEUE_FAMILY_IGNORED,                            // srcQueueFamilyIndex
-               vk::VK_QUEUE_FAMILY_IGNORED,                            // destQueueFamilyIndex
-               *m_sourceBufferA,                                                       // buffer
-               0u,                                                                                     // offset
-               (vk::VkDeviceSize)m_bufferSizeA,                        // size
-       };
-       const vk::VkBufferMemoryBarrier         memoryBarrierB          =
+       const vk::VkBufferMemoryBarrier         memoryBarriers[]        =
        {
-               vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
-               DE_NULL,
-               vk::VK_ACCESS_HOST_WRITE_BIT,                           // outputMask
-               inputBit,                                                                       // inputMask
-               vk::VK_QUEUE_FAMILY_IGNORED,                            // srcQueueFamilyIndex
-               vk::VK_QUEUE_FAMILY_IGNORED,                            // destQueueFamilyIndex
-               *m_sourceBufferB,                                                       // buffer
-               0u,                                                                                     // offset
-               (vk::VkDeviceSize)m_bufferSizeB,                        // size
-       };
-       const void* const                                       memoryBarriers[2]       =
-       {
-               &memoryBarrierA,
-               &memoryBarrierB,
+               {
+                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+                       DE_NULL,
+                       vk::VK_ACCESS_HOST_WRITE_BIT,                           // outputMask
+                       inputBit,                                                                       // inputMask
+                       vk::VK_QUEUE_FAMILY_IGNORED,                            // srcQueueFamilyIndex
+                       vk::VK_QUEUE_FAMILY_IGNORED,                            // destQueueFamilyIndex
+                       *m_sourceBufferA,                                                       // buffer
+                       0u,                                                                                     // offset
+                       (vk::VkDeviceSize)m_bufferSizeA,                        // size
+               },
+               {
+                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+                       DE_NULL,
+                       vk::VK_ACCESS_HOST_WRITE_BIT,                           // outputMask
+                       inputBit,                                                                       // inputMask
+                       vk::VK_QUEUE_FAMILY_IGNORED,                            // srcQueueFamilyIndex
+                       vk::VK_QUEUE_FAMILY_IGNORED,                            // destQueueFamilyIndex
+                       *m_sourceBufferB,                                                       // buffer
+                       0u,                                                                                     // offset
+                       (vk::VkDeviceSize)m_bufferSizeB,                        // size
+               }
        };
        const deUint32                                          numMemoryBarriers       = getInterfaceNumResources(m_shaderInterface);
 
        m_vki.cmdBindDescriptorSets(cmd, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, getPipelineLayout(), 0, 1, &m_descriptorSet.get(), numOffsets, dynamicOffsetPtr);
-       m_vki.cmdPipelineBarrier(cmd, 0u, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_FALSE, numMemoryBarriers, memoryBarriers);
+       m_vki.cmdPipelineBarrier(cmd, 0u, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, (vk::VkDependencyFlags)0,
+                                                        0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                        numMemoryBarriers, memoryBarriers,
+                                                        0, (const vk::VkImageMemoryBarrier*)DE_NULL);
        m_vki.cmdDraw(cmd, 6 * 4, 1, 0, 0); // render four quads (two separate triangles)
 }
 
@@ -1504,7 +1511,7 @@ public:
        void                                                                    readResultContentsTo            (tcu::Vec4 (*results)[4]) const;
 
        inline vk::VkBuffer                                             getBuffer                                       (void) const { return *m_buffer;                        }
-       inline const void*                                              getResultReadBarrier            (void) const { return &m_bufferBarrier;         }
+       inline const vk::VkBufferMemoryBarrier* getResultReadBarrier            (void) const { return &m_bufferBarrier;         }
 
 private:
        static vk::Move<vk::VkBuffer>                   createResultBuffer                      (const vk::DeviceInterface&             vki,
@@ -1673,51 +1680,51 @@ vk::Move<vk::VkPipeline> ComputePipeline::createPipeline (const vk::DeviceInterf
 class ComputeCommand
 {
 public:
-                                                                               ComputeCommand  (const vk::DeviceInterface&     vki,
-                                                                                                                vk::VkDevice                           device,
-                                                                                                                vk::VkPipeline                         pipeline,
-                                                                                                                vk::VkPipelineLayout           pipelineLayout,
-                                                                                                                const tcu::UVec3&                      numWorkGroups,
-                                                                                                                int                                            numDescriptorSets,
-                                                                                                                const vk::VkDescriptorSet*     descriptorSets,
-                                                                                                                int                                            numDynamicOffsets,
-                                                                                                                const deUint32*                        dynamicOffsets,
-                                                                                                                int                                            numPreBarriers,
-                                                                                                                const void* const*                     preBarriers,
-                                                                                                                int                                            numPostBarriers,
-                                                                                                                const void* const*                     postBarriers);
-
-       void                                                            submitAndWait   (deUint32 queueFamilyIndex, vk::VkQueue queue) const;
+                                                                                       ComputeCommand  (const vk::DeviceInterface&                     vki,
+                                                                                                                        vk::VkDevice                                           device,
+                                                                                                                        vk::VkPipeline                                         pipeline,
+                                                                                                                        vk::VkPipelineLayout                           pipelineLayout,
+                                                                                                                        const tcu::UVec3&                                      numWorkGroups,
+                                                                                                                        int                                                            numDescriptorSets,
+                                                                                                                        const vk::VkDescriptorSet*                     descriptorSets,
+                                                                                                                        int                                                            numDynamicOffsets,
+                                                                                                                        const deUint32*                                        dynamicOffsets,
+                                                                                                                        int                                                            numPreBarriers,
+                                                                                                                        const vk::VkBufferMemoryBarrier*       preBarriers,
+                                                                                                                        int                                                            numPostBarriers,
+                                                                                                                        const vk::VkBufferMemoryBarrier*       postBarriers);
+
+       void                                                                    submitAndWait   (deUint32 queueFamilyIndex, vk::VkQueue queue) const;
 
 private:
-       const vk::DeviceInterface&                      m_vki;
-       const vk::VkDevice                                      m_device;
-       const vk::VkPipeline                            m_pipeline;
-       const vk::VkPipelineLayout                      m_pipelineLayout;
-       const tcu::UVec3                                        m_numWorkGroups;
-       const int                                                       m_numDescriptorSets;
-       const vk::VkDescriptorSet* const        m_descriptorSets;
-       const int                                                       m_numDynamicOffsets;
-       const deUint32* const                           m_dynamicOffsets;
-       const int                                                       m_numPreBarriers;
-       const void* const* const                        m_preBarriers;
-       const int                                                       m_numPostBarriers;
-       const void* const* const                        m_postBarriers;
+       const vk::DeviceInterface&                              m_vki;
+       const vk::VkDevice                                              m_device;
+       const vk::VkPipeline                                    m_pipeline;
+       const vk::VkPipelineLayout                              m_pipelineLayout;
+       const tcu::UVec3                                                m_numWorkGroups;
+       const int                                                               m_numDescriptorSets;
+       const vk::VkDescriptorSet* const                m_descriptorSets;
+       const int                                                               m_numDynamicOffsets;
+       const deUint32* const                                   m_dynamicOffsets;
+       const int                                                               m_numPreBarriers;
+       const vk::VkBufferMemoryBarrier* const  m_preBarriers;
+       const int                                                               m_numPostBarriers;
+       const vk::VkBufferMemoryBarrier* const  m_postBarriers;
 };
 
-ComputeCommand::ComputeCommand (const vk::DeviceInterface&     vki,
-                                                               vk::VkDevice                            device,
-                                                               vk::VkPipeline                          pipeline,
-                                                               vk::VkPipelineLayout            pipelineLayout,
-                                                               const tcu::UVec3&                       numWorkGroups,
-                                                               int                                                     numDescriptorSets,
-                                                               const vk::VkDescriptorSet*      descriptorSets,
-                                                               int                                                     numDynamicOffsets,
-                                                               const deUint32*                         dynamicOffsets,
-                                                               int                                                     numPreBarriers,
-                                                               const void* const*                      preBarriers,
-                                                               int                                                     numPostBarriers,
-                                                               const void* const*                      postBarriers)
+ComputeCommand::ComputeCommand (const vk::DeviceInterface&                     vki,
+                                                               vk::VkDevice                                            device,
+                                                               vk::VkPipeline                                          pipeline,
+                                                               vk::VkPipelineLayout                            pipelineLayout,
+                                                               const tcu::UVec3&                                       numWorkGroups,
+                                                               int                                                                     numDescriptorSets,
+                                                               const vk::VkDescriptorSet*                      descriptorSets,
+                                                               int                                                                     numDynamicOffsets,
+                                                               const deUint32*                                         dynamicOffsets,
+                                                               int                                                                     numPreBarriers,
+                                                               const vk::VkBufferMemoryBarrier*        preBarriers,
+                                                               int                                                                     numPostBarriers,
+                                                               const vk::VkBufferMemoryBarrier*        postBarriers)
        : m_vki                                 (vki)
        , m_device                              (device)
        , m_pipeline                    (pipeline)
@@ -1741,7 +1748,7 @@ void ComputeCommand::submitAndWait (deUint32 queueFamilyIndex, vk::VkQueue queue
                vk::VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
                DE_NULL,
                vk::VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,                       // flags
-               queueFamilyIndex,                                                                       // queueFamilyIndex             
+               queueFamilyIndex,                                                                       // queueFamilyIndex
        };
        const vk::Unique<vk::VkCommandPool>                             cmdPool                         (vk::createCommandPool(m_vki, m_device, &cmdPoolCreateInfo));
 
@@ -1765,12 +1772,7 @@ void ComputeCommand::submitAndWait (deUint32 queueFamilyIndex, vk::VkQueue queue
                vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                vk::VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,        // flags
-               (vk::VkRenderPass)0u,                                                           // renderPass
-               0u,                                                                                                     // subpass
-               (vk::VkFramebuffer)0u,                                                          // framebuffer
-               vk::VK_FALSE,                                                                           // occlusionQueryEnable
-               (vk::VkQueryControlFlags)0,
-               (vk::VkQueryPipelineStatisticFlags)0,
+               (const vk::VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const vk::Unique<vk::VkFence>                                   cmdCompleteFence        (vk::createFence(m_vki, m_device, &fenceCreateInfo));
@@ -1783,10 +1785,16 @@ void ComputeCommand::submitAndWait (deUint32 queueFamilyIndex, vk::VkQueue queue
        m_vki.cmdBindDescriptorSets(*cmd, vk::VK_PIPELINE_BIND_POINT_COMPUTE, m_pipelineLayout, 0, m_numDescriptorSets, m_descriptorSets, m_numDynamicOffsets, m_dynamicOffsets);
 
        if (m_numPreBarriers)
-               m_vki.cmdPipelineBarrier(*cmd, 0u, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_FALSE, m_numPreBarriers, m_preBarriers);
+               m_vki.cmdPipelineBarrier(*cmd, 0u, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (vk::VkDependencyFlags)0,
+                                                                0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                m_numPreBarriers, m_preBarriers,
+                                                                0, (const vk::VkImageMemoryBarrier*)DE_NULL);
 
        m_vki.cmdDispatch(*cmd, m_numWorkGroups.x(), m_numWorkGroups.y(), m_numWorkGroups.z());
-       m_vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_FALSE, m_numPostBarriers, m_postBarriers);
+       m_vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                        0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                        m_numPostBarriers, m_postBarriers,
+                                                        0, (const vk::VkImageMemoryBarrier*)DE_NULL);
        VK_CHECK(m_vki.endCommandBuffer(*cmd));
 
        // run
@@ -1797,6 +1805,7 @@ void ComputeCommand::submitAndWait (deUint32 queueFamilyIndex, vk::VkQueue queue
                        DE_NULL,
                        0u,
                        (const vk::VkSemaphore*)0,
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &cmd.get(),
                        0u,
@@ -2072,29 +2081,30 @@ tcu::TestStatus BufferComputeInstance::testResourceAccess (void)
        const ComputePipeline                                                   pipeline                        (m_vki, m_device, m_context.getBinaryCollection(), 1, &descriptorSetLayout.get());
 
        const vk::VkAccessFlags                                                 inputBit                        = (isUniformBuffer) ? (vk::VK_ACCESS_UNIFORM_READ_BIT) : (vk::VK_ACCESS_SHADER_READ_BIT);
-       const vk::VkBufferMemoryBarrier                                 bufferBarrierA          =
+       const vk::VkBufferMemoryBarrier                                 bufferBarriers[]        =
        {
-               vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
-               DE_NULL,
-               vk::VK_ACCESS_HOST_WRITE_BIT,                           // outputMask
-               inputBit,                                                                       // inputMask
-               vk::VK_QUEUE_FAMILY_IGNORED,                            // srcQueueFamilyIndex
-               vk::VK_QUEUE_FAMILY_IGNORED,                            // destQueueFamilyIndex
-               *bufferA,                                                                       // buffer
-               (vk::VkDeviceSize)0u,                                           // offset
-               (vk::VkDeviceSize)bufferSizeA,                          // size
-       };
-       const vk::VkBufferMemoryBarrier                                 bufferBarrierB          =
-       {
-               vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
-               DE_NULL,
-               vk::VK_ACCESS_HOST_WRITE_BIT,                           // outputMask
-               inputBit,                                                                       // inputMask
-               vk::VK_QUEUE_FAMILY_IGNORED,                            // srcQueueFamilyIndex
-               vk::VK_QUEUE_FAMILY_IGNORED,                            // destQueueFamilyIndex
-               *bufferB,                                                                       // buffer
-               (vk::VkDeviceSize)0u,                                           // offset
-               (vk::VkDeviceSize)bufferSizeB,                          // size
+               {
+                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+                       DE_NULL,
+                       vk::VK_ACCESS_HOST_WRITE_BIT,                           // outputMask
+                       inputBit,                                                                       // inputMask
+                       vk::VK_QUEUE_FAMILY_IGNORED,                            // srcQueueFamilyIndex
+                       vk::VK_QUEUE_FAMILY_IGNORED,                            // destQueueFamilyIndex
+                       *bufferA,                                                                       // buffer
+                       (vk::VkDeviceSize)0u,                                           // offset
+                       (vk::VkDeviceSize)bufferSizeA,                          // size
+               },
+               {
+                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+                       DE_NULL,
+                       vk::VK_ACCESS_HOST_WRITE_BIT,                           // outputMask
+                       inputBit,                                                                       // inputMask
+                       vk::VK_QUEUE_FAMILY_IGNORED,                            // srcQueueFamilyIndex
+                       vk::VK_QUEUE_FAMILY_IGNORED,                            // destQueueFamilyIndex
+                       *bufferB,                                                                       // buffer
+                       (vk::VkDeviceSize)0u,                                           // offset
+                       (vk::VkDeviceSize)bufferSizeB,                          // size
+               }
        };
 
        const deUint32                                                                  numSrcBuffers           = getInterfaceNumResources(m_shaderInterface);
@@ -2103,10 +2113,10 @@ tcu::TestStatus BufferComputeInstance::testResourceAccess (void)
        const int                                                                               numDescriptorSets       = DE_LENGTH_OF_ARRAY(descriptorSets);
        const deUint32* const                                                   dynamicOffsets          = (m_setDynamicOffset) ? (bindTimeOffsets) : (DE_NULL);
        const deUint32                                                                  numDynamicOffsets       = (m_setDynamicOffset) ? (numSrcBuffers) : (0);
-       const void* const                                                               preBarriers[]           = { &bufferBarrierA, &bufferBarrierB };
+       const vk::VkBufferMemoryBarrier* const                  preBarriers                     = bufferBarriers;
        const int                                                                               numPreBarriers          = numSrcBuffers;
-       const void* const                                                               postBarriers[]          = { m_result.getResultReadBarrier() };
-       const int                                                                               numPostBarriers         = DE_LENGTH_OF_ARRAY(postBarriers);
+       const vk::VkBufferMemoryBarrier* const                  postBarriers            = m_result.getResultReadBarrier();
+       const int                                                                               numPostBarriers         = 1;
 
        const ComputeCommand                                                    compute                         (m_vki,
                                                                                                                                                 m_device,
@@ -2783,6 +2793,7 @@ private:
                                                                                                                                 vk::VkQueue                                            queue,
                                                                                                                                 vk::Allocator&                                         allocator,
                                                                                                                                 vk::VkImage                                            image,
+                                                                                                                                vk::VkImageLayout                                      layout,
                                                                                                                                 const tcu::TextureLevelPyramid&        data);
 
 protected:
@@ -2832,19 +2843,21 @@ ImageInstanceImages::ImageInstanceImages (const vk::DeviceInterface&    vki,
        , m_imageViewA          (vk::Move<vk::VkImageView>())
        , m_imageViewB          (vk::Move<vk::VkImageView>())
 {
+       const vk::VkImageLayout layout  = getImageLayoutForDescriptorType(descriptorType);
+
        DE_ASSERT(numImages == 1 || numImages == 2);
 
        populateSourceImage(&m_sourceImageA, true);
        m_imageA = createImage(vki, device, allocator, descriptorType, viewType, m_sourceImageA, &m_imageMemoryA);
        m_imageViewA = createImageView(vki, device, viewType, m_sourceImageA, *m_imageA, m_baseMipLevel, m_baseArraySlice);
-       uploadImage(vki, device, queueFamilyIndex, queue, allocator, *m_imageA, m_sourceImageA);
+       uploadImage(vki, device, queueFamilyIndex, queue, allocator, *m_imageA, layout, m_sourceImageA);
 
        if (numImages == 2)
        {
                populateSourceImage(&m_sourceImageB, false);
                m_imageB = createImage(vki, device, allocator, descriptorType, viewType, m_sourceImageB, &m_imageMemoryB);
                m_imageViewB = createImageView(vki, device, viewType, m_sourceImageB, *m_imageB, m_baseMipLevel, m_baseArraySlice);
-               uploadImage(vki, device, queueFamilyIndex, queue, allocator, *m_imageB, m_sourceImageB);
+               uploadImage(vki, device, queueFamilyIndex, queue, allocator, *m_imageB, layout, m_sourceImageB);
        }
 }
 
@@ -2868,13 +2881,13 @@ vk::Move<vk::VkImage> ImageInstanceImages::createImage (const vk::DeviceInterfac
        const vk::VkExtent3D                            extent          =
        {
                // x
-               (deInt32)baseLevel.getWidth(),
+               (deUint32)baseLevel.getWidth(),
 
                // y
-               (viewType == vk::VK_IMAGE_VIEW_TYPE_1D || viewType == vk::VK_IMAGE_VIEW_TYPE_1D_ARRAY) ? (1) : (deInt32)baseLevel.getHeight(),
+               (viewType == vk::VK_IMAGE_VIEW_TYPE_1D || viewType == vk::VK_IMAGE_VIEW_TYPE_1D_ARRAY) ? (1u) : (deUint32)baseLevel.getHeight(),
 
                // z
-               (viewType == vk::VK_IMAGE_VIEW_TYPE_3D) ? ((deInt32)baseLevel.getDepth()) : (1),
+               (viewType == vk::VK_IMAGE_VIEW_TYPE_3D) ? ((deUint32)baseLevel.getDepth()) : (1u),
        };
        const vk::VkImageCreateInfo                     createInfo      =
        {
@@ -2995,6 +3008,7 @@ void ImageInstanceImages::uploadImage (const vk::DeviceInterface&         vki,
                                                                           vk::VkQueue                                          queue,
                                                                           vk::Allocator&                                       allocator,
                                                                           vk::VkImage                                          image,
+                                                                          vk::VkImageLayout                            layout,
                                                                           const tcu::TextureLevelPyramid&      data)
 {
        const deUint32                                          arraySize                                       = (m_viewType == vk::VK_IMAGE_VIEW_TYPE_3D) ? (1) :
@@ -3060,7 +3074,7 @@ void ImageInstanceImages::uploadImage (const vk::DeviceInterface&         vki,
                vk::VK_ACCESS_TRANSFER_WRITE_BIT,                                       // outputMask
                vk::VK_ACCESS_SHADER_READ_BIT,                                          // inputMask
                vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                       // oldLayout
-               vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,           // newLayout
+               layout,                                                                                         // newLayout
                vk::VK_QUEUE_FAMILY_IGNORED,                                            // srcQueueFamilyIndex
                vk::VK_QUEUE_FAMILY_IGNORED,                                            // destQueueFamilyIndex
                image,                                                                                          // image
@@ -3087,17 +3101,10 @@ void ImageInstanceImages::uploadImage (const vk::DeviceInterface&               vki,
                vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                vk::VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,        // flags
-               (vk::VkRenderPass)0u,                                                           // renderPass
-               0u,                                                                                                     // subpass
-               (vk::VkFramebuffer)0u,                                                          // framebuffer
-               vk::VK_FALSE,                                                                           // occlusionQueryEnable
-               (vk::VkQueryControlFlags)0,
-               (vk::VkQueryPipelineStatisticFlags)0,
+               (const vk::VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const vk::Unique<vk::VkCommandBuffer>   cmd                                                     (vk::allocateCommandBuffer(vki, device, &cmdBufCreateInfo));
-       const void* const                                               preBarriers[2]                          = { &preMemoryBarrier, &preImageBarrier };
-       const void* const                                               postBarriers[1]                         = { &postImageBarrier };
        const vk::Unique<vk::VkFence>                   cmdCompleteFence                        (vk::createFence(vki, device, &fenceCreateInfo));
        const deUint64                                                  infiniteTimeout                         = ~(deUint64)0u;
        std::vector<vk::VkBufferImageCopy>              copySlices;
@@ -3108,9 +3115,15 @@ void ImageInstanceImages::uploadImage (const vk::DeviceInterface&                vki,
 
        // record command buffer
        VK_CHECK(vki.beginCommandBuffer(*cmd, &cmdBufBeginInfo));
-       vki.cmdPipelineBarrier(*cmd, 0u, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_FALSE, DE_LENGTH_OF_ARRAY(preBarriers), preBarriers);
+       vki.cmdPipelineBarrier(*cmd, 0u, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0,
+                                                  0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                  1, &preMemoryBarrier,
+                                                  1, &preImageBarrier);
        vki.cmdCopyBufferToImage(*cmd, *dataBuffer, image, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, (deUint32)copySlices.size(), &copySlices[0]);
-       vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_FALSE, DE_LENGTH_OF_ARRAY(postBarriers), postBarriers);
+       vki.cmdPipelineBarrier(*cmd, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                  0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                  0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                  1, &postImageBarrier);
        VK_CHECK(vki.endCommandBuffer(*cmd));
 
        // submit and wait for command buffer to complete before killing it
@@ -3121,6 +3134,7 @@ void ImageInstanceImages::uploadImage (const vk::DeviceInterface&         vki,
                        DE_NULL,
                        0u,
                        (const vk::VkSemaphore*)0,
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &cmd.get(),
                        0u,
@@ -3402,10 +3416,11 @@ vk::Move<vk::VkDescriptorSet> ImageFetchRenderInstance::createDescriptorSet (con
                                                                                                                                                         vk::VkImageView                                viewA,
                                                                                                                                                         vk::VkImageView                                viewB)
 {
+       const vk::VkImageLayout                                 imageLayout             = getImageLayoutForDescriptorType(descriptorType);
        const vk::VkDescriptorImageInfo                 imageInfos[2]   =
        {
-               makeDescriptorImageInfo(viewA, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
-               makeDescriptorImageInfo(viewB, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
+               makeDescriptorImageInfo(viewA, imageLayout),
+               makeDescriptorImageInfo(viewB, imageLayout),
        };
        const vk::VkDescriptorSetAllocateInfo   allocInfo               =
        {
@@ -3622,10 +3637,11 @@ vk::Move<vk::VkDescriptorPool> ImageFetchComputeInstance::createDescriptorPool (
 vk::Move<vk::VkDescriptorSet> ImageFetchComputeInstance::createDescriptorSet (vk::VkDescriptorPool pool, vk::VkDescriptorSetLayout layout) const
 {
        const vk::VkDescriptorBufferInfo                resultInfo              = vk::makeDescriptorBufferInfo(m_result.getBuffer(), 0u, (vk::VkDeviceSize)ComputeInstanceResultBuffer::DATA_SIZE);
+       const vk::VkImageLayout                                 imageLayout             = getImageLayoutForDescriptorType(m_descriptorType);
        const vk::VkDescriptorImageInfo                 imageInfos[2]   =
        {
-               makeDescriptorImageInfo(m_images.getImageViewA(), vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
-               makeDescriptorImageInfo(m_images.getImageViewB(), vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
+               makeDescriptorImageInfo(m_images.getImageViewA(), imageLayout),
+               makeDescriptorImageInfo(m_images.getImageViewB(), imageLayout),
        };
        const vk::VkDescriptorSetAllocateInfo   allocInfo               =
        {
@@ -3720,10 +3736,10 @@ tcu::TestStatus ImageFetchComputeInstance::testResourceAccess (void)
        const int                                                                               numDescriptorSets       = DE_LENGTH_OF_ARRAY(descriptorSets);
        const deUint32* const                                                   dynamicOffsets          = DE_NULL;
        const int                                                                               numDynamicOffsets       = 0;
-       const void*     const*                                                          preBarriers                     = DE_NULL;
+       const vk::VkBufferMemoryBarrier* const                  preBarriers                     = DE_NULL;
        const int                                                                               numPreBarriers          = 0;
-       const void* const                                                               postBarriers[]          = { m_result.getResultReadBarrier() };
-       const int                                                                               numPostBarriers         = DE_LENGTH_OF_ARRAY(postBarriers);
+       const vk::VkBufferMemoryBarrier* const                  postBarriers            = m_result.getResultReadBarrier();
+       const int                                                                               numPostBarriers         = 1;
 
        const ComputeCommand                                                    compute                         (m_vki,
                                                                                                                                                 m_device,
@@ -4037,31 +4053,8 @@ tcu::Sampler ImageSampleInstanceImages::createRefSampler (bool isFirst)
 
 vk::Move<vk::VkSampler> ImageSampleInstanceImages::createSampler (const vk::DeviceInterface& vki, vk::VkDevice device, const tcu::Sampler& sampler, const tcu::TextureFormat& format)
 {
-       const bool                                              compareEnabled  = (sampler.compare != tcu::Sampler::COMPAREMODE_NONE);
-       const vk::VkCompareOp                   compareOp               = (compareEnabled) ? (vk::mapCompareMode(sampler.compare)) : (vk::VK_COMPARE_OP_ALWAYS);
-       const tcu::TextureChannelClass  channelClass    = tcu::getTextureChannelClass(format.type);
-       const bool                                              isIntTexture    = channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER || channelClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER;
-       const vk::VkBorderColor                 borderColor             = (isIntTexture) ? (vk::VK_BORDER_COLOR_INT_OPAQUE_WHITE) : (vk::VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE);
-       const vk::VkSamplerCreateInfo   createInfo              =
-       {
-               vk::VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
-               DE_NULL,
-               (vk::VkSamplerCreateFlags)0,
-               vk::mapFilterMode(sampler.magFilter),                                                   // magFilter
-               vk::mapFilterMode(sampler.minFilter),                                                   // minFilter
-               vk::mapMipmapMode(sampler.minFilter),                                                   // mipMode
-               vk::mapWrapMode(sampler.wrapS),                                                                 // addressU
-               vk::mapWrapMode(sampler.wrapT),                                                                 // addressV
-               vk::mapWrapMode(sampler.wrapR),                                                                 // addressW
-               0.0f,                                                                                                                   // mipLodBias
-               1,                                                                                                                              // maxAnisotropy
-               (vk::VkBool32)(compareEnabled ? vk::VK_TRUE : vk::VK_FALSE),    // compareEnable
-               compareOp,                                                                                                              // compareOp
-               0.0f,                                                                                                                   // minLod
-               0.0f,                                                                                                                   // maxLod
-               borderColor,                                                                                                    // borderColor
-               vk::VK_FALSE,                                                                                                   // unnormalizedCoords
-       };
+       const vk::VkSamplerCreateInfo   createInfo              = vk::mapSampler(sampler, format);
+
        return vk::createSampler(vki, device, &createInfo);
 }
 
@@ -4165,8 +4158,7 @@ private:
        static vk::Move<vk::VkDescriptorPool>                   createDescriptorPool                    (const vk::DeviceInterface&     vki,
                                                                                                                                                                         vk::VkDevice                           device,
                                                                                                                                                                         vk::VkDescriptorType           descriptorType,
-                                                                                                                                                                        ShaderInputInterface           shaderInterface,
-                                                                                                                                                                        bool                                           isImmutable);
+                                                                                                                                                                        ShaderInputInterface           shaderInterface);
 
        static vk::Move<vk::VkDescriptorSet>                    createDescriptorSet                             (const vk::DeviceInterface&                     vki,
                                                                                                                                                                         vk::VkDevice                                           device,
@@ -4234,7 +4226,7 @@ ImageSampleRenderInstance::ImageSampleRenderInstance (vkt::Context&                               context,
        , m_images                                      (m_vki, m_device, m_queueFamilyIndex, m_queue, m_allocator, m_descriptorType, m_shaderInterface, m_viewType, m_baseMipLevel, m_baseArraySlice, isImmutable)
        , m_descriptorSetLayout         (createDescriptorSetLayout(m_vki, m_device, m_descriptorType, m_shaderInterface, m_stageFlags, m_images))
        , m_pipelineLayout                      (createPipelineLayout(m_vki, m_device, *m_descriptorSetLayout))
-       , m_descriptorPool                      (createDescriptorPool(m_vki, m_device, m_descriptorType, m_shaderInterface, isImmutable))
+       , m_descriptorPool                      (createDescriptorPool(m_vki, m_device, m_descriptorType, m_shaderInterface))
        , m_descriptorSet                       (createDescriptorSet(m_vki, m_device, m_descriptorType, m_shaderInterface, *m_descriptorSetLayout, *m_descriptorPool, isImmutable, m_images))
 {
 }
@@ -4301,8 +4293,7 @@ vk::Move<vk::VkPipelineLayout> ImageSampleRenderInstance::createPipelineLayout (
 vk::Move<vk::VkDescriptorPool> ImageSampleRenderInstance::createDescriptorPool (const vk::DeviceInterface&     vki,
                                                                                                                                                                vk::VkDevice                            device,
                                                                                                                                                                vk::VkDescriptorType            descriptorType,
-                                                                                                                                                               ShaderInputInterface            shaderInterface,
-                                                                                                                                                               bool                                            isImmutable)
+                                                                                                                                                               ShaderInputInterface            shaderInterface)
 {
        vk::DescriptorPoolBuilder builder;
 
@@ -4311,9 +4302,8 @@ vk::Move<vk::VkDescriptorPool> ImageSampleRenderInstance::createDescriptorPool (
                // separate samplers need image to sample
                builder.addType(vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE);
 
-               // samplers needed only if they are specified in the descriptor set
-               if (!isImmutable)
-                       builder.addType(vk::VK_DESCRIPTOR_TYPE_SAMPLER, getInterfaceNumResources(shaderInterface));
+               // also need sample to use, indifferent of whether immutable or not
+               builder.addType(vk::VK_DESCRIPTOR_TYPE_SAMPLER, getInterfaceNumResources(shaderInterface));
        }
        else if (descriptorType == vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
        {
@@ -4860,10 +4850,10 @@ tcu::TestStatus ImageSampleComputeInstance::testResourceAccess (void)
        const int                                                                               numDescriptorSets       = DE_LENGTH_OF_ARRAY(descriptorSets);
        const deUint32* const                                                   dynamicOffsets          = DE_NULL;
        const int                                                                               numDynamicOffsets       = 0;
-       const void*     const*                                                          preBarriers                     = DE_NULL;
+       const vk::VkBufferMemoryBarrier* const                  preBarriers                     = DE_NULL;
        const int                                                                               numPreBarriers          = 0;
-       const void* const                                                               postBarriers[]          = { m_result.getResultReadBarrier() };
-       const int                                                                               numPostBarriers         = DE_LENGTH_OF_ARRAY(postBarriers);
+       const vk::VkBufferMemoryBarrier* const                  postBarriers            = m_result.getResultReadBarrier();
+       const int                                                                               numPostBarriers         = 1;
 
        const ComputeCommand                                                    compute                         (m_vki,
                                                                                                                                                 m_device,
@@ -5265,41 +5255,40 @@ vkt::TestInstance* ImageDescriptorCase::createInstance (vkt::Context& context) c
 class TexelBufferInstanceBuffers
 {
 public:
-                                                                               TexelBufferInstanceBuffers      (const vk::DeviceInterface&             vki,
-                                                                                                                                        vk::VkDevice                                   device,
-                                                                                                                                        vk::Allocator&                                 allocator,
-                                                                                                                                        vk::VkDescriptorType                   descriptorType,
-                                                                                                                                        int                                                    numTexelBuffers,
-                                                                                                                                        bool                                                   hasViewOffset);
+                                                                                       TexelBufferInstanceBuffers      (const vk::DeviceInterface&             vki,
+                                                                                                                                                vk::VkDevice                                   device,
+                                                                                                                                                vk::Allocator&                                 allocator,
+                                                                                                                                                vk::VkDescriptorType                   descriptorType,
+                                                                                                                                                int                                                    numTexelBuffers,
+                                                                                                                                                bool                                                   hasViewOffset);
 
 private:
-       static vk::Move<vk::VkBuffer>           createBuffer                            (const vk::DeviceInterface&             vki,
-                                                                                                                                        vk::VkDevice                                   device,
-                                                                                                                                        vk::Allocator&                                 allocator,
-                                                                                                                                        vk::VkDescriptorType                   descriptorType,
-                                                                                                                                        de::MovePtr<vk::Allocation>    *outAllocation);
+       static vk::Move<vk::VkBuffer>                   createBuffer                            (const vk::DeviceInterface&             vki,
+                                                                                                                                                vk::VkDevice                                   device,
+                                                                                                                                                vk::Allocator&                                 allocator,
+                                                                                                                                                vk::VkDescriptorType                   descriptorType,
+                                                                                                                                                de::MovePtr<vk::Allocation>    *outAllocation);
 
-       static vk::Move<vk::VkBufferView>       createBufferView                        (const vk::DeviceInterface&             vki,
-                                                                                                                                        vk::VkDevice                                   device,
-                                                                                                                                        const tcu::TextureFormat&              textureFormat,
-                                                                                                                                        deUint32                                               offset,
-                                                                                                                                        vk::VkBuffer                                   buffer);
+       static vk::Move<vk::VkBufferView>               createBufferView                        (const vk::DeviceInterface&             vki,
+                                                                                                                                                vk::VkDevice                                   device,
+                                                                                                                                                const tcu::TextureFormat&              textureFormat,
+                                                                                                                                                deUint32                                               offset,
+                                                                                                                                                vk::VkBuffer                                   buffer);
 
-       static vk::VkBufferMemoryBarrier        createBarrier                           (vk::VkDescriptorType descriptorType, vk::VkBuffer buffer);
+       static vk::VkBufferMemoryBarrier                createBarrier                           (vk::VkDescriptorType descriptorType, vk::VkBuffer buffer);
 
-       void                                                            populateSourceBuffer            (const tcu::PixelBufferAccess& access);
-       void                                                            uploadData                                      (const vk::DeviceInterface& vki, vk::VkDevice device, const vk::Allocation& memory, const de::ArrayBuffer<deUint8>& data);
+       void                                                                    populateSourceBuffer            (const tcu::PixelBufferAccess& access);
+       void                                                                    uploadData                                      (const vk::DeviceInterface& vki, vk::VkDevice device, const vk::Allocation& memory, const de::ArrayBuffer<deUint8>& data);
 
 public:
-       static int                                                      getFetchPos                                     (int fetchPosNdx);
-       tcu::Vec4                                                       fetchTexelValue                         (int fetchPosNdx) const;
+       static int                                                              getFetchPos                                     (int fetchPosNdx);
+       tcu::Vec4                                                               fetchTexelValue                         (int fetchPosNdx) const;
 
-       inline int                                                      getNumTexelBuffers                      (void) const { return m_numTexelBuffers;        }
-       const tcu::TextureFormat&                       getTextureFormat                        (void) const { return m_imageFormat;            }
-       inline vk::VkBufferView                         getBufferViewA                          (void) const { return *m_bufferViewA;           }
-       inline vk::VkBufferView                         getBufferViewB                          (void) const { return *m_bufferViewB;           }
-       inline const void*                                      getBufferInitBarrierA           (void) const { return &m_bufferBarrierA;        }
-       inline const void*                                      getBufferInitBarrierB           (void) const { return &m_bufferBarrierB;        }
+       inline int                                                              getNumTexelBuffers                      (void) const { return m_numTexelBuffers;        }
+       const tcu::TextureFormat&                               getTextureFormat                        (void) const { return m_imageFormat;            }
+       inline vk::VkBufferView                                 getBufferViewA                          (void) const { return *m_bufferViewA;           }
+       inline vk::VkBufferView                                 getBufferViewB                          (void) const { return *m_bufferViewB;           }
+       inline const vk::VkBufferMemoryBarrier* getBufferInitBarriers           (void) const { return m_bufferBarriers;         }
 
 private:
        enum
@@ -5318,23 +5307,22 @@ private:
                SAMPLE_POINT_3 = 25,
        };
 
-       const deUint32                                          m_numTexelBuffers;
-       const tcu::TextureFormat                        m_imageFormat;
-       const deUint32                                          m_viewOffset;
-
-       de::ArrayBuffer<deUint8>                        m_sourceBufferA;
-       de::ArrayBuffer<deUint8>                        m_sourceBufferB;
-       const tcu::ConstPixelBufferAccess       m_sourceViewA;
-       const tcu::ConstPixelBufferAccess       m_sourceViewB;
-
-       de::MovePtr<vk::Allocation>                     m_bufferMemoryA;
-       de::MovePtr<vk::Allocation>                     m_bufferMemoryB;
-       const vk::Unique<vk::VkBuffer>          m_bufferA;
-       const vk::Unique<vk::VkBuffer>          m_bufferB;
-       const vk::Unique<vk::VkBufferView>      m_bufferViewA;
-       const vk::Unique<vk::VkBufferView>      m_bufferViewB;
-       const vk::VkBufferMemoryBarrier         m_bufferBarrierA;
-       const vk::VkBufferMemoryBarrier         m_bufferBarrierB;
+       const deUint32                                                  m_numTexelBuffers;
+       const tcu::TextureFormat                                m_imageFormat;
+       const deUint32                                                  m_viewOffset;
+
+       de::ArrayBuffer<deUint8>                                m_sourceBufferA;
+       de::ArrayBuffer<deUint8>                                m_sourceBufferB;
+       const tcu::ConstPixelBufferAccess               m_sourceViewA;
+       const tcu::ConstPixelBufferAccess               m_sourceViewB;
+
+       de::MovePtr<vk::Allocation>                             m_bufferMemoryA;
+       de::MovePtr<vk::Allocation>                             m_bufferMemoryB;
+       const vk::Unique<vk::VkBuffer>                  m_bufferA;
+       const vk::Unique<vk::VkBuffer>                  m_bufferB;
+       const vk::Unique<vk::VkBufferView>              m_bufferViewA;
+       const vk::Unique<vk::VkBufferView>              m_bufferViewB;
+       vk::VkBufferMemoryBarrier                               m_bufferBarriers[2];
 };
 
 TexelBufferInstanceBuffers::TexelBufferInstanceBuffers (const vk::DeviceInterface&             vki,
@@ -5362,8 +5350,6 @@ TexelBufferInstanceBuffers::TexelBufferInstanceBuffers (const vk::DeviceInterfac
        , m_bufferViewB         ((numTexelBuffers == 1)
                                                        ? vk::Move<vk::VkBufferView>()
                                                        : createBufferView(vki, device, m_imageFormat, m_viewOffset, *m_bufferB))
-       , m_bufferBarrierA      (createBarrier(descriptorType, *m_bufferA))
-       , m_bufferBarrierB      (createBarrier(descriptorType, *m_bufferB))
 {
        DE_ASSERT(numTexelBuffers == 1 || numTexelBuffers == 2);
        DE_ASSERT(VIEW_WIDTH * m_imageFormat.getPixelSize() == VIEW_DATA_SIZE);
@@ -5379,6 +5365,9 @@ TexelBufferInstanceBuffers::TexelBufferInstanceBuffers (const vk::DeviceInterfac
                populateSourceBuffer(tcu::PixelBufferAccess(m_imageFormat, tcu::IVec3(BUFFER_SIZE / m_imageFormat.getPixelSize(), 1, 1), m_sourceBufferB.getPtr()));
                uploadData(vki, device, *m_bufferMemoryB, m_sourceBufferB);
        }
+
+       m_bufferBarriers[0] = createBarrier(descriptorType, *m_bufferA);
+       m_bufferBarriers[1] = createBarrier(descriptorType, *m_bufferB);
 }
 
 vk::Move<vk::VkBuffer> TexelBufferInstanceBuffers::createBuffer (const vk::DeviceInterface&            vki,
@@ -5936,10 +5925,10 @@ tcu::TestStatus TexelBufferComputeInstance::testResourceAccess (void)
        const int                                                                               numDescriptorSets       = DE_LENGTH_OF_ARRAY(descriptorSets);
        const deUint32* const                                                   dynamicOffsets          = DE_NULL;
        const int                                                                               numDynamicOffsets       = 0;
-       const void*     const                                                           preBarriers[]           = { m_texelBuffers.getBufferInitBarrierA(), m_texelBuffers.getBufferInitBarrierB() };
+       const vk::VkBufferMemoryBarrier* const                  preBarriers                     = m_texelBuffers.getBufferInitBarriers();
        const int                                                                               numPreBarriers          = m_texelBuffers.getNumTexelBuffers();
-       const void* const                                                               postBarriers[]          = { m_result.getResultReadBarrier() };
-       const int                                                                               numPostBarriers         = DE_LENGTH_OF_ARRAY(postBarriers);
+       const vk::VkBufferMemoryBarrier* const                  postBarriers            = m_result.getResultReadBarrier();
+       const int                                                                               numPostBarriers         = 1;
 
        const ComputeCommand                                                    compute                         (m_vki,
                                                                                                                                                 m_device,
index 20c5e66..da249c0 100644 (file)
@@ -237,7 +237,6 @@ tcu::TestStatus SharedVarTestInstance::iterate (void)
        const Unique<VkPipeline> pipeline(makeComputePipeline(vk, device, *pipelineLayout, *shaderModule));
 
        const VkBufferMemoryBarrier computeFinishBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *buffer, 0ull, bufferSizeBytes);
-       const void* barriers[] = { &computeFinishBarrier };
 
        const Unique<VkCommandPool> cmdPool(makeCommandPool(vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(vk, device, *cmdPool));
@@ -251,7 +250,7 @@ tcu::TestStatus SharedVarTestInstance::iterate (void)
 
        vk.cmdDispatch(*cmdBuffer, m_workSize.x(), m_workSize.y(), m_workSize.z());
 
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &computeFinishBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -409,7 +408,6 @@ tcu::TestStatus SharedVarAtomicOpTestInstance::iterate (void)
        const Unique<VkPipeline> pipeline(makeComputePipeline(vk, device, *pipelineLayout, *shaderModule));
 
        const VkBufferMemoryBarrier computeFinishBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *buffer, 0ull, bufferSizeBytes);
-       const void* barriers[] = { &computeFinishBarrier };
 
        const Unique<VkCommandPool> cmdPool(makeCommandPool(vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(vk, device, *cmdPool));
@@ -423,7 +421,7 @@ tcu::TestStatus SharedVarAtomicOpTestInstance::iterate (void)
 
        vk.cmdDispatch(*cmdBuffer, m_workSize.x(), m_workSize.y(), m_workSize.z());
 
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1u, &computeFinishBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -583,7 +581,6 @@ tcu::TestStatus SSBOLocalBarrierTestInstance::iterate (void)
        const Unique<VkPipeline> pipeline(makeComputePipeline(vk, device, *pipelineLayout, *shaderModule));
 
        const VkBufferMemoryBarrier computeFinishBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *buffer, 0ull, bufferSizeBytes);
-       const void* barriers[] = { &computeFinishBarrier };
 
        const Unique<VkCommandPool> cmdPool(makeCommandPool(vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(vk, device, *cmdPool));
@@ -597,7 +594,7 @@ tcu::TestStatus SSBOLocalBarrierTestInstance::iterate (void)
 
        vk.cmdDispatch(*cmdBuffer, m_workSize.x(), m_workSize.y(), m_workSize.z());
 
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &computeFinishBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -789,11 +786,7 @@ tcu::TestStatus CopyImageToSSBOTestInstance::iterate (void)
                        VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
                        *image, subresourceRange);
 
-               const void* preCopyBarriers[] = { &stagingBufferPostHostWriteBarrier, &imagePreCopyBarrier };
-               const void* postCopyBarriers[] = { &imagePostCopyBarrier };
-
                const VkBufferMemoryBarrier computeFinishBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *outputBuffer, 0ull, bufferSizeBytes);
-               const void* postComputeBarriers[] = { &computeFinishBarrier };
 
                const VkBufferImageCopy copyParams = makeBufferImageCopy(m_imageSize);
                const tcu::IVec2 workSize = m_imageSize / m_localSize;
@@ -810,12 +803,12 @@ tcu::TestStatus CopyImageToSSBOTestInstance::iterate (void)
                vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
                vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
-               vk.cmdPipelineBarrier(*cmdBuffer, 0u, VK_PIPELINE_STAGE_TRANSFER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preCopyBarriers), preCopyBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, 0u, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &stagingBufferPostHostWriteBarrier, 1, &imagePreCopyBarrier);
                vk.cmdCopyBufferToImage(*cmdBuffer, *stagingBuffer, *image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyParams);
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(postCopyBarriers), postCopyBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imagePostCopyBarrier);
 
                vk.cmdDispatch(*cmdBuffer, workSize.x(), workSize.y(), 1u);
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(postComputeBarriers), postComputeBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &computeFinishBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
                endCommandBuffer(vk, *cmdBuffer);
 
@@ -1005,10 +998,6 @@ tcu::TestStatus CopySSBOToImageTestInstance::iterate (void)
 
                const VkBufferMemoryBarrier outputBufferPostCopyBarrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *outputBuffer, 0ull, bufferSizeBytes);
 
-               const void* preComputeBarriers[] = { &inputBufferPostHostWriteBarrier, &imageLayoutBarrier };
-               const void* preCopyBarriers[] = { &imagePreCopyBarrier };
-               const void* postCopyBarriers[] = { &outputBufferPostCopyBarrier };
-
                const VkBufferImageCopy copyParams = makeBufferImageCopy(m_imageSize);
                const tcu::IVec2 workSize = m_imageSize / m_localSize;
 
@@ -1024,12 +1013,12 @@ tcu::TestStatus CopySSBOToImageTestInstance::iterate (void)
                vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
                vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preComputeBarriers), preComputeBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &inputBufferPostHostWriteBarrier, 1, &imageLayoutBarrier);
                vk.cmdDispatch(*cmdBuffer, workSize.x(), workSize.y(), 1u);
 
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preCopyBarriers), preCopyBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imagePreCopyBarrier);
                vk.cmdCopyImageToBuffer(*cmdBuffer, *image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *outputBuffer, 1u, &copyParams);
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(postCopyBarriers), postCopyBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &outputBufferPostCopyBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
                endCommandBuffer(vk, *cmdBuffer);
 
@@ -1161,7 +1150,7 @@ void BufferToBufferInvertTest::initPrograms (SourceCollections& sourceCollection
                        << "layout(binding = 0) readonly uniform Input {\n"
                        << "    uint values[" << m_numValues << "];\n"
                        << "} ub_in;\n"
-                       << "layout(binding = 1) writeonly buffer Output {\n"
+                       << "layout(binding = 1, std140) writeonly buffer Output {\n"
                        << "    uint values[" << m_numValues << "];\n"
                        << "} sb_out;\n"
                        << "void main (void) {\n"
@@ -1178,10 +1167,10 @@ void BufferToBufferInvertTest::initPrograms (SourceCollections& sourceCollection
        {
                src << "#version 310 es\n"
                        << "layout (local_size_x = " << m_localSize.x() << ", local_size_y = " << m_localSize.y() << ", local_size_z = " << m_localSize.z() << ") in;\n"
-                       << "layout(binding = 0) readonly buffer Input {\n"
+                       << "layout(binding = 0, std140) readonly buffer Input {\n"
                        << "    uint values[" << m_numValues << "];\n"
                        << "} sb_in;\n"
-                       << "layout (binding = 1) writeonly buffer Output {\n"
+                       << "layout (binding = 1, std140) writeonly buffer Output {\n"
                        << "    uint values[" << m_numValues << "];\n"
                        << "} sb_out;\n"
                        << "void main (void) {\n"
@@ -1232,16 +1221,16 @@ tcu::TestStatus BufferToBufferInvertTestInstance::iterate (void)
 
        // Create an input buffer
 
-       const VkDeviceSize bufferSizeBytes = sizeof(deUint32) * m_numValues;
+       const VkDeviceSize bufferSizeBytes = sizeof(tcu::UVec4) * m_numValues;
        const Buffer inputBuffer(vk, device, allocator, makeBufferCreateInfo(bufferSizeBytes, inputBufferUsageFlags), MemoryRequirement::HostVisible);
 
        // Fill the input buffer with data
        {
                de::Random rnd(randomSeed);
                const Allocation& inputBufferAllocation = inputBuffer.getAllocation();
-               deUint32* bufferPtr = static_cast<deUint32*>(inputBufferAllocation.getHostPtr());
+               tcu::UVec4* bufferPtr = static_cast<tcu::UVec4*>(inputBufferAllocation.getHostPtr());
                for (deUint32 i = 0; i < m_numValues; ++i)
-                       *bufferPtr++ = rnd.getUint32();
+                       bufferPtr[i].x() = rnd.getUint32();
 
                flushMappedMemoryRange(vk, device, inputBufferAllocation.getMemory(), inputBufferAllocation.getOffset(), bufferSizeBytes);
        }
@@ -1280,10 +1269,8 @@ tcu::TestStatus BufferToBufferInvertTestInstance::iterate (void)
        const Unique<VkPipeline> pipeline(makeComputePipeline(vk, device, *pipelineLayout, *shaderModule));
 
        const VkBufferMemoryBarrier hostWriteBarrier = makeBufferMemoryBarrier(VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, *inputBuffer, 0ull, bufferSizeBytes);
-       const void* preComputeBarriers[] = { &hostWriteBarrier };
 
        const VkBufferMemoryBarrier shaderWriteBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *outputBuffer, 0ull, bufferSizeBytes);
-       const void* postComputeBarriers[] = { &shaderWriteBarrier };
 
        const Unique<VkCommandPool> cmdPool(makeCommandPool(vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(vk, device, *cmdPool));
@@ -1295,9 +1282,9 @@ tcu::TestStatus BufferToBufferInvertTestInstance::iterate (void)
        vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
        vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preComputeBarriers), preComputeBarriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &hostWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        vk.cmdDispatch(*cmdBuffer, m_workSize.x(), m_workSize.y(), m_workSize.z());
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(postComputeBarriers), postComputeBarriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &shaderWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -1310,13 +1297,13 @@ tcu::TestStatus BufferToBufferInvertTestInstance::iterate (void)
        const Allocation& outputBufferAllocation = outputBuffer.getAllocation();
        invalidateMappedMemoryRange(vk, device, outputBufferAllocation.getMemory(), outputBufferAllocation.getOffset(), bufferSizeBytes);
 
-       const deUint32* bufferPtr = static_cast<deUint32*>(outputBufferAllocation.getHostPtr());
-       const deUint32* refBufferPtr = static_cast<deUint32*>(inputBuffer.getAllocation().getHostPtr());
+       const tcu::UVec4* bufferPtr = static_cast<tcu::UVec4*>(outputBufferAllocation.getHostPtr());
+       const tcu::UVec4* refBufferPtr = static_cast<tcu::UVec4*>(inputBuffer.getAllocation().getHostPtr());
 
        for (deUint32 ndx = 0; ndx < m_numValues; ++ndx)
        {
-               const deUint32 res = bufferPtr[ndx];
-               const deUint32 ref = ~refBufferPtr[ndx];
+               const deUint32 res = bufferPtr[ndx].x();
+               const deUint32 ref = ~refBufferPtr[ndx].x();
 
                if (res != ref)
                {
@@ -1473,10 +1460,8 @@ tcu::TestStatus InvertSSBOInPlaceTestInstance::iterate (void)
        const Unique<VkPipeline> pipeline(makeComputePipeline(vk, device, *pipelineLayout, *shaderModule));
 
        const VkBufferMemoryBarrier hostWriteBarrier = makeBufferMemoryBarrier(VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, *buffer, 0ull, bufferSizeBytes);
-       const void* preComputeBarriers[] = { &hostWriteBarrier };
 
        const VkBufferMemoryBarrier shaderWriteBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *buffer, 0ull, bufferSizeBytes);
-       const void* postComputeBarriers[] = { &shaderWriteBarrier };
 
        const Unique<VkCommandPool> cmdPool(makeCommandPool(vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(vk, device, *cmdPool));
@@ -1488,9 +1473,9 @@ tcu::TestStatus InvertSSBOInPlaceTestInstance::iterate (void)
        vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
        vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preComputeBarriers), preComputeBarriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &hostWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        vk.cmdDispatch(*cmdBuffer, m_workSize.x(), m_workSize.y(), m_workSize.z());
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(postComputeBarriers), postComputeBarriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &shaderWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -1665,9 +1650,11 @@ tcu::TestStatus WriteToMultipleSSBOTestInstance::iterate (void)
        const Unique<VkPipelineLayout> pipelineLayout(makePipelineLayout(vk, device, *descriptorSetLayout));
        const Unique<VkPipeline> pipeline(makeComputePipeline(vk, device, *pipelineLayout, *shaderModule));
 
-       const VkBufferMemoryBarrier shaderWriteBarrier0 = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *buffer0, 0ull, bufferSizeBytes);
-       const VkBufferMemoryBarrier shaderWriteBarrier1 = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *buffer1, 0ull, bufferSizeBytes);
-       const void* postComputeBarriers[] = { &shaderWriteBarrier0, &shaderWriteBarrier1 };
+       const VkBufferMemoryBarrier shaderWriteBarriers[] =
+       {
+               makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *buffer0, 0ull, bufferSizeBytes),
+               makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *buffer1, 0ull, bufferSizeBytes)
+       };
 
        const Unique<VkCommandPool> cmdPool(makeCommandPool(vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(vk, device, *cmdPool));
@@ -1680,7 +1667,7 @@ tcu::TestStatus WriteToMultipleSSBOTestInstance::iterate (void)
        vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
        vk.cmdDispatch(*cmdBuffer, m_workSize.x(), m_workSize.y(), m_workSize.z());
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(postComputeBarriers), postComputeBarriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, DE_LENGTH_OF_ARRAY(shaderWriteBarriers), shaderWriteBarriers, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -1878,13 +1865,10 @@ tcu::TestStatus SSBOBarrierTestInstance::iterate (void)
        const Unique<VkPipeline> pipeline1(makeComputePipeline(vk, device, *pipelineLayout, *shaderModule1));
 
        const VkBufferMemoryBarrier writeUniformConstantsBarrier = makeBufferMemoryBarrier(VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_UNIFORM_READ_BIT, *uniformBuffer, 0ull, uniformBufferSizeBytes);
-       const void* barriersBeforeCompute[] = { &writeUniformConstantsBarrier };
 
        const VkBufferMemoryBarrier betweenShadersBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, *workBuffer, 0ull, workBufferSizeBytes);
-       const void* barriersAfterFirstShader[] = { &betweenShadersBarrier };
 
        const VkBufferMemoryBarrier afterComputeBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *outputBuffer, 0ull, outputBufferSizeBytes);
-       const void* barriersAfterCompute[] = { &afterComputeBarrier };
 
        const Unique<VkCommandPool> cmdPool(makeCommandPool(vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(vk, device, *cmdPool));
@@ -1896,16 +1880,16 @@ tcu::TestStatus SSBOBarrierTestInstance::iterate (void)
        vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline0);
        vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersBeforeCompute), barriersBeforeCompute);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &writeUniformConstantsBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        vk.cmdDispatch(*cmdBuffer, m_workSize.x(), m_workSize.y(), m_workSize.z());
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersAfterFirstShader), barriersAfterFirstShader);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &betweenShadersBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        // Switch to the second shader program
        vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline1);
 
        vk.cmdDispatch(*cmdBuffer, m_workSize.x(), m_workSize.y(), m_workSize.z());
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersAfterCompute), barriersAfterCompute);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &afterComputeBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -2093,10 +2077,6 @@ tcu::TestStatus ImageAtomicOpTestInstance::iterate (void)
 
                const VkBufferMemoryBarrier outputBufferPostCopyBarrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *outputBuffer, 0ull, outputBufferSizeBytes);
 
-               const void* preComputeBarriers[] = { &inputBufferPostHostWriteBarrier };
-               const void* preCopyBarriers[] = { &imagePreCopyBarrier };
-               const void* postCopyBarriers[] = { &outputBufferPostCopyBarrier };
-
                const VkBufferImageCopy copyParams = makeBufferImageCopy(m_imageSize);
 
                // Prepare the command buffer
@@ -2111,12 +2091,12 @@ tcu::TestStatus ImageAtomicOpTestInstance::iterate (void)
                vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
                vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preComputeBarriers), preComputeBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &inputBufferPostHostWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
                vk.cmdDispatch(*cmdBuffer, m_imageSize.x(), m_imageSize.y(), 1u);
 
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preCopyBarriers), preCopyBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imagePreCopyBarrier);
                vk.cmdCopyImageToBuffer(*cmdBuffer, *image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *outputBuffer, 1u, &copyParams);
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(postCopyBarriers), postCopyBarriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &outputBufferPostCopyBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
                endCommandBuffer(vk, *cmdBuffer);
 
@@ -2246,6 +2226,12 @@ tcu::TestStatus ImageBarrierTestInstance::iterate (void)
        const VkDeviceSize outputBufferSizeBytes = sizeof(deUint32);
        const Buffer outputBuffer(vk, device, allocator, makeBufferCreateInfo(outputBufferSizeBytes, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT), MemoryRequirement::HostVisible);
 
+       // Initialize atomic counter value to zero
+       const Allocation& outputBufferAllocation = outputBuffer.getAllocation();
+       deUint32* outputBufferPtr = static_cast<deUint32*>(outputBufferAllocation.getHostPtr());
+       *outputBufferPtr = 0;
+       flushMappedMemoryRange(vk, device, outputBufferAllocation.getMemory(), outputBufferAllocation.getOffset(), outputBufferSizeBytes);
+
        // Create a uniform buffer (to pass uniform constants)
 
        const VkDeviceSize uniformBufferSizeBytes = sizeof(deUint32);
@@ -2305,17 +2291,12 @@ tcu::TestStatus ImageBarrierTestInstance::iterate (void)
                VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
                *image, subresourceRange);
 
-       const void* barriersBeforeCompute[] = { &writeUniformConstantsBarrier, &imageLayoutBarrier };
-
        const VkImageMemoryBarrier imageBarrierBetweenShaders = makeImageMemoryBarrier(
                VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
                VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
                *image, subresourceRange);
 
-       const void* barriersAfterFirstShader[] = { &imageBarrierBetweenShaders };
-
        const VkBufferMemoryBarrier afterComputeBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *outputBuffer, 0ull, outputBufferSizeBytes);
-       const void* barriersAfterCompute[] = { &afterComputeBarrier };
 
        const Unique<VkCommandPool> cmdPool(makeCommandPool(vk, device, queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(vk, device, *cmdPool));
@@ -2327,16 +2308,16 @@ tcu::TestStatus ImageBarrierTestInstance::iterate (void)
        vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline0);
        vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersBeforeCompute), barriersBeforeCompute);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &writeUniformConstantsBarrier, 1, &imageLayoutBarrier);
 
        vk.cmdDispatch(*cmdBuffer, m_imageSize.x(), m_imageSize.y(), 1u);
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersAfterFirstShader), barriersAfterFirstShader);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrierBetweenShaders);
 
        // Switch to the second shader program
        vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline1);
 
        vk.cmdDispatch(*cmdBuffer, m_imageSize.x(), m_imageSize.y(), 1u);
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersAfterCompute), barriersAfterCompute);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &afterComputeBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -2346,7 +2327,6 @@ tcu::TestStatus ImageBarrierTestInstance::iterate (void)
 
        // Validate the results
 
-       const Allocation& outputBufferAllocation = outputBuffer.getAllocation();
        invalidateMappedMemoryRange(vk, device, outputBufferAllocation.getMemory(), outputBufferAllocation.getOffset(), outputBufferSizeBytes);
 
        const int               numValues = multiplyComponents(m_imageSize);
index 0c57b99..15b361a 100644 (file)
@@ -267,12 +267,11 @@ tcu::TestStatus IndirectDispatchInstanceBufferUpload::iterate (void)
        // Create descriptor pool
        const vk::Unique<vk::VkDescriptorPool> descriptorPool(
                vk::DescriptorPoolBuilder()
-               .addType(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+               .addType(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, (deUint32)m_dispatchCommands.size())
                .build(m_device_interface, m_device, vk::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, static_cast<deUint32>(m_dispatchCommands.size())));
 
        const vk::VkBufferMemoryBarrier ssboPostBarrier = makeBufferMemoryBarrier(
                vk::VK_ACCESS_SHADER_WRITE_BIT, vk::VK_ACCESS_HOST_READ_BIT, *resultBuffer, 0ull, resultBufferSize);
-       const void* const postBarriers[] = { &ssboPostBarrier };
 
        // Create command buffer
        const vk::Unique<vk::VkCommandPool> cmdPool(makeCommandPool(m_device_interface, m_device, m_queueFamilyIndex));
@@ -317,7 +316,10 @@ tcu::TestStatus IndirectDispatchInstanceBufferUpload::iterate (void)
        }
 
        // Insert memory barrier
-       m_device_interface.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_FALSE, DE_LENGTH_OF_ARRAY(postBarriers), postBarriers);
+       m_device_interface.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0,
+                                                                                 0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                                 1, &ssboPostBarrier,
+                                                                                 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
 
        // End recording commands
        endCommandBuffer(m_device_interface, *cmdBuffer);
@@ -496,8 +498,6 @@ void IndirectDispatchInstanceBufferGenerate::fillIndirectBufferData (const vk::V
        const vk::VkBufferMemoryBarrier bufferBarrier = makeBufferMemoryBarrier(
                vk::VK_ACCESS_SHADER_WRITE_BIT, vk::VK_ACCESS_INDIRECT_COMMAND_READ_BIT, *indirectBuffer, 0ull, m_bufferSize);
 
-       const void* const postBarriers[] = { &bufferBarrier };
-
        // Bind compute pipeline
        m_device_interface.cmdBindPipeline(commandBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *m_computePipeline);
 
@@ -508,7 +508,10 @@ void IndirectDispatchInstanceBufferGenerate::fillIndirectBufferData (const vk::V
        m_device_interface.cmdDispatch(commandBuffer, 1u, 1u, 1u);
 
        // Insert memory barrier
-       m_device_interface.cmdPipelineBarrier(commandBuffer, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, vk::VK_FALSE, DE_LENGTH_OF_ARRAY(postBarriers), postBarriers);
+       m_device_interface.cmdPipelineBarrier(commandBuffer, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, (vk::VkDependencyFlags)0,
+                                                                                 0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                                 1, &bufferBarrier,
+                                                                                 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
 }
 
 class IndirectDispatchCaseBufferGenerate : public IndirectDispatchCaseBufferUpload
index 24ab099..ec7345c 100644 (file)
@@ -449,8 +449,6 @@ tcu::TestStatus     ComputeBuiltinVarInstance::iterate (void)
        const VkBufferMemoryBarrier bufferBarrier = makeBufferMemoryBarrier(
                VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *resultBuffer, 0ull, resultBufferSize);
 
-       const void* const postBarrier[] = { &bufferBarrier };
-
        const Unique<VkCommandPool> cmdPool(makeCommandPool(m_vki, m_device, m_queueFamilyIndex));
        const Unique<VkCommandBuffer> cmdBuffer(makeCommandBuffer(m_vki, m_device, *cmdPool));
 
@@ -475,7 +473,10 @@ tcu::TestStatus    ComputeBuiltinVarInstance::iterate (void)
        // Dispatch indirect compute command
        m_vki.cmdDispatch(*cmdBuffer, subCase.numWorkGroups()[0], subCase.numWorkGroups()[1], subCase.numWorkGroups()[2]);
 
-       m_vki.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, VK_FALSE, 1, postBarrier);
+       m_vki.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0,
+                                                        0, (const VkMemoryBarrier*)DE_NULL,
+                                                        1, &bufferBarrier,
+                                                        0, (const VkImageMemoryBarrier*)DE_NULL);
 
        // End recording commands
        endCommandBuffer(m_vki, *cmdBuffer);
index 2095508..51d936b 100644 (file)
@@ -291,12 +291,7 @@ void beginCommandBuffer (const DeviceInterface& vk, const VkCommandBuffer comman
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                DE_NULL,                                                                                // const void*                                          pNext;
                0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                // VkRenderPass                                 renderPass;
-               0u,                                                                                             // deUint32                                             subpass;
-               DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-               DE_FALSE,                                                                               // VkBool32                                             occlusionQueryEnable;
-               0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u,                                                                                             // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
        VK_CHECK(vk.beginCommandBuffer(commandBuffer, &commandBufBeginParams));
 }
@@ -325,6 +320,7 @@ void submitCommandsAndWait (const DeviceInterface&  vk,
                DE_NULL,                                                        // const void*                          pNext;
                0u,                                                                     // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                                     // deUint32                                     commandBufferCount;
                &commandBuffer,                                         // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                                     // deUint32                                     signalSemaphoreCount;
index dfd7038..6547b96 100644 (file)
@@ -469,21 +469,19 @@ SubpassDescription::SubpassDescription (vk::VkPipelineBindPoint                           _pipelineBind
                                                                                const vk::VkAttachmentReference*        _resolveAttachments,
                                                                                vk::VkAttachmentReference                       depthStencilAttachment,
                                                                                deUint32                                                        _preserveAttachmentCount,
-                                                                               const vk::VkAttachmentReference*        _preserveAttachments)
+                                                                               const deUint32*                                         _preserveAttachments)
 {
        m_inputAttachments = std::vector<vk::VkAttachmentReference>(_inputAttachments, _inputAttachments + _inputAttachmentCount);
        m_colorAttachments = std::vector<vk::VkAttachmentReference>(_colorAttachments, _colorAttachments + _colorAttachmentCount);
 
        if (_resolveAttachments)
-       {
                m_resolveAttachments = std::vector<vk::VkAttachmentReference>(_resolveAttachments, _resolveAttachments + _colorAttachmentCount);
-       }
 
-       m_preserveAttachments = std::vector<vk::VkAttachmentReference>(_preserveAttachments, _preserveAttachments + _preserveAttachmentCount);
+       m_preserveAttachments = std::vector<deUint32>(_preserveAttachments, _preserveAttachments + _preserveAttachmentCount);
 
        m_depthStencilAttachment = depthStencilAttachment;
 
-       flags = _flags;
+       flags                                   = _flags;
        pipelineBindPoint               = _pipelineBindPoint;
        inputAttachmentCount    = _inputAttachmentCount;
        pInputAttachments               = DE_NULL;
@@ -494,21 +492,17 @@ SubpassDescription::SubpassDescription (vk::VkPipelineBindPoint                           _pipelineBind
        pPreserveAttachments    = DE_NULL;
        preserveAttachmentCount = _preserveAttachmentCount;
 
-       if (m_inputAttachments.size()) {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
 
-       if (m_colorAttachments.size()) {
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size()) {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
-       if (m_preserveAttachments.size()) {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 }
 
 SubpassDescription::SubpassDescription (const vk::VkSubpassDescription& rhs)
@@ -521,34 +515,29 @@ SubpassDescription::SubpassDescription (const vk::VkSubpassDescription& rhs)
        m_colorAttachments = std::vector<vk::VkAttachmentReference>(
                rhs.pColorAttachments, rhs.pColorAttachments + rhs.colorAttachmentCount);
 
-       if (rhs.pResolveAttachments) {
+       if (rhs.pResolveAttachments)
                m_resolveAttachments = std::vector<vk::VkAttachmentReference>(
                        rhs.pResolveAttachments, rhs.pResolveAttachments + rhs.colorAttachmentCount);
-       }
-       m_preserveAttachments = std::vector<vk::VkAttachmentReference>(
+
+       m_preserveAttachments = std::vector<deUint32>(
                rhs.pPreserveAttachments, rhs.pPreserveAttachments + rhs.preserveAttachmentCount);
 
        if (rhs.pDepthStencilAttachment)
-       {
                m_depthStencilAttachment = *rhs.pDepthStencilAttachment;
-       }
 
-       if (m_inputAttachments.size()) {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
-       if (m_colorAttachments.size()) {
+
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size()) {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
        pDepthStencilAttachment = &m_depthStencilAttachment;
 
-       if (m_preserveAttachments.size()) {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 }
 
 SubpassDescription::SubpassDescription (const SubpassDescription& rhs) {
@@ -565,22 +554,19 @@ SubpassDescription& SubpassDescription::operator= (const SubpassDescription& rhs
        m_preserveAttachments   = rhs.m_preserveAttachments;
        m_depthStencilAttachment = rhs.m_depthStencilAttachment;
 
-       if (m_inputAttachments.size()) {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
-       if (m_colorAttachments.size()) {
+
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size()) {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
        pDepthStencilAttachment = &m_depthStencilAttachment;
 
-       if (m_preserveAttachments.size()) {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 
        return *this;
 }
@@ -615,35 +601,10 @@ SubpassDependency::SubpassDependency (const vk::VkSubpassDependency& rhs)
 
 CmdBufferBeginInfo::CmdBufferBeginInfo (vk::VkCommandBufferUsageFlags _flags)
 {
-       sType = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
-       pNext = DE_NULL;
-       renderPass                              = DE_NULL;
-       subpass                                 = 0;
-       framebuffer                             = DE_NULL;
-       flags                                   = _flags;
-       occlusionQueryEnable    = false;
-       queryFlags                              = 0u;
-       pipelineStatistics              = 0u;
-}
-
-CmdBufferBeginInfo::CmdBufferBeginInfo (vk::VkRenderPass                                       _renderPass,
-                                                                               deUint32                                                        _subpass,
-                                                                               vk::VkFramebuffer                                       _framebuffer,
-                                                                               vk::VkCommandBufferUsageFlags           _flags,
-                                                                               bool                                                            _occlusionQueryEnable,\r
-                                                                               vk::VkQueryControlFlags                         _queryFlags,\r
-                                                                               vk::VkQueryPipelineStatisticFlags       _pipelineStatistics)
-{
-
-       sType = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
-       pNext = DE_NULL;
-       renderPass                              = _renderPass;
-       subpass                                 = _subpass;
-       framebuffer                             = _framebuffer;
-       flags                                   = _flags;
-       occlusionQueryEnable    = _occlusionQueryEnable;
-       queryFlags                              = _queryFlags;
-       pipelineStatistics              = _pipelineStatistics;
+       sType                           = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+       pNext                           = DE_NULL;
+       flags                           = _flags;
+       pInheritanceInfo        = DE_NULL;
 }
 
 DescriptorPoolCreateInfo::DescriptorPoolCreateInfo (const std::vector<vk::VkDescriptorPoolSize>&       poolSizeCounts,
@@ -676,7 +637,7 @@ DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo (deUint32 _bindingC
        pNext = DE_NULL;
        flags = 0;
        bindingCount = _bindingCount;
-       pBinding         = _pBindings;
+       pBindings        = _pBindings;
 }
 
 PipelineLayoutCreateInfo::PipelineLayoutCreateInfo (deUint32                                                   _descriptorSetCount,
@@ -770,7 +731,7 @@ PipelineCreateInfo::InputAssemblerState::InputAssemblerState (vk::VkPrimitiveTop
        primitiveRestartEnable  = _primitiveRestartEnable;
 }
 
-PipelineCreateInfo::TesselationState::TesselationState (deUint32 _patchControlPoints)
+PipelineCreateInfo::TessellationState::TessellationState (deUint32 _patchControlPoints)
 {
        sType = vk::VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
        pNext = DE_NULL;
@@ -1190,6 +1151,7 @@ SamplerCreateInfo::SamplerCreateInfo (vk::VkFilter                                _magFilter,
                                                                          vk::VkSamplerAddressMode      _addressModeV,
                                                                          vk::VkSamplerAddressMode      _addressModeW,
                                                                          float                                         _mipLodBias,
+                                                                         vk::VkBool32                          _anisotropyEnable,
                                                                          float                                         _maxAnisotropy,
                                                                          vk::VkBool32                          _compareEnable,
                                                                          vk::VkCompareOp                       _compareOp,
@@ -1208,6 +1170,7 @@ SamplerCreateInfo::SamplerCreateInfo (vk::VkFilter                                _magFilter,
        addressModeV                    = _addressModeV;
        addressModeW                    = _addressModeW;
        mipLodBias                              = _mipLodBias;
+       anisotropyEnable                = _anisotropyEnable;
        maxAnisotropy                   = _maxAnisotropy;
        compareEnable                   = _compareEnable;
        compareOp                               = _compareOp;
index aa6f16f..b7ae712 100644 (file)
@@ -175,7 +175,7 @@ public:
                                                                         const vk::VkAttachmentReference*       resolveAttachments,
                                                                         vk::VkAttachmentReference                      depthStencilAttachment,
                                                                         deUint32                                                       preserveAttachmentCount,
-                                                                        const vk::VkAttachmentReference*       preserveAttachments);
+                                                                        const deUint32*                                        preserveAttachments);
 
        SubpassDescription                              (const vk::VkSubpassDescription&        other);
        SubpassDescription                              (const SubpassDescription&                      other);
@@ -185,7 +185,7 @@ private:
        std::vector<vk::VkAttachmentReference>  m_inputAttachments;
        std::vector<vk::VkAttachmentReference>  m_colorAttachments;
        std::vector<vk::VkAttachmentReference>  m_resolveAttachments;
-       std::vector<vk::VkAttachmentReference>  m_preserveAttachments;
+       std::vector<deUint32>                                   m_preserveAttachments;
 
        vk::VkAttachmentReference                               m_depthStencilAttachment;
 };
@@ -261,13 +261,6 @@ class CmdBufferBeginInfo : public vk::VkCommandBufferBeginInfo
 {
 public:
        CmdBufferBeginInfo (vk::VkCommandBufferUsageFlags               flags                                   = 0);
-       CmdBufferBeginInfo (vk::VkRenderPass                                    renderPass,
-                                               deUint32                                                        subpass,
-                                               vk::VkFramebuffer                                       framebuffer,
-                                               vk::VkCommandBufferUsageFlags           flags                                   = 0,
-                                               bool                                                            occlusionQueryEnable    = false,
-                                               vk::VkQueryControlFlags                         queryFlags                              = 0u,
-                                               vk::VkQueryPipelineStatisticFlags       pipelineStatistics              = 0u);
 };
 
 class DescriptorPoolSize : public vk::VkDescriptorPoolSize
@@ -334,10 +327,10 @@ public:
                InputAssemblerState (vk::VkPrimitiveTopology topology, vk::VkBool32 primitiveRestartEnable = false);
        };
 
-       class TesselationState : public vk::VkPipelineTessellationStateCreateInfo
+       class TessellationState : public vk::VkPipelineTessellationStateCreateInfo
        {
        public:
-               TesselationState (deUint32 patchControlPoints = 0);
+               TessellationState (deUint32 patchControlPoints = 0);
        };
 
        class ViewportState : public vk::VkPipelineViewportStateCreateInfo
@@ -511,6 +504,7 @@ public:
                                           vk::VkSamplerAddressMode     addressV                                = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
                                           vk::VkSamplerAddressMode     addressW                                = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
                                           float                                        mipLodBias                              = 0.0f,
+                                          vk::VkBool32                         anisotropyEnable                = vk::VK_FALSE,
                                           float                                        maxAnisotropy                   = 1.0f,
                                           vk::VkBool32                         compareEnable                   = false,
                                           vk::VkCompareOp                      compareOp                               = vk::VK_COMPARE_OP_ALWAYS,
index a879dc8..472fd1e 100644 (file)
@@ -352,10 +352,10 @@ void Image::readUsingBuffer (vk::VkQueue                          queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                               false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                vk::VkBufferImageCopy region =
@@ -363,7 +363,7 @@ void Image::readUsingBuffer (vk::VkQueue                            queue,
                        0, 0, 0,
                        { aspect, mipLevel, arrayElement, 1 },
                        offset,
-                       { width, height, depth }
+                       { (deUint32)width, (deUint32)height, (deUint32)depth }
                };
 
                m_vk.cmdCopyImageToBuffer(*copyCmdBuffer, object(), layout, stagingResource->object(), 1, &region);
@@ -375,6 +375,7 @@ void Image::readUsingBuffer (vk::VkQueue                            queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                              // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                              // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                              // deUint32                                     signalSemaphoreCount;
@@ -440,7 +441,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
 {
        de::SharedPtr<Image> stagingResource;
        {
-               vk::VkExtent3D stagingExtent = {width, height, depth};
+               vk::VkExtent3D stagingExtent = {(deUint32)width, (deUint32)height, (deUint32)depth};
                ImageCreateInfo stagingResourceCreateInfo(type, m_format, stagingExtent, 1, 1, vk::VK_SAMPLE_COUNT_1_BIT,
                                                                                                  vk::VK_IMAGE_TILING_LINEAR, vk::VK_IMAGE_USAGE_TRANSFER_DST_BIT);
 
@@ -467,7 +468,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
                transition2DImage(m_vk, *copyCmdBuffer, stagingResource->object(), aspect, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL);
 
                const vk::VkOffset3D zeroOffset = { 0, 0, 0 };
-               vk::VkImageCopy region = { {aspect, mipLevel, arrayElement, 1}, offset, {aspect, 0, 0, 1}, zeroOffset, {width, height, depth} };
+               vk::VkImageCopy region = { {aspect, mipLevel, arrayElement, 1}, offset, {aspect, 0, 0, 1}, zeroOffset, {(deUint32)width, (deUint32)height, (deUint32)depth} };
 
                m_vk.cmdCopyImage(*copyCmdBuffer, object(), layout, stagingResource->object(), vk::VK_IMAGE_LAYOUT_GENERAL, 1, &region);
                VK_CHECK(m_vk.endCommandBuffer(*copyCmdBuffer));
@@ -478,6 +479,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                              // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                              // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                              // deUint32                                     signalSemaphoreCount;
@@ -585,7 +587,7 @@ void Image::upload (vk::VkQueue                                     queue,
        DE_ASSERT(layout == vk::VK_IMAGE_LAYOUT_GENERAL || layout == vk::VK_IMAGE_LAYOUT_UNDEFINED || layout == vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
 
        de::SharedPtr<Image> stagingResource;
-       vk::VkExtent3D extent = {width, height, depth};
+       vk::VkExtent3D extent = {(deUint32)width, (deUint32)height, (deUint32)depth};
        ImageCreateInfo stagingResourceCreateInfo(
                type, m_format, extent, 1, 1, vk::VK_SAMPLE_COUNT_1_BIT,
                vk::VK_IMAGE_TILING_LINEAR, vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
@@ -636,9 +638,10 @@ void Image::upload (vk::VkQueue                                    queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                transition2DImage(m_vk, *copyCmdBuffer, stagingResource->object(), aspect, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL);
@@ -647,7 +650,7 @@ void Image::upload (vk::VkQueue                                     queue,
                                                                        zeroOffset,
                                                                        {aspect, mipLevel, arrayElement, 1},
                                                                        offset,
-                                                                       {width, height, depth}};
+                                                                       {(deUint32)width, (deUint32)height, (deUint32)depth}};
 
                m_vk.cmdCopyImage(*copyCmdBuffer, stagingResource->object(),
                                                                vk::VK_IMAGE_LAYOUT_GENERAL, object(), layout, 1, &region);
@@ -659,6 +662,7 @@ void Image::upload (vk::VkQueue                                     queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                              // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                              // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                              // deUint32                                     signalSemaphoreCount;
@@ -755,16 +759,17 @@ void Image::uploadUsingBuffer (vk::VkQueue                                        queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                vk::VkBufferImageCopy region = {
                        0, 0, 0,
                        { aspect, mipLevel, arrayElement, 1 },
                        offset,
-                       { width, height, depth }
+                       { (deUint32)width, (deUint32)height, (deUint32)depth }
                };
 
                m_vk.cmdCopyBufferToImage(*copyCmdBuffer, stagingResource->object(),
@@ -777,6 +782,7 @@ void Image::uploadUsingBuffer (vk::VkQueue                                  queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                              // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                              // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                              // deUint32                                     signalSemaphoreCount;
@@ -888,24 +894,25 @@ void transition2DImage (const vk::DeviceInterface&        vk,
                                                vk::VkImageLayout                       newLayout)
 {
        vk::VkImageMemoryBarrier barrier;
-       barrier.sType                                   = vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-       barrier.pNext                                   = DE_NULL;
-       barrier.srcAccessMask                           = 0;
-       barrier.dstAccessMask                           = 0;
-       barrier.oldLayout                               = oldLayout;
-       barrier.newLayout                               = newLayout;
-       barrier.srcQueueFamilyIndex             = vk::VK_QUEUE_FAMILY_IGNORED;
-       barrier.dstQueueFamilyIndex     = vk::VK_QUEUE_FAMILY_IGNORED;
-       barrier.image                                   = image;
+       barrier.sType                                                   = vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+       barrier.pNext                                                   = DE_NULL;
+       barrier.srcAccessMask                                   = 0;
+       barrier.dstAccessMask                                   = 0;
+       barrier.oldLayout                                               = oldLayout;
+       barrier.newLayout                                               = newLayout;
+       barrier.srcQueueFamilyIndex                             = vk::VK_QUEUE_FAMILY_IGNORED;
+       barrier.dstQueueFamilyIndex                             = vk::VK_QUEUE_FAMILY_IGNORED;
+       barrier.image                                                   = image;
        barrier.subresourceRange.aspectMask             = aspectMask;
        barrier.subresourceRange.baseMipLevel   = 0;
        barrier.subresourceRange.levelCount             = 1;
        barrier.subresourceRange.baseArrayLayer = 0;
        barrier.subresourceRange.layerCount             = 1;
 
-       void* barriers[] = { &barrier };
-
-       vk.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                 0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                 0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                 1, &barrier);
 }
 
 void initialTransitionColor2DImage (const vk::DeviceInterface &vk, vk::VkCommandBuffer cmdBuffer, vk::VkImage image, vk::VkImageLayout layout)
index 1b8da19..0e1f8fd 100644 (file)
@@ -168,6 +168,7 @@ tcu::TestStatus DrawIndexed::iterate (void)
                DE_NULL,                                                        // const void*                          pNext;
                0,                                                                              // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+               (const vk::VkPipelineStageFlags*)DE_NULL,
                1,                                                                              // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                0,                                                                              // deUint32                                     signalSemaphoreCount;
@@ -289,6 +290,7 @@ tcu::TestStatus DrawInstancedIndexed::iterate (void)
                DE_NULL,                                                        // const void*                          pNext;
                0,                                                                              // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+               (const vk::VkPipelineStageFlags*)DE_NULL,
                1,                                                                              // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                0,                                                                              // deUint32                                     signalSemaphoreCount;
index 2e5b378..f8ac4a0 100644 (file)
@@ -255,6 +255,7 @@ tcu::TestStatus IndirectDraw::iterate (void)
                DE_NULL,                                                        // const void*                          pNext;
                0,                                                                              // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+               (const vk::VkPipelineStageFlags*)DE_NULL,
                1,                                                                              // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                0,                                                                              // deUint32                                     signalSemaphoreCount;
@@ -424,6 +425,7 @@ tcu::TestStatus IndirectDrawInstanced::iterate (void)
                DE_NULL,                                                        // const void*                          pNext;
                0,                                                                              // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+               (const vk::VkPipelineStageFlags*)DE_NULL,
                1,                                                                              // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                0,                                                                              // deUint32                                     signalSemaphoreCount;
index a4dfa5f..4a43913 100644 (file)
@@ -162,6 +162,7 @@ tcu::TestStatus SimpleDraw::iterate (void)
                DE_NULL,                                                        // const void*                          pNext;
                0,                                                                              // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+               (const vk::VkPipelineStageFlags*)DE_NULL,
                1,                                                                              // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                0,                                                                              // deUint32                                     signalSemaphoreCount;
@@ -267,6 +268,7 @@ tcu::TestStatus SimpleDrawInstanced::iterate (void)
                DE_NULL,                                                        // const void*                          pNext;
                0,                                                                              // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                                // const VkSemaphore*           pWaitSemaphores;
+               (const vk::VkPipelineStageFlags*)DE_NULL,
                1,                                                                              // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                0,                                                                              // deUint32                                     signalSemaphoreCount;
index 5f968e7..9afd2fb 100644 (file)
@@ -226,20 +226,20 @@ void DynamicStateBaseClass::setDynamicViewportState (const deUint32 width, const
        viewport.minDepth = 0.0f;
        viewport.maxDepth = 1.0f;
 
-       m_vk.cmdSetViewport(*m_cmdBuffer, 1, &viewport);
+       m_vk.cmdSetViewport(*m_cmdBuffer, 0, 1, &viewport);
 
        vk::VkRect2D scissor;
        scissor.offset.x = 0;
        scissor.offset.y = 0;
        scissor.extent.width = width;
        scissor.extent.height = height;
-       m_vk.cmdSetScissor(*m_cmdBuffer, 1, &scissor);
+       m_vk.cmdSetScissor(*m_cmdBuffer, 0, 1, &scissor);
 }
 
 void DynamicStateBaseClass::setDynamicViewportState (deUint32 viewportCount, const vk::VkViewport* pViewports, const vk::VkRect2D* pScissors)
 {
-       m_vk.cmdSetViewport(*m_cmdBuffer, viewportCount, pViewports);
-       m_vk.cmdSetScissor(*m_cmdBuffer, viewportCount, pScissors);
+       m_vk.cmdSetViewport(*m_cmdBuffer, 0, viewportCount, pViewports);
+       m_vk.cmdSetScissor(*m_cmdBuffer, 0, viewportCount, pScissors);
 }
 
 void DynamicStateBaseClass::setDynamicRasterizationState (const float lineWidth,
index 03ced79..a508a4f 100644 (file)
@@ -123,6 +123,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
index f65b84c..203f152 100644 (file)
@@ -470,21 +470,19 @@ SubpassDescription::SubpassDescription (vk::VkPipelineBindPoint                           _pipelineBind
                                                                                const vk::VkAttachmentReference*        _resolveAttachments,
                                                                                vk::VkAttachmentReference                       depthStencilAttachment,
                                                                                deUint32                                                        _preserveAttachmentCount,
-                                                                               const vk::VkAttachmentReference*        _preserveAttachments)
+                                                                               const deUint32*                                         _preserveAttachments)
 {
        m_inputAttachments = std::vector<vk::VkAttachmentReference>(_inputAttachments, _inputAttachments + _inputAttachmentCount);
        m_colorAttachments = std::vector<vk::VkAttachmentReference>(_colorAttachments, _colorAttachments + _colorAttachmentCount);
 
        if (_resolveAttachments)
-       {
                m_resolveAttachments = std::vector<vk::VkAttachmentReference>(_resolveAttachments, _resolveAttachments + _colorAttachmentCount);
-       }
 
-       m_preserveAttachments = std::vector<vk::VkAttachmentReference>(_preserveAttachments, _preserveAttachments + _preserveAttachmentCount);
+       m_preserveAttachments = std::vector<deUint32>(_preserveAttachments, _preserveAttachments + _preserveAttachmentCount);
 
        m_depthStencilAttachment = depthStencilAttachment;
 
-       flags = _flags;
+       flags                                   = _flags;
        pipelineBindPoint               = _pipelineBindPoint;
        inputAttachmentCount    = _inputAttachmentCount;
        pInputAttachments               = DE_NULL;
@@ -495,21 +493,17 @@ SubpassDescription::SubpassDescription (vk::VkPipelineBindPoint                           _pipelineBind
        pPreserveAttachments    = DE_NULL;
        preserveAttachmentCount = _preserveAttachmentCount;
 
-       if (m_inputAttachments.size()) {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
 
-       if (m_colorAttachments.size()) {
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size()) {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
-       if (m_preserveAttachments.size()) {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 }
 
 SubpassDescription::SubpassDescription (const vk::VkSubpassDescription& rhs)
@@ -522,34 +516,29 @@ SubpassDescription::SubpassDescription (const vk::VkSubpassDescription& rhs)
        m_colorAttachments = std::vector<vk::VkAttachmentReference>(
                rhs.pColorAttachments, rhs.pColorAttachments + rhs.colorAttachmentCount);
 
-       if (rhs.pResolveAttachments) {
+       if (rhs.pResolveAttachments)
                m_resolveAttachments = std::vector<vk::VkAttachmentReference>(
                        rhs.pResolveAttachments, rhs.pResolveAttachments + rhs.colorAttachmentCount);
-       }
-       m_preserveAttachments = std::vector<vk::VkAttachmentReference>(
+
+       m_preserveAttachments = std::vector<deUint32>(
                rhs.pPreserveAttachments, rhs.pPreserveAttachments + rhs.preserveAttachmentCount);
 
        if (rhs.pDepthStencilAttachment)
-       {
                m_depthStencilAttachment = *rhs.pDepthStencilAttachment;
-       }
 
-       if (m_inputAttachments.size()) {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
-       if (m_colorAttachments.size()) {
+
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size()) {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
        pDepthStencilAttachment = &m_depthStencilAttachment;
 
-       if (m_preserveAttachments.size()) {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 }
 
 SubpassDescription::SubpassDescription (const SubpassDescription& rhs) {
@@ -566,22 +555,19 @@ SubpassDescription& SubpassDescription::operator= (const SubpassDescription& rhs
        m_preserveAttachments   = rhs.m_preserveAttachments;
        m_depthStencilAttachment = rhs.m_depthStencilAttachment;
 
-       if (m_inputAttachments.size()) {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
-       if (m_colorAttachments.size()) {
+
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size()) {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
        pDepthStencilAttachment = &m_depthStencilAttachment;
 
-       if (m_preserveAttachments.size()) {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 
        return *this;
 }
@@ -616,35 +602,10 @@ SubpassDependency::SubpassDependency (const vk::VkSubpassDependency& rhs)
 
 CmdBufferBeginInfo::CmdBufferBeginInfo (vk::VkCommandBufferUsageFlags _flags)
 {
-       sType = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
-       pNext = DE_NULL;
-       renderPass                              = DE_NULL;
-       subpass                                 = 0;
-       framebuffer                             = DE_NULL;
-       flags                                   = _flags;
-       occlusionQueryEnable    = false;
-       queryFlags                              = 0u;
-       pipelineStatistics              = 0u;
-}
-
-CmdBufferBeginInfo::CmdBufferBeginInfo (vk::VkRenderPass                                       _renderPass,
-                                                                               deUint32                                                        _subpass,
-                                                                               vk::VkFramebuffer                                       _framebuffer,
-                                                                               vk::VkCommandBufferUsageFlags           _flags,
-                                                                               bool                                                            _occlusionQueryEnable,
-                                                                               vk::VkQueryControlFlags                         _queryFlags,
-                                                                               vk::VkQueryPipelineStatisticFlags       _pipelineStatistics)
-{
-
-       sType = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
-       pNext = DE_NULL;
-       renderPass                              = _renderPass;
-       subpass                                 = _subpass;
-       framebuffer                             = _framebuffer;
-       flags                                   = _flags;
-       occlusionQueryEnable    = _occlusionQueryEnable;
-       queryFlags                              = _queryFlags;
-       pipelineStatistics              = _pipelineStatistics;
+       sType                           = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+       pNext                           = DE_NULL;
+       flags                           = _flags;
+       pInheritanceInfo        = DE_NULL;
 }
 
 DescriptorPoolCreateInfo::DescriptorPoolCreateInfo (const std::vector<vk::VkDescriptorPoolSize>&       poolSizeCounts,
@@ -677,7 +638,7 @@ DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo (deUint32 _bindingC
        pNext = DE_NULL;
        flags = 0;
        bindingCount = _bindingCount;
-       pBinding         = _pBindings;
+       pBindings        = _pBindings;
 }
 
 PipelineLayoutCreateInfo::PipelineLayoutCreateInfo (deUint32                                                   _descriptorSetCount,
@@ -772,7 +733,7 @@ PipelineCreateInfo::InputAssemblerState::InputAssemblerState (vk::VkPrimitiveTop
        primitiveRestartEnable  = _primitiveRestartEnable;
 }
 
-PipelineCreateInfo::TesselationState::TesselationState (deUint32 _patchControlPoints)
+PipelineCreateInfo::TessellationState::TessellationState (deUint32 _patchControlPoints)
 {
        sType = vk::VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
        pNext = DE_NULL;
@@ -1203,6 +1164,7 @@ SamplerCreateInfo::SamplerCreateInfo (vk::VkFilter                                _magFilter,
                                                                          vk::VkSamplerAddressMode      _addressModeV,
                                                                          vk::VkSamplerAddressMode      _addressModeW,
                                                                          float                                         _mipLodBias,
+                                                                         vk::VkBool32                          _anisotropyEnable,
                                                                          float                                         _maxAnisotropy,
                                                                          vk::VkBool32                          _compareEnable,
                                                                          vk::VkCompareOp                       _compareOp,
@@ -1221,6 +1183,7 @@ SamplerCreateInfo::SamplerCreateInfo (vk::VkFilter                                _magFilter,
        addressModeV                    = _addressModeV;
        addressModeW                    = _addressModeW;
        mipLodBias                              = _mipLodBias;
+       anisotropyEnable                = _anisotropyEnable;
        maxAnisotropy                   = _maxAnisotropy;
        compareEnable                   = _compareEnable;
        compareOp                               = _compareOp;
index fed2205..cd61d66 100644 (file)
@@ -177,7 +177,7 @@ public:
                                                                         const vk::VkAttachmentReference*       resolveAttachments,
                                                                         vk::VkAttachmentReference                      depthStencilAttachment,
                                                                         deUint32                                                       preserveAttachmentCount,
-                                                                        const vk::VkAttachmentReference*       preserveAttachments);
+                                                                        const deUint32*                                        preserveAttachments);
 
        SubpassDescription                              (const vk::VkSubpassDescription&        other);
        SubpassDescription                              (const SubpassDescription&                      other);
@@ -187,7 +187,7 @@ private:
        std::vector<vk::VkAttachmentReference>  m_inputAttachments;
        std::vector<vk::VkAttachmentReference>  m_colorAttachments;
        std::vector<vk::VkAttachmentReference>  m_resolveAttachments;
-       std::vector<vk::VkAttachmentReference>  m_preserveAttachments;
+       std::vector<deUint32>                                   m_preserveAttachments;
 
        vk::VkAttachmentReference                               m_depthStencilAttachment;
 };
@@ -263,13 +263,6 @@ class CmdBufferBeginInfo : public vk::VkCommandBufferBeginInfo
 {
 public:
        CmdBufferBeginInfo (vk::VkCommandBufferUsageFlags               flags                                   = 0);
-       CmdBufferBeginInfo (vk::VkRenderPass                                    renderPass,
-                                               deUint32                                                        subpass,
-                                               vk::VkFramebuffer                                       framebuffer,
-                                               vk::VkCommandBufferUsageFlags           flags                                   = 0,
-                                               bool                                                            occlusionQueryEnable    = false,
-                                               vk::VkQueryControlFlags                         queryFlags                              = 0u,
-                                               vk::VkQueryPipelineStatisticFlags       pipelineStatistics              = 0u);
 };
 
 class DescriptorPoolSize : public vk::VkDescriptorPoolSize
@@ -336,10 +329,10 @@ public:
                InputAssemblerState (vk::VkPrimitiveTopology topology, vk::VkBool32 primitiveRestartEnable = false);
        };
 
-       class TesselationState : public vk::VkPipelineTessellationStateCreateInfo
+       class TessellationState : public vk::VkPipelineTessellationStateCreateInfo
        {
        public:
-               TesselationState (deUint32 patchControlPoints = 0);
+               TessellationState (deUint32 patchControlPoints = 0);
        };
 
        class ViewportState : public vk::VkPipelineViewportStateCreateInfo
@@ -513,6 +506,7 @@ public:
                                           vk::VkSamplerAddressMode     addressV                                = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
                                           vk::VkSamplerAddressMode     addressW                                = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
                                           float                                        mipLodBias                              = 0.0f,
+                                          vk::VkBool32                         anisotropyEnable                = vk::VK_FALSE,
                                           float                                        maxAnisotropy                   = 1.0f,
                                           vk::VkBool32                         compareEnable                   = false,
                                           vk::VkCompareOp                      compareOp                               = vk::VK_COMPARE_OP_ALWAYS,
index b772b50..752493e 100644 (file)
@@ -67,7 +67,6 @@ public:
        DepthStencilBaseCase (Context& context, const char* vertexShaderName, const char* fragmentShaderName)
                : TestInstance                                          (context)
                , m_colorAttachmentFormat                       (vk::VK_FORMAT_R8G8B8A8_UNORM)
-               , m_depthStencilAttachmentFormat        (vk::VK_FORMAT_D24_UNORM_S8_UINT)
                , m_topology                                            (vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
                , m_vk                                                          (context.getDeviceInterface())
                , m_vertexShaderName                            (vertexShaderName)
@@ -121,6 +120,25 @@ protected:
        {
                const vk::VkDevice device = m_context.getDevice();
 
+               vk::VkFormatProperties formatProperties;
+               // check for VK_FORMAT_D24_UNORM_S8_UINT support
+               m_context.getInstanceInterface().getPhysicalDeviceFormatProperties(m_context.getPhysicalDevice(), vk::VK_FORMAT_D24_UNORM_S8_UINT, &formatProperties);
+               if (formatProperties.optimalTilingFeatures & vk::VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
+               {
+                       m_depthStencilAttachmentFormat = vk::VK_FORMAT_D24_UNORM_S8_UINT;
+               }
+               else
+               {
+                       // check for VK_FORMAT_D32_SFLOAT_S8_UINT support
+                       m_context.getInstanceInterface().getPhysicalDeviceFormatProperties(m_context.getPhysicalDevice(), vk::VK_FORMAT_D32_SFLOAT_S8_UINT, &formatProperties);
+                       if (formatProperties.optimalTilingFeatures & vk::VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
+                       {
+                               m_depthStencilAttachmentFormat = vk::VK_FORMAT_D32_SFLOAT_S8_UINT;
+                       }
+                       else
+                               throw tcu::NotSupportedError("No valid depth stencil attachment available");
+               }
+
                const PipelineLayoutCreateInfo pipelineLayoutCreateInfo;
                m_pipelineLayout = vk::createPipelineLayout(m_vk, device, &pipelineLayoutCreateInfo);
 
@@ -328,20 +346,20 @@ protected:
                viewport.minDepth = 0.0f;
                viewport.maxDepth = 1.0f;
 
-               m_vk.cmdSetViewport(*m_cmdBuffer, 1, &viewport);
+               m_vk.cmdSetViewport(*m_cmdBuffer, 0, 1, &viewport);
 
                vk::VkRect2D scissor;
                scissor.offset.x = 0;
                scissor.offset.y = 0;
                scissor.extent.width = width;
                scissor.extent.height = height;
-               m_vk.cmdSetScissor(*m_cmdBuffer, 1, &scissor);
+               m_vk.cmdSetScissor(*m_cmdBuffer, 0, 1, &scissor);
        }
 
        void setDynamicViewportState(const deUint32 viewportCount, const vk::VkViewport* pViewports, const vk::VkRect2D* pScissors)
        {
-               m_vk.cmdSetViewport(*m_cmdBuffer, viewportCount, pViewports);
-               m_vk.cmdSetScissor(*m_cmdBuffer, viewportCount, pScissors);
+               m_vk.cmdSetViewport(*m_cmdBuffer, 0, viewportCount, pViewports);
+               m_vk.cmdSetScissor(*m_cmdBuffer, 0, viewportCount, pScissors);
        }
 
        void setDynamicRasterizationState(const float lineWidth = 1.0f,
@@ -385,6 +403,14 @@ public:
        DepthBoundsParamTestInstance (Context &context, ShaderMap shaders)
                : DepthStencilBaseCase (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
        {
+               // Check if depth bounds test is supported
+               {
+                       const vk::VkPhysicalDeviceFeatures& deviceFeatures = m_context.getDeviceFeatures();
+
+                       if (!deviceFeatures.depthBounds)
+                               throw tcu::NotSupportedError("Depth bounds test is unsupported");
+               }
+
                m_data.push_back(PositionColorVertex(tcu::Vec4(-1.0f, 1.0f, 0.375f, 1.0f), tcu::RGBA::green().toVec()));
                m_data.push_back(PositionColorVertex(tcu::Vec4(0.0f, 1.0f, 0.375f, 1.0f), tcu::RGBA::green().toVec()));
                m_data.push_back(PositionColorVertex(tcu::Vec4(-1.0f, -1.0f, 0.375f, 1.0f), tcu::RGBA::green().toVec()));
@@ -403,15 +429,6 @@ public:
                m_depthStencilState_1 = PipelineCreateInfo::DepthStencilState(
                        vk::VK_TRUE, vk::VK_TRUE, vk::VK_COMPARE_OP_ALWAYS, vk::VK_FALSE);
 
-
-               // Check if depth bounds test is supported
-               {
-                       const vk::VkPhysicalDeviceFeatures& deviceFeatures = m_context.getDeviceFeatures();
-
-                       if (!deviceFeatures.depthBounds)
-                               throw tcu::NotSupportedError("Depth bounds test is unsupported");
-               }
-
                // enable depth bounds test
                m_depthStencilState_2 = PipelineCreateInfo::DepthStencilState(
                        vk::VK_FALSE, vk::VK_FALSE, vk::VK_COMPARE_OP_NEVER, vk::VK_TRUE);
@@ -452,6 +469,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -603,6 +621,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -772,6 +791,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
index 5fa4935..7da5f06 100644 (file)
@@ -114,6 +114,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -223,6 +224,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -372,6 +374,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
index 504ef88..ba3ee95 100644 (file)
@@ -352,10 +352,10 @@ void Image::readUsingBuffer (vk::VkQueue                          queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                               false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                vk::VkBufferImageCopy region =
@@ -363,7 +363,7 @@ void Image::readUsingBuffer (vk::VkQueue                            queue,
                        0, 0, 0,
                        { aspect, mipLevel, arrayElement, 1 },
                        offset,
-                       { width, height, depth }
+                       { (deUint32)width, (deUint32)height, (deUint32)depth }
                };
 
                m_vk.cmdCopyImageToBuffer(*copyCmdBuffer, object(), layout, stagingResource->object(), 1, &region);
@@ -375,6 +375,7 @@ void Image::readUsingBuffer (vk::VkQueue                            queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -440,7 +441,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
 {
        de::SharedPtr<Image> stagingResource;
        {
-               vk::VkExtent3D stagingExtent = {width, height, depth};
+               vk::VkExtent3D stagingExtent = {(deUint32)width, (deUint32)height, (deUint32)depth};
                ImageCreateInfo stagingResourceCreateInfo(type, m_format, stagingExtent, 1, 1, vk::VK_SAMPLE_COUNT_1_BIT,
                                                                                                  vk::VK_IMAGE_TILING_LINEAR, vk::VK_IMAGE_USAGE_TRANSFER_DST_BIT);
 
@@ -467,7 +468,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
                transition2DImage(m_vk, *copyCmdBuffer, stagingResource->object(), aspect, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL);
 
                const vk::VkOffset3D zeroOffset = { 0, 0, 0 };
-               vk::VkImageCopy region = { {aspect, mipLevel, arrayElement, 1}, offset, {aspect, 0, 0, 1}, zeroOffset, {width, height, depth} };
+               vk::VkImageCopy region = { {aspect, mipLevel, arrayElement, 1}, offset, {aspect, 0, 0, 1}, zeroOffset, {(deUint32)width, (deUint32)height, (deUint32)depth} };
 
                m_vk.cmdCopyImage(*copyCmdBuffer, object(), layout, stagingResource->object(), vk::VK_IMAGE_LAYOUT_GENERAL, 1, &region);
                VK_CHECK(m_vk.endCommandBuffer(*copyCmdBuffer));
@@ -478,6 +479,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -585,7 +587,7 @@ void Image::upload (vk::VkQueue                                     queue,
        DE_ASSERT(layout == vk::VK_IMAGE_LAYOUT_GENERAL || layout == vk::VK_IMAGE_LAYOUT_UNDEFINED || layout == vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
 
        de::SharedPtr<Image> stagingResource;
-       vk::VkExtent3D extent = {width, height, depth};
+       vk::VkExtent3D extent = {(deUint32)width, (deUint32)height, (deUint32)depth};
        ImageCreateInfo stagingResourceCreateInfo(
                type, m_format, extent, 1, 1, vk::VK_SAMPLE_COUNT_1_BIT,
                vk::VK_IMAGE_TILING_LINEAR, vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
@@ -636,9 +638,10 @@ void Image::upload (vk::VkQueue                                    queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                transition2DImage(m_vk, *copyCmdBuffer, stagingResource->object(), aspect, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL);
@@ -647,7 +650,7 @@ void Image::upload (vk::VkQueue                                     queue,
                                                                        zeroOffset,
                                                                        {aspect, mipLevel, arrayElement, 1},
                                                                        offset,
-                                                                       {width, height, depth}};
+                                                                       {(deUint32)width, (deUint32)height, (deUint32)depth}};
 
                m_vk.cmdCopyImage(*copyCmdBuffer, stagingResource->object(),
                                                                vk::VK_IMAGE_LAYOUT_GENERAL, object(), layout, 1, &region);
@@ -659,6 +662,7 @@ void Image::upload (vk::VkQueue                                     queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -755,16 +759,17 @@ void Image::uploadUsingBuffer (vk::VkQueue                                        queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                vk::VkBufferImageCopy region = {
                        0, 0, 0,
                        { aspect, mipLevel, arrayElement, 1 },
                        offset,
-                       { width, height, depth }
+                       { (deUint32)width, (deUint32)height, (deUint32)depth }
                };
 
                m_vk.cmdCopyBufferToImage(*copyCmdBuffer, stagingResource->object(),
@@ -777,6 +782,7 @@ void Image::uploadUsingBuffer (vk::VkQueue                                  queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -903,9 +909,10 @@ void transition2DImage (const vk::DeviceInterface& vk,
        barrier.subresourceRange.baseArrayLayer = 0;
        barrier.subresourceRange.layerCount             = 1;
 
-       void* barriers[] = { &barrier };
-
-       vk.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                 0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                 0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                 1, &barrier);
 }
 
 void initialTransitionColor2DImage (const vk::DeviceInterface &vk, vk::VkCommandBuffer cmdBuffer, vk::VkImage image, vk::VkImageLayout layout)
index 12865c0..61a663f 100644 (file)
@@ -59,7 +59,6 @@ public:
        DepthBiasBaseCase (Context& context, const char* vertexShaderName, const char* fragmentShaderName)
                : TestInstance                                          (context)
                , m_colorAttachmentFormat                       (vk::VK_FORMAT_R8G8B8A8_UNORM)
-               , m_depthStencilAttachmentFormat        (vk::VK_FORMAT_D24_UNORM_S8_UINT)
                , m_topology                                            (vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
                , m_vk                                                          (context.getDeviceInterface())
                , m_vertexShaderName                            (vertexShaderName)
@@ -111,6 +110,25 @@ protected:
        {
                const vk::VkDevice device       = m_context.getDevice();
 
+               vk::VkFormatProperties formatProperties;
+               // check for VK_FORMAT_D24_UNORM_S8_UINT support
+               m_context.getInstanceInterface().getPhysicalDeviceFormatProperties(m_context.getPhysicalDevice(), vk::VK_FORMAT_D24_UNORM_S8_UINT, &formatProperties);
+               if (formatProperties.optimalTilingFeatures & vk::VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
+               {
+                       m_depthStencilAttachmentFormat = vk::VK_FORMAT_D24_UNORM_S8_UINT;
+               }
+               else
+               {
+                       // check for VK_FORMAT_D32_SFLOAT_S8_UINT support
+                       m_context.getInstanceInterface().getPhysicalDeviceFormatProperties(m_context.getPhysicalDevice(), vk::VK_FORMAT_D32_SFLOAT_S8_UINT, &formatProperties);
+                       if (formatProperties.optimalTilingFeatures & vk::VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
+                       {
+                               m_depthStencilAttachmentFormat = vk::VK_FORMAT_D32_SFLOAT_S8_UINT;
+                       }
+                       else
+                               throw tcu::NotSupportedError("No valid depth stencil attachment available");
+               }
+
                const PipelineLayoutCreateInfo pipelineLayoutCreateInfo;
                m_pipelineLayout                        = vk::createPipelineLayout(m_vk, device, &pipelineLayoutCreateInfo);
 
@@ -304,20 +322,20 @@ protected:
                viewport.minDepth = 0.0f;
                viewport.maxDepth = 1.0f;
 
-               m_vk.cmdSetViewport(*m_cmdBuffer, 1, &viewport);
+               m_vk.cmdSetViewport(*m_cmdBuffer, 0, 1, &viewport);
 
                vk::VkRect2D scissor;
                scissor.offset.x = 0;
                scissor.offset.y = 0;
                scissor.extent.width = width;
                scissor.extent.height = height;
-               m_vk.cmdSetScissor(*m_cmdBuffer, 1, &scissor);
+               m_vk.cmdSetScissor(*m_cmdBuffer, 0, 1, &scissor);
        }
 
        void setDynamicViewportState (const deUint32 viewportCount, const vk::VkViewport* pViewports, const vk::VkRect2D* pScissors)
        {
-               m_vk.cmdSetViewport(*m_cmdBuffer, viewportCount, pViewports);
-               m_vk.cmdSetScissor(*m_cmdBuffer, viewportCount, pScissors);
+               m_vk.cmdSetViewport(*m_cmdBuffer, 0, viewportCount, pViewports);
+               m_vk.cmdSetScissor(*m_cmdBuffer, 0, viewportCount, pScissors);
        }
 
        void setDynamicRasterizationState (const float lineWidth = 1.0f,
@@ -413,6 +431,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -518,6 +537,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -574,6 +594,14 @@ public:
        LineWidthParamTestInstance (Context& context, ShaderMap shaders)
                : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
        {
+               // Check if line width test is supported
+               {
+                       const vk::VkPhysicalDeviceFeatures& deviceFeatures = m_context.getDeviceFeatures();
+
+                       if (!deviceFeatures.wideLines)
+                               throw tcu::NotSupportedError("Line width test is unsupported");
+               }
+
                m_topology = vk::VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
 
                m_data.push_back(PositionColorVertex(tcu::Vec4(-1.0f, 0.0f, 0.0f, 1.0f), tcu::RGBA::green().toVec()));
@@ -615,6 +643,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
index acfdbc0..bd835cf 100644 (file)
@@ -108,6 +108,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -242,6 +243,17 @@ public:
                : DynamicStateBaseClass (context, shaders[glu::SHADERTYPE_VERTEX], shaders[glu::SHADERTYPE_FRAGMENT])
                , m_geometryShaderName  (shaders[glu::SHADERTYPE_GEOMETRY])
        {
+               // Check geometry shader support
+               {
+                       const vk::VkPhysicalDeviceFeatures& deviceFeatures = m_context.getDeviceFeatures();
+
+                       if (!deviceFeatures.multiViewport)
+                               throw tcu::NotSupportedError("Multi-viewport is not supported");
+
+                       if (!deviceFeatures.geometryShader)
+                               throw tcu::NotSupportedError("Geometry shaders are not supported");
+               }
+
                for (int i = 0; i < 4; i++)
                {
                        m_data.push_back(PositionColorVertex(tcu::Vec4(-1.0f, 1.0f, (float)i / 3.0f, 1.0f), tcu::RGBA::green().toVec()));
@@ -255,17 +267,6 @@ public:
 
        virtual void initPipeline (const vk::VkDevice device)
        {
-               // Check geometry shader support
-               {
-                       const vk::VkPhysicalDeviceFeatures& deviceFeatures = m_context.getDeviceFeatures();
-
-                       if (!deviceFeatures.multiViewport)
-                               throw tcu::NotSupportedError("Multi-viewport is not supported");
-
-                       if (!deviceFeatures.geometryShader)
-                               throw tcu::NotSupportedError("Geometry shaders are not supported");
-               }
-
                const vk::Unique<vk::VkShaderModule> vs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0));
                const vk::Unique<vk::VkShaderModule> gs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_geometryShaderName), 0));
                const vk::Unique<vk::VkShaderModule> fs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0));
@@ -339,6 +340,7 @@ public:
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_cmdBuffer.get(),                                     // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
index 2914a4f..11fee12 100644 (file)
@@ -67,25 +67,25 @@ namespace image
 namespace
 {
 
-inline VkImageCreateInfo makeImageCreateInfo (const Texture& texture, const VkFormat format, const VkImageUsageFlags usage)
+inline VkImageCreateInfo makeImageCreateInfo (const Texture& texture, const VkFormat format, const VkImageUsageFlags usage, const VkImageCreateFlags flags)
 {
        const VkImageCreateInfo imageParams =
        {
-               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,                                                                                            // VkStructureType                      sType;
-               DE_NULL,                                                                                                                                                        // const void*                          pNext;
-               (isCube(texture) ? (VkImageCreateFlags)VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT : 0u),       // VkImageCreateFlags           flags;
-               mapImageType(texture.type()),                                                                                                           // VkImageType                          imageType;
-               format,                                                                                                                                                         // VkFormat                                     format;
-               makeExtent3D(texture.layerSize()),                                                                                                      // VkExtent3D                           extent;
-               1u,                                                                                                                                                                     // deUint32                                     mipLevels;
-               (deUint32)texture.numLayers(),                                                                                                          // deUint32                                     arrayLayers;
-               VK_SAMPLE_COUNT_1_BIT,                                                                                                                          // VkSampleCountFlagBits        samples;
-               VK_IMAGE_TILING_OPTIMAL,                                                                                                                        // VkImageTiling                        tiling;
-               usage,                                                                                                                                                          // VkImageUsageFlags            usage;
-               VK_SHARING_MODE_EXCLUSIVE,                                                                                                                      // VkSharingMode                        sharingMode;
-               0u,                                                                                                                                                                     // deUint32                                     queueFamilyIndexCount;
-               DE_NULL,                                                                                                                                                        // const deUint32*                      pQueueFamilyIndices;
-               VK_IMAGE_LAYOUT_UNDEFINED,                                                                                                                      // VkImageLayout                        initialLayout;
+               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,                                                                                                            // VkStructureType                      sType;
+               DE_NULL,                                                                                                                                                                        // const void*                          pNext;
+               (isCube(texture) ? (VkImageCreateFlags)VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT : 0u) | flags,       // VkImageCreateFlags           flags;
+               mapImageType(texture.type()),                                                                                                                           // VkImageType                          imageType;
+               format,                                                                                                                                                                         // VkFormat                                     format;
+               makeExtent3D(texture.layerSize()),                                                                                                                      // VkExtent3D                           extent;
+               1u,                                                                                                                                                                                     // deUint32                                     mipLevels;
+               (deUint32)texture.numLayers(),                                                                                                                          // deUint32                                     arrayLayers;
+               VK_SAMPLE_COUNT_1_BIT,                                                                                                                                          // VkSampleCountFlagBits        samples;
+               VK_IMAGE_TILING_OPTIMAL,                                                                                                                                        // VkImageTiling                        tiling;
+               usage,                                                                                                                                                                          // VkImageUsageFlags            usage;
+               VK_SHARING_MODE_EXCLUSIVE,                                                                                                                                      // VkSharingMode                        sharingMode;
+               0u,                                                                                                                                                                                     // deUint32                                     queueFamilyIndexCount;
+               DE_NULL,                                                                                                                                                                        // const deUint32*                      pQueueFamilyIndices;
+               VK_IMAGE_LAYOUT_UNDEFINED,                                                                                                                                      // VkImageLayout                        initialLayout;
        };
        return imageParams;
 }
@@ -253,13 +253,13 @@ void replaceSnormReinterpretValues (const tcu::PixelBufferAccess access)
        {
                const tcu::IVec4 color(access.getPixelInt(x, y, z));
                tcu::IVec4 newColor = color;
-       
+
                for (int i = 0; i < 4; ++i)
                {
                        const deInt32 oldColor(color[i]);
                        if (oldColor == -128) newColor[i] = -127;
                }
-       
+
                if (newColor != color)
                access.setPixel(newColor, x, y, z);
        }
@@ -355,9 +355,7 @@ void commandImageWriteBarrierBetweenShaderInvocations (Context& context, const V
                VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_GENERAL,
                image, fullImageSubresourceRange);
 
-       const void* const barriers[] = { &shaderWriteBarrier };
-
-       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &shaderWriteBarrier);
 }
 
 void commandBufferWriteBarrierBeforeHostRead (Context& context, const VkCommandBuffer cmdBuffer, const VkBuffer buffer, const VkDeviceSize bufferSizeBytes)
@@ -368,9 +366,7 @@ void commandBufferWriteBarrierBeforeHostRead (Context& context, const VkCommandB
                VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT,
                buffer, 0ull, bufferSizeBytes);
 
-       const void* const barriers[] = { &shaderWriteBarrier };
-
-       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &shaderWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 }
 
 //! Copy all layers of an image to a buffer.
@@ -389,19 +385,15 @@ void commandCopyImageToBuffer (Context&                                   context,
                VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
                image, fullImageSubresourceRange);
 
-       const void* const barriersBeforeCopy[] = { &prepareForTransferBarrier };
-
        const VkBufferImageCopy copyRegion = makeBufferImageCopy(texture);
 
        const VkBufferMemoryBarrier copyBarrier = makeBufferMemoryBarrier(
                VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT,
                buffer, 0ull, bufferSizeBytes);
 
-       const void* const barriersAfterCopy[] = { &copyBarrier };
-
-       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersBeforeCopy), barriersBeforeCopy);
+       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &prepareForTransferBarrier);
        vk.cmdCopyImageToBuffer(cmdBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, buffer, 1u, &copyRegion);
-       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersAfterCopy), barriersAfterCopy);
+       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &copyBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 }
 
 //! Minimum chunk size is determined by the offset alignment requirements.
@@ -682,7 +674,7 @@ ImageStoreTestInstance::ImageStoreTestInstance (Context&            context,
 
        m_image = de::MovePtr<Image>(new Image(
                vk, device, allocator,
-               makeImageCreateInfo(m_texture, m_format, VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT),
+               makeImageCreateInfo(m_texture, m_format, VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT, 0u),
                MemoryRequirement::Any));
 
        // This buffer will be used to pass constants to the shader
@@ -781,9 +773,7 @@ void ImageStoreTestInstance::commandBeforeCompute (const VkCommandBuffer cmdBuff
                VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
                m_constantsBuffer->get(), 0ull, constantsBufferSize);
 
-       const void* const barriersBefore[] = { &writeConstantsBarrier, &setImageLayoutBarrier };
-
-       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersBefore), barriersBefore);
+       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &writeConstantsBarrier, 1, &setImageLayoutBarrier);
 }
 
 void ImageStoreTestInstance::commandBetweenShaderInvocations (const VkCommandBuffer cmdBuffer)
@@ -1074,18 +1064,19 @@ ImageLoadStoreTestInstance::ImageLoadStoreTestInstance (Context&                context,
        : LoadStoreTestInstance (context, texture, format, imageFormat, singleLayerBind)
        , m_perLayerData                (texture.numLayers())
 {
-       const DeviceInterface&  vk                                      = m_context.getDeviceInterface();
-       const VkDevice                  device                          = m_context.getDevice();
-       Allocator&                              allocator                       = m_context.getDefaultAllocator();
+       const DeviceInterface&          vk                                      = m_context.getDeviceInterface();
+       const VkDevice                          device                          = m_context.getDevice();
+       Allocator&                                      allocator                       = m_context.getDefaultAllocator();
+       const VkImageCreateFlags        imageFlags                      = (m_format == m_imageFormat ? 0u : (VkImageCreateFlags)VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT);
 
        m_imageSrc = de::MovePtr<Image>(new Image(
                vk, device, allocator,
-               makeImageCreateInfo(m_texture, m_imageFormat, VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT),
+               makeImageCreateInfo(m_texture, m_imageFormat, VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, imageFlags),
                MemoryRequirement::Any));
 
        m_imageDst = de::MovePtr<Image>(new Image(
                vk, device, allocator,
-               makeImageCreateInfo(m_texture, m_imageFormat, VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT),
+               makeImageCreateInfo(m_texture, m_imageFormat, VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT, imageFlags),
                MemoryRequirement::Any));
 }
 
@@ -1159,24 +1150,24 @@ void ImageLoadStoreTestInstance::commandBeforeCompute (const VkCommandBuffer cmd
 
        const VkImageSubresourceRange fullImageSubresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, m_texture.numLayers());
        {
-               const VkImageMemoryBarrier barrierSetSrcImageLayout = makeImageMemoryBarrier(
-                       0u, 0u,
-                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                       m_imageSrc->get(), fullImageSubresourceRange);
-
-               const VkImageMemoryBarrier barrierSetDstImageLayout = makeImageMemoryBarrier(
-                       0u, 0u,
-                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
-                       m_imageDst->get(), fullImageSubresourceRange);
+               const VkImageMemoryBarrier preCopyImageBarriers[] =
+               {
+                       makeImageMemoryBarrier(
+                               0u, 0u,
+                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+                               m_imageSrc->get(), fullImageSubresourceRange),
+                       makeImageMemoryBarrier(
+                               0u, 0u,
+                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
+                               m_imageDst->get(), fullImageSubresourceRange)
+               };
 
                const VkBufferMemoryBarrier barrierFlushHostWriteBeforeCopy = makeBufferMemoryBarrier(
                        VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
                        m_imageBuffer->get(), 0ull, m_imageSizeBytes);
 
-               const void* const barriers[] = { &barrierSetSrcImageLayout, &barrierSetDstImageLayout, &barrierFlushHostWriteBeforeCopy };
-
                vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_TRANSFER_BIT,
-                       DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &barrierFlushHostWriteBeforeCopy, DE_LENGTH_OF_ARRAY(preCopyImageBarriers), preCopyImageBarriers);
        }
        {
                const VkImageMemoryBarrier barrierAfterCopy = makeImageMemoryBarrier(
@@ -1184,12 +1175,10 @@ void ImageLoadStoreTestInstance::commandBeforeCompute (const VkCommandBuffer cmd
                        VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
                        m_imageSrc->get(), fullImageSubresourceRange);
 
-               const void* const barriers[] = { &barrierAfterCopy };
-
                const VkBufferImageCopy copyRegion = makeBufferImageCopy(m_texture);
 
                vk.cmdCopyBufferToImage(cmdBuffer, m_imageBuffer->get(), m_imageSrc->get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
-               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &barrierAfterCopy);
        }
 }
 
index cc04fba..dadc7d5 100644 (file)
@@ -598,8 +598,7 @@ void MemoryQualifierInstanceImage::commandsBeforeCompute (const VkCommandBuffer
                                                                 m_image->get(),
                                                                 subresourceRange);
 
-       const void* preComputeBarriers[] = { &imageLayoutBarrier };
-       deviceInterface.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preComputeBarriers), preComputeBarriers);
+       deviceInterface.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imageLayoutBarrier);
 }
 
 void MemoryQualifierInstanceImage::commandsAfterCompute (const VkCommandBuffer cmdBuffer, const VkDeviceSize   bufferSizeInBytes) const
@@ -615,8 +614,7 @@ void MemoryQualifierInstanceImage::commandsAfterCompute (const VkCommandBuffer c
                                                                 m_image->get(),
                                                                 subresourceRange);
 
-       const void* preCopyBarriers[] = { &imagePreCopyBarrier };
-       deviceInterface.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(preCopyBarriers), preCopyBarriers);
+       deviceInterface.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imagePreCopyBarrier);
 
        const VkBufferImageCopy copyParams = makeBufferImageCopy(vk::makeExtent3D(m_imageSize.x(), m_imageSize.y(), m_imageSize.z()), m_imageSize.w());
        deviceInterface.cmdCopyImageToBuffer(cmdBuffer, m_image->get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, m_buffer->get(), 1u, &copyParams);
@@ -628,8 +626,7 @@ void MemoryQualifierInstanceImage::commandsAfterCompute (const VkCommandBuffer c
                                                                  0ull,
                                                                  bufferSizeInBytes);
 
-       const void* postCopyBarriers[] = { &bufferPostCopyBarrier };
-       deviceInterface.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(postCopyBarriers), postCopyBarriers);
+       deviceInterface.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferPostCopyBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 }
 
 class MemoryQualifierInstanceBuffer : public MemoryQualifierInstanceBase
@@ -708,8 +705,7 @@ void MemoryQualifierInstanceBuffer::commandsAfterCompute (const VkCommandBuffer
                                                                  0ull,
                                                                  bufferSizeInBytes);
 
-       const void* barriers[] = { &shaderWriteBarrier };
-       deviceInterface.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       deviceInterface.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &shaderWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 }
 
 TestInstance* MemoryQualifierTestCase::createInstance (Context& context) const
index 5db47da..e704871 100644 (file)
@@ -303,8 +303,6 @@ tcu::TestStatus SizeTestInstance::iterate (void)
                VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT,
                m_resultBuffer->get(), 0ull, m_resultBufferSizeBytes);
 
-       const void* const barriersAfter[] = { &shaderWriteBarrier };
-
        // Create the pipeline.
 
        const Unique<VkShaderModule> shaderModule(createShaderModule(vk, device, m_context.getBinaryCollection().get("comp"), 0));
@@ -325,7 +323,7 @@ tcu::TestStatus SizeTestInstance::iterate (void)
 
        commandBeforeCompute(*cmdBuffer);
        vk.cmdDispatch(*cmdBuffer, 1, 1, 1);
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriersAfter), barriersAfter);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &shaderWriteBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
 
        endCommandBuffer(vk, *cmdBuffer);
 
@@ -418,9 +416,7 @@ void ImageSizeTestInstance::commandBeforeCompute (const VkCommandBuffer cmdBuffe
                VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
                m_image->get(), subresourceRange);
 
-       const void* const barriers[] = { &barrierSetImageLayout };
-
-       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &barrierSetImageLayout);
 }
 
 class BufferSizeTestInstance : public SizeTestInstance
index d22e4cb..add8b64 100644 (file)
@@ -276,12 +276,7 @@ void beginCommandBuffer (const DeviceInterface& vk, const VkCommandBuffer comman
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                DE_NULL,                                                                                // const void*                                          pNext;
                0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-               DE_FALSE,                                                                               // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u,                                                                                             // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
        VK_CHECK(vk.beginCommandBuffer(commandBuffer, &commandBufBeginParams));
 }
@@ -309,6 +304,7 @@ void submitCommandsAndWait (const DeviceInterface&  vk,
                DE_NULL,                                                        // const void*                          pNext;
                0u,                                                                     // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                                     // deUint32                                     commandBufferCount;
                &commandBuffer,                                         // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                                     // deUint32                                     signalSemaphoreCount;
index 3582487..af0cac0 100644 (file)
@@ -118,7 +118,7 @@ tcu::TestStatus AllocateFreeTestInstance::iterate (void)
        if (m_memoryTypeIndex == 0)
        {
                log << TestLog::Message << "Memory allocation count: " << m_config.memoryAllocationCount << TestLog::EndMessage;
-               log << TestLog::Message << "Single allocation size: " << (m_config.memorySize ? de::toString(*m_config.memorySize) : de::toString(100.0f * (*m_config.memoryPercentage)) + " of heap size.D") << TestLog::EndMessage;
+               log << TestLog::Message << "Single allocation size: " << (m_config.memorySize ? de::toString(*m_config.memorySize) : de::toString(100.0f * (*m_config.memoryPercentage)) + " percent of the heap size.") << TestLog::EndMessage;
 
                if (m_config.order == TestConfig::ALLOC_REVERSE_FREE)
                        log << TestLog::Message << "Memory is freed in reversed order. " << TestLog::EndMessage;
@@ -475,9 +475,9 @@ tcu::TestCaseGroup* createAllocationTests (tcu::TestContext& testCtx)
                { "1MiB", 1*MiB }
        };
 
-       const float allocationPercents[] =
+       const int allocationPercents[] =
        {
-               0.01f
+               1
        };
 
        const int allocationCounts[] =
@@ -552,8 +552,8 @@ tcu::TestCaseGroup* createAllocationTests (tcu::TestContext& testCtx)
 
                for (size_t allocationPercentNdx = 0; allocationPercentNdx < DE_LENGTH_OF_ARRAY(allocationPercents); allocationPercentNdx++)
                {
-                       const float                                             allocationPercent       = allocationPercents[allocationPercentNdx];
-                       de::MovePtr<tcu::TestCaseGroup> percentGroup            (new tcu::TestCaseGroup(testCtx, ("percent_" + de::toString((int)(100.0f * allocationPercent))).c_str(), ("Test different allocation percents " + de::toString(allocationPercent * 100.0f)).c_str()));
+                       const int                                               allocationPercent       = allocationPercents[allocationPercentNdx];
+                       de::MovePtr<tcu::TestCaseGroup> percentGroup            (new tcu::TestCaseGroup(testCtx, ("percent_" + de::toString(allocationPercent)).c_str(), ("Test different allocation percents " + de::toString(allocationPercent)).c_str()));
 
                        for (size_t orderNdx = 0; orderNdx < DE_LENGTH_OF_ARRAY(orders); orderNdx++)
                        {
@@ -566,17 +566,17 @@ tcu::TestCaseGroup* createAllocationTests (tcu::TestContext& testCtx)
                                {
                                        const int allocationCount = allocationCounts[allocationCountNdx];
 
-                                       if ((allocationCount != -1) && ((float)allocationCount * allocationPercent >= 1.00f / 8.00f))
+                                       if ((allocationCount != -1) && ((float)allocationCount * (float)allocationPercent >= 1.00f / 8.00f))
                                                continue;
 
                                        TestConfig config;
 
-                                       config.memoryPercentage                 = allocationPercent;
+                                       config.memoryPercentage                 = (float)allocationPercent / 100.0f;
                                        config.order                                    = order;
 
                                        if (allocationCount == -1)
                                        {
-                                               config.memoryAllocationCount    = (int)((1.00f / 8.00f) / allocationPercent);
+                                               config.memoryAllocationCount    = (int)((1.00f / 8.00f) / ((float)allocationPercent / 100.0f));
 
                                                if (config.memoryAllocationCount == 0
                                                        || config.memoryAllocationCount == 1
index 196906d..4ac9b4a 100644 (file)
@@ -92,6 +92,7 @@ namespace
 enum
 {
        ALL_PIPELINE_STAGES = vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
+                                               | vk::VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
                                                | vk::VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
                                                | vk::VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
                                                | vk::VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
@@ -215,6 +216,7 @@ enum Access
 enum PipelineStage
 {
        PIPELINESTAGE_TOP_OF_PIPE_BIT = 0,
+       PIPELINESTAGE_BOTTOM_OF_PIPE_BIT,
        PIPELINESTAGE_DRAW_INDIRECT_BIT,
        PIPELINESTAGE_VERTEX_INPUT_BIT,
        PIPELINESTAGE_VERTEX_SHADER_BIT,
@@ -237,6 +239,7 @@ PipelineStage pipelineStageFlagToPipelineStage (vk::VkPipelineStageFlagBits flag
        switch (flags)
        {
                case vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT:                                             return PIPELINESTAGE_TOP_OF_PIPE_BIT;
+               case vk::VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT:                                  return PIPELINESTAGE_BOTTOM_OF_PIPE_BIT;
                case vk::VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT:                                   return PIPELINESTAGE_DRAW_INDIRECT_BIT;
                case vk::VK_PIPELINE_STAGE_VERTEX_INPUT_BIT:                                    return PIPELINESTAGE_VERTEX_INPUT_BIT;
                case vk::VK_PIPELINE_STAGE_VERTEX_SHADER_BIT:                                   return PIPELINESTAGE_VERTEX_SHADER_BIT;
@@ -500,11 +503,10 @@ vk::Move<vk::VkCommandBuffer> createBeginCommandBuffer (const vk::DeviceInterfac
                                                                                                                vk::VkCommandPool                       pool,
                                                                                                                vk::VkCommandBufferLevel        level)
 {
-       const vk::VkCommandBufferBeginInfo beginInfo =
+       const vk::VkCommandBufferInheritanceInfo        inheritInfo     =
        {
-               vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+               vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
                DE_NULL,
-               0u,
                0,
                0,
                0,
@@ -512,6 +514,13 @@ vk::Move<vk::VkCommandBuffer> createBeginCommandBuffer (const vk::DeviceInterfac
                0u,
                0u
        };
+       const vk::VkCommandBufferBeginInfo                      beginInfo =
+       {
+               vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+               DE_NULL,
+               0u,
+               (level == vk::VK_COMMAND_BUFFER_LEVEL_SECONDARY ? &inheritInfo : (const vk::VkCommandBufferInheritanceInfo*)DE_NULL),
+       };
 
        vk::Move<vk::VkCommandBuffer> commandBuffer (createCommandBuffer(vkd, device, pool, level));
 
@@ -687,6 +696,7 @@ void queueRun (const vk::DeviceInterface&   vkd,
 
                0,
                DE_NULL,
+               (const vk::VkPipelineStageFlags*)DE_NULL,
 
                1,
                &commandBuffer,
@@ -908,7 +918,7 @@ IVec2 findImageSizeWxHx4 (vk::VkDeviceSize size)
 IVec2 findMaxRGBA8ImageSize (const vk::DeviceInterface&        vkd,
                                                         vk::VkDevice                           device,
 
-                                                        vk::VkBufferUsageFlags         usage,
+                                                        vk::VkImageUsageFlags          usage,
                                                         vk::VkSharingMode                      sharingMode,
                                                         const vector<deUint32>&        queueFamilies,
 
@@ -938,9 +948,9 @@ IVec2 findMaxRGBA8ImageSize (const vk::DeviceInterface&     vkd,
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
                        {
-                               currentSize[0],
-                               currentSize[1],
-                               1,
+                               (deUint32)currentSize[0],
+                               (deUint32)currentSize[1],
+                               1u,
                        },
                        1u, 1u,
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -1642,9 +1652,9 @@ void CreateImage::prepare (PrepareContext& context)
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1,
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u,
                        },
                        1u, 1u,
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -1900,6 +1910,7 @@ void SubmitCommandBuffer::execute (ExecuteContext& context)
 
                0,
                DE_NULL,
+               (const vk::VkPipelineStageFlags*)DE_NULL,
 
                1,
                &cmd,
@@ -1995,6 +2006,8 @@ void PipelineBarrier::submit (SubmitContext& context)
        const vk::DeviceInterface&      vkd     = context.getContext().getDeviceInterface();
        const vk::VkCommandBuffer       cmd     = context.getCommandBuffer();
 
+       // \todo [2016-01-08 pyry] This could be cleaned up thanks to latest API changes
+
        switch (m_type)
        {
                case TYPE_GLOBAL:
@@ -2007,12 +2020,8 @@ void PipelineBarrier::submit (SubmitContext& context)
                                m_srcAccesses,
                                m_dstAccesses
                        };
-                       const void* const                       barriers[]      =
-                       {
-                               &barrier
-                       };
 
-                       vkd.cmdPipelineBarrier(cmd, m_srcStages, m_dstStages, 0, 1, &barriers[0]);
+                       vkd.cmdPipelineBarrier(cmd, m_srcStages, m_dstStages, (vk::VkDependencyFlags)0, 1, &barrier, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
                        break;
                }
 
@@ -2033,12 +2042,8 @@ void PipelineBarrier::submit (SubmitContext& context)
                                0,
                                vk::VK_WHOLE_SIZE
                        };
-                       const void* const                       barriers[]      =
-                       {
-                               &barrier
-                       };
 
-                       vkd.cmdPipelineBarrier(cmd, m_srcStages, m_dstStages, 0, 1, &barriers[0]);
+                       vkd.cmdPipelineBarrier(cmd, m_srcStages, m_dstStages, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &barrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
                        break;
                }
 
@@ -2046,7 +2051,7 @@ void PipelineBarrier::submit (SubmitContext& context)
                {
                        const vk::VkImageMemoryBarrier  barrier         =
                        {
-                               vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+                               vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
                                DE_NULL,
 
                                m_srcAccesses,
@@ -2065,12 +2070,8 @@ void PipelineBarrier::submit (SubmitContext& context)
                                        0, 1
                                }
                        };
-                       const void* const                       barriers[]      =
-                       {
-                               &barrier
-                       };
 
-                       vkd.cmdPipelineBarrier(cmd, m_srcStages, m_dstStages, 0, 1, &barriers[0]);
+                       vkd.cmdPipelineBarrier(cmd, m_srcStages, m_dstStages, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &barrier);
                        break;
                }
 
@@ -2086,6 +2087,7 @@ public:
                                                ~ImageTransition        (void) {}
        const char*                     getName                         (void) const { return "ImageTransition"; }
 
+       void                            prepare                         (PrepareContext& context);
        void                            logSubmit                       (TestLog& log, size_t commandIndex) const;
        void                            submit                          (SubmitContext& context);
 };
@@ -2095,6 +2097,11 @@ void ImageTransition::logSubmit (TestLog& log, size_t commandIndex) const
        log << TestLog::Message << commandIndex << ":" << getName() << " Use pipeline barrier to trasition to VK_IMAGE_LAYOUT_GENERAL." << TestLog::EndMessage;
 }
 
+void ImageTransition::prepare (PrepareContext& context)
+{
+       context.setImageLayout(vk::VK_IMAGE_LAYOUT_GENERAL);
+}
+
 void ImageTransition::submit (SubmitContext& context)
 {
        const vk::DeviceInterface&              vkd                     = context.getContext().getDeviceInterface();
@@ -2120,12 +2127,8 @@ void ImageTransition::submit (SubmitContext& context)
                        0u, 1u
                }
        };
-       const void* const                               barriers[]      =
-       {
-               &barrier
-       };
 
-       vkd.cmdPipelineBarrier(cmd, ALL_PIPELINE_STAGES, ALL_PIPELINE_STAGES, 0, 1, &barriers[0]);
+       vkd.cmdPipelineBarrier(cmd, ALL_PIPELINE_STAGES, ALL_PIPELINE_STAGES, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &barrier);
 }
 
 class FillBuffer : public CmdCommand
@@ -2317,12 +2320,7 @@ void BufferCopyToBuffer::verify (VerifyContext& context, size_t commandIndex)
                vk::VK_WHOLE_SIZE
        };
 
-       const void* barriers[] =
-       {
-               &barrier
-       };
-
-       vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &barriers[0]);
+       vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &barrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
 
        VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
        queueRun(vkd, queue, *commandBuffer);
@@ -2494,9 +2492,9 @@ void BufferCopyToImage::prepare (PrepareContext& context)
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1,
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u,
                        },
                        1, 1, // mipLevels, arrayLayers
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -2540,12 +2538,8 @@ void BufferCopyToImage::prepare (PrepareContext& context)
                                1       // Layer count
                        }
                };
-               const void*                                                             barriers[]              =
-               {
-                       &barrier
-               };
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &barriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &barrier);
 
                VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
                queueRun(vkd, queue, *commandBuffer);
@@ -2573,9 +2567,9 @@ void BufferCopyToImage::submit (SubmitContext& context)
                },
                { 0, 0, 0 },
                {
-                       m_imageWidth,
-                       m_imageHeight,
-                       1
+                       (deUint32)m_imageWidth,
+                       (deUint32)m_imageHeight,
+                       1u
                }
        };
 
@@ -2635,10 +2629,6 @@ void BufferCopyToImage::verify (VerifyContext& context, size_t commandIndex)
                        vk::VK_WHOLE_SIZE
                };
 
-               const void* preBarriers[] =
-               {
-                       &imageBarrier
-               };
                const vk::VkBufferImageCopy     region =
                {
                        0,
@@ -2651,19 +2641,15 @@ void BufferCopyToImage::verify (VerifyContext& context, size_t commandIndex)
                        },
                        { 0, 0, 0 },
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u
                        }
                };
-               const void* postBarriers[] =
-               {
-                       &bufferBarrier
-               };
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &preBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
                vkd.cmdCopyImageToBuffer(*commandBuffer, *m_dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *dstBuffer, 1, &region);
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &postBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
        }
 
        VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
@@ -2753,9 +2739,9 @@ void BufferCopyFromImage::prepare (PrepareContext& context)
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1,
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u,
                        },
                        1, 1, // mipLevels, arrayLayers
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -2775,7 +2761,7 @@ void BufferCopyFromImage::prepare (PrepareContext& context)
        m_memory = bindImageMemory(vki, vkd, physicalDevice, device, *m_srcImage, 0);
 
        {
-               const vk::Unique<vk::VkBuffer>                  srcBuffer               (createBuffer(vkd, device, 4 * m_imageWidth * m_imageHeight, vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT, vk::VK_SHARING_MODE_EXCLUSIVE, queueFamilies));
+               const vk::Unique<vk::VkBuffer>                  srcBuffer               (createBuffer(vkd, device, 4 * m_imageWidth * m_imageHeight, vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT, vk::VK_SHARING_MODE_EXCLUSIVE, queueFamilies));
                const vk::Unique<vk::VkDeviceMemory>    memory                  (bindBufferMemory(vki, vkd, physicalDevice, device, *srcBuffer, vk::VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT));
                const vk::Unique<vk::VkCommandBuffer>   commandBuffer   (createBeginCommandBuffer(vkd, device, commandPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY));
                const vk::VkImageMemoryBarrier                  preImageBarrier =
@@ -2824,14 +2810,6 @@ void BufferCopyFromImage::prepare (PrepareContext& context)
                                1       // Layer count
                        }
                };
-               const void*                                                             preBarriers[]           =
-               {
-                       &preImageBarrier
-               };
-               const void*                                                             postBarriers[]          =
-               {
-                       &postImageBarrier
-               };
                const vk::VkBufferImageCopy                             region                          =
                {
                        0,
@@ -2844,9 +2822,9 @@ void BufferCopyFromImage::prepare (PrepareContext& context)
                        },
                        { 0, 0, 0 },
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u
                        }
                };
 
@@ -2865,9 +2843,9 @@ void BufferCopyFromImage::prepare (PrepareContext& context)
                        vkd.unmapMemory(device, *memory);
                }
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &preBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &preImageBarrier);
                vkd.cmdCopyBufferToImage(*commandBuffer, *srcBuffer, *m_srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &postBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &postImageBarrier);
 
                VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
                queueRun(vkd, queue, *commandBuffer);
@@ -2895,9 +2873,9 @@ void BufferCopyFromImage::submit (SubmitContext& context)
                },
                { 0, 0, 0 },
                {
-                       m_imageWidth,
-                       m_imageHeight,
-                       1
+                       (deUint32)m_imageWidth,
+                       (deUint32)m_imageHeight,
+                       1u
                }
        };
 
@@ -2977,9 +2955,9 @@ void ImageCopyToBuffer::submit (SubmitContext& context)
                },
                { 0, 0, 0 },
                {
-                       m_imageWidth,
-                       m_imageHeight,
-                       1
+                       (deUint32)m_imageWidth,
+                       (deUint32)m_imageHeight,
+                       1u
                }
        };
 
@@ -3010,12 +2988,7 @@ void ImageCopyToBuffer::verify (VerifyContext& context, size_t commandIndex)
                vk::VK_WHOLE_SIZE
        };
 
-       const void* barriers[] =
-       {
-               &barrier
-       };
-
-       vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &barriers[0]);
+       vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &barrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
 
        VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
        queueRun(vkd, queue, *commandBuffer);
@@ -3115,9 +3088,9 @@ void ImageCopyFromBuffer::submit (SubmitContext& context)
                },
                { 0, 0, 0 },
                {
-                       m_imageWidth,
-                       m_imageHeight,
-                       1
+                       (deUint32)m_imageWidth,
+                       (deUint32)m_imageHeight,
+                       1u
                }
        };
 
@@ -3198,9 +3171,9 @@ void ImageCopyFromImage::prepare (PrepareContext& context)
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1,
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u,
                        },
                        1, 1, // mipLevels, arrayLayers
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -3220,7 +3193,7 @@ void ImageCopyFromImage::prepare (PrepareContext& context)
        m_memory = bindImageMemory(vki, vkd, physicalDevice, device, *m_srcImage, 0);
 
        {
-               const vk::Unique<vk::VkBuffer>                  srcBuffer               (createBuffer(vkd, device, 4 * m_imageWidth * m_imageHeight, vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT, vk::VK_SHARING_MODE_EXCLUSIVE, queueFamilies));
+               const vk::Unique<vk::VkBuffer>                  srcBuffer               (createBuffer(vkd, device, 4 * m_imageWidth * m_imageHeight, vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT, vk::VK_SHARING_MODE_EXCLUSIVE, queueFamilies));
                const vk::Unique<vk::VkDeviceMemory>    memory                  (bindBufferMemory(vki, vkd, physicalDevice, device, *srcBuffer, vk::VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT));
                const vk::Unique<vk::VkCommandBuffer>   commandBuffer   (createBeginCommandBuffer(vkd, device, commandPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY));
                const vk::VkImageMemoryBarrier                  preImageBarrier =
@@ -3269,14 +3242,6 @@ void ImageCopyFromImage::prepare (PrepareContext& context)
                                1       // Layer count
                        }
                };
-               const void*                                                             preBarriers[]           =
-               {
-                       &preImageBarrier
-               };
-               const void*                                                             postBarriers[]          =
-               {
-                       &postImageBarrier
-               };
                const vk::VkBufferImageCopy                             region                          =
                {
                        0,
@@ -3289,9 +3254,9 @@ void ImageCopyFromImage::prepare (PrepareContext& context)
                        },
                        { 0, 0, 0 },
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u
                        }
                };
 
@@ -3310,9 +3275,9 @@ void ImageCopyFromImage::prepare (PrepareContext& context)
                        vkd.unmapMemory(device, *memory);
                }
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &preBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &preImageBarrier);
                vkd.cmdCopyBufferToImage(*commandBuffer, *srcBuffer, *m_srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &postBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &postImageBarrier);
 
                VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
                queueRun(vkd, queue, *commandBuffer);
@@ -3346,9 +3311,9 @@ void ImageCopyFromImage::submit (SubmitContext& context)
                },
                { 0, 0, 0 },
                {
-                       m_imageWidth,
-                       m_imageHeight,
-                       1
+                       (deUint32)m_imageWidth,
+                       (deUint32)m_imageHeight,
+                       1u
                }
        };
 
@@ -3428,9 +3393,9 @@ void ImageCopyToImage::prepare (PrepareContext& context)
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1,
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u,
                        },
                        1, 1, // mipLevels, arrayLayers
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -3474,12 +3439,8 @@ void ImageCopyToImage::prepare (PrepareContext& context)
                                1       // Layer count
                        }
                };
-               const void*                                                             barriers[]              =
-               {
-                       &barrier
-               };
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &barriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &barrier);
 
                VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
                queueRun(vkd, queue, *commandBuffer);
@@ -3513,9 +3474,9 @@ void ImageCopyToImage::submit (SubmitContext& context)
                },
                { 0, 0, 0 },
                {
-                       m_imageWidth,
-                       m_imageHeight,
-                       1
+                       (deUint32)m_imageWidth,
+                       (deUint32)m_imageHeight,
+                       1u
                }
        };
 
@@ -3573,11 +3534,6 @@ void ImageCopyToImage::verify (VerifyContext& context, size_t commandIndex)
                        0,
                        vk::VK_WHOLE_SIZE
                };
-
-               const void* preBarriers[] =
-               {
-                       &imageBarrier
-               };
                const vk::VkBufferImageCopy     region =
                {
                        0,
@@ -3590,19 +3546,15 @@ void ImageCopyToImage::verify (VerifyContext& context, size_t commandIndex)
                        },
                        { 0, 0, 0 },
                        {
-                               m_imageWidth,
-                               m_imageHeight,
-                               1
+                               (deUint32)m_imageWidth,
+                               (deUint32)m_imageHeight,
+                               1u
                        }
                };
-               const void* postBarriers[] =
-               {
-                       &bufferBarrier
-               };
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &preBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
                vkd.cmdCopyImageToBuffer(*commandBuffer, *m_dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *dstBuffer, 1, &region);
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &postBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
        }
 
        VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
@@ -3699,9 +3651,9 @@ void ImageBlitFromImage::prepare (PrepareContext& context)
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
                        {
-                               m_srcImageWidth,
-                               m_srcImageHeight,
-                               1,
+                               (deUint32)m_srcImageWidth,
+                               (deUint32)m_srcImageHeight,
+                               1u,
                        },
                        1, 1, // mipLevels, arrayLayers
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -3770,14 +3722,6 @@ void ImageBlitFromImage::prepare (PrepareContext& context)
                                1       // Layer count
                        }
                };
-               const void*                                                             preBarriers[]           =
-               {
-                       &preImageBarrier
-               };
-               const void*                                                             postBarriers[]          =
-               {
-                       &postImageBarrier
-               };
                const vk::VkBufferImageCopy                             region                          =
                {
                        0,
@@ -3790,9 +3734,9 @@ void ImageBlitFromImage::prepare (PrepareContext& context)
                        },
                        { 0, 0, 0 },
                        {
-                               m_srcImageWidth,
-                               m_srcImageHeight,
-                               1
+                               (deUint32)m_srcImageWidth,
+                               (deUint32)m_srcImageHeight,
+                               1u
                        }
                };
 
@@ -3811,9 +3755,9 @@ void ImageBlitFromImage::prepare (PrepareContext& context)
                        vkd.unmapMemory(device, *memory);
                }
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &preBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &preImageBarrier);
                vkd.cmdCopyBufferToImage(*commandBuffer, *srcBuffer, *m_srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &postBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &postImageBarrier);
 
                VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
                queueRun(vkd, queue, *commandBuffer);
@@ -3838,11 +3782,13 @@ void ImageBlitFromImage::submit (SubmitContext& context)
                        0,      // arrayLayer
                        1       // layerCount
                },
-               { 0, 0, 0 },
                {
-                       m_srcImageWidth,
-                       m_srcImageHeight,
-                       1
+                       { 0, 0, 0 },
+                       {
+                               m_srcImageWidth,
+                               m_srcImageHeight,
+                               1
+                       },
                },
 
                // Dst
@@ -3852,11 +3798,13 @@ void ImageBlitFromImage::submit (SubmitContext& context)
                        0,      // arrayLayer
                        1       // layerCount
                },
-               { 0, 0, 0 },
                {
-                       m_imageWidth,
-                       m_imageHeight,
-                       1
+                       { 0, 0, 0 },
+                       {
+                               m_imageWidth,
+                               m_imageHeight,
+                               1u
+                       }
                }
        };
        vkd.cmdBlitImage(commandBuffer, *m_srcImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, context.getImage(), context.getImageLayout(), 1, &region, vk::VK_FILTER_NEAREST);
@@ -3975,9 +3923,9 @@ void ImageBlitToImage::prepare (PrepareContext& context)
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
                        {
-                               m_dstImageWidth,
-                               m_dstImageHeight,
-                               1,
+                               (deUint32)m_dstImageWidth,
+                               (deUint32)m_dstImageHeight,
+                               1u,
                        },
                        1, 1, // mipLevels, arrayLayers
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -4021,12 +3969,8 @@ void ImageBlitToImage::prepare (PrepareContext& context)
                                1       // Layer count
                        }
                };
-               const void*                                                             barriers[]              =
-               {
-                       &barrier
-               };
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &barriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &barrier);
 
                VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
                queueRun(vkd, queue, *commandBuffer);
@@ -4051,11 +3995,13 @@ void ImageBlitToImage::submit (SubmitContext& context)
                        0,      // arrayLayer
                        1       // layerCount
                },
-               { 0, 0, 0 },
                {
-                       m_imageWidth,
-                       m_imageHeight,
-                       1
+                       { 0, 0, 0 },
+                       {
+                               m_imageWidth,
+                               m_imageHeight,
+                               1
+                       },
                },
 
                // Dst
@@ -4065,11 +4011,13 @@ void ImageBlitToImage::submit (SubmitContext& context)
                        0,      // arrayLayer
                        1       // layerCount
                },
-               { 0, 0, 0 },
                {
-                       m_dstImageWidth,
-                       m_dstImageHeight,
-                       1
+                       { 0, 0, 0 },
+                       {
+                               m_dstImageWidth,
+                               m_dstImageHeight,
+                               1u
+                       }
                }
        };
        vkd.cmdBlitImage(commandBuffer, context.getImage(), context.getImageLayout(), *m_dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region, vk::VK_FILTER_NEAREST);
@@ -4126,11 +4074,6 @@ void ImageBlitToImage::verify (VerifyContext& context, size_t commandIndex)
                        0,
                        vk::VK_WHOLE_SIZE
                };
-
-               const void* preBarriers[] =
-               {
-                       &imageBarrier
-               };
                const vk::VkBufferImageCopy     region =
                {
                        0,
@@ -4143,19 +4086,15 @@ void ImageBlitToImage::verify (VerifyContext& context, size_t commandIndex)
                        },
                        { 0, 0, 0 },
                        {
-                               m_dstImageWidth,
-                               m_dstImageHeight,
+                               (deUint32)m_dstImageWidth,
+                               (deUint32)m_dstImageHeight,
                                1
                        }
                };
-               const void* postBarriers[] =
-               {
-                       &bufferBarrier
-               };
 
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &preBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
                vkd.cmdCopyImageToBuffer(*commandBuffer, *m_dstImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *dstBuffer, 1, &region);
-               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &postBarriers[0]);
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
        }
 
        VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
@@ -4398,7 +4337,7 @@ void SubmitRenderPass::prepare (PrepareContext& context)
 
                        vk::VK_IMAGE_TYPE_2D,
                        vk::VK_FORMAT_R8G8B8A8_UNORM,
-                       { m_targetWidth, m_targetHeight, 1 },
+                       { (deUint32)m_targetWidth, (deUint32)m_targetHeight, 1u },
                        1u,
                        1u,
                        vk::VK_SAMPLE_COUNT_1_BIT,
@@ -4509,7 +4448,7 @@ void SubmitRenderPass::submit (SubmitContext& context)
                *m_renderPass,
                *m_framebuffer,
 
-               { { 0, 0 },  { m_targetWidth, m_targetHeight } },
+               { { 0, 0 },  { (deUint32)m_targetWidth, (deUint32)m_targetHeight } },
                1u,
                &clearValue
        };
@@ -4591,11 +4530,6 @@ void SubmitRenderPass::verify (VerifyContext& context, size_t commandIndex)
                                0,
                                vk::VK_WHOLE_SIZE
                        };
-
-                       const void* preBarriers[] =
-                       {
-                               &imageBarrier
-                       };
                        const vk::VkBufferImageCopy     region =
                        {
                                0,
@@ -4608,19 +4542,15 @@ void SubmitRenderPass::verify (VerifyContext& context, size_t commandIndex)
                                },
                                { 0, 0, 0 },
                                {
-                                       m_targetWidth,
-                                       m_targetHeight,
-                                       1
+                                       (deUint32)m_targetWidth,
+                                       (deUint32)m_targetHeight,
+                                       1u
                                }
                        };
-                       const void* postBarriers[] =
-                       {
-                               &bufferBarrier
-                       };
 
-                       vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &preBarriers[0]);
+                       vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
                        vkd.cmdCopyImageToBuffer(*commandBuffer, *m_colorTarget, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *dstBuffer, 1, &region);
-                       vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0, 1, &postBarriers[0]);
+                       vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
                }
 
                VK_CHECK(vkd.endCommandBuffer(*commandBuffer));
@@ -4818,7 +4748,7 @@ void RenderBuffer::prepare (PrepareRenderPassContext& context)
                };
                const vk::VkRect2D                                                                      scissors[]                                              =
                {
-                       { { 0, 0 }, { context.getTargetWidth(), context.getTargetHeight() } }
+                       { { 0, 0 }, { (deUint32)context.getTargetWidth(), (deUint32)context.getTargetHeight() } }
                };
                const vk::VkPipelineViewportStateCreateInfo                     viewportState                                   =
                {
@@ -5458,6 +5388,7 @@ void getAvailableOps (const State& state, bool supportsBuffers, bool supportsIma
                                        && usage & USAGE_HOST_WRITE
                                        && state.memoryDefined
                                        && state.hostInvalidated
+                                       && state.queueIdle
                                        && state.cache.isValid(vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_ACCESS_HOST_WRITE_BIT)
                                        && state.cache.isValid(vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_ACCESS_HOST_READ_BIT))
                                {
@@ -5467,6 +5398,7 @@ void getAvailableOps (const State& state, bool supportsBuffers, bool supportsIma
                                if (usage & USAGE_HOST_READ
                                        && state.memoryDefined
                                        && state.hostInvalidated
+                                       && state.queueIdle
                                        && state.cache.isValid(vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_ACCESS_HOST_READ_BIT))
                                {
                                        ops.push_back(OP_MAP_READ);
@@ -5474,6 +5406,7 @@ void getAvailableOps (const State& state, bool supportsBuffers, bool supportsIma
 
                                if (usage & USAGE_HOST_WRITE
                                        && state.hostInvalidated
+                                       && state.queueIdle
                                        && state.cache.isValid(vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_ACCESS_HOST_WRITE_BIT))
                                {
                                        ops.push_back(OP_MAP_WRITE);
@@ -6411,7 +6344,18 @@ tcu::TestStatus MemoryTestInstance::iterate (void)
 
                                log << TestLog::Message << "Max buffer size: " << maxBufferSize << TestLog::EndMessage;
                                log << TestLog::Message << "Max RGBA8 image size: " << maxImageSize << TestLog::EndMessage;
-                               testCommand(log, m_resultCollector, m_context.getBinaryCollection(), vki, vkd, physicalDevice, device, m_config.size, m_memoryTypeNdx, m_config.usage, m_config.sharing, queue, queueFamilyIndex, queues, maxBufferSize, maxImageSize);
+
+                               // Skip tests if there are no supported operations
+                               if (maxBufferSize == 0
+                                       && maxImageSize[0] == 0
+                                       && (m_config.usage & (USAGE_HOST_READ|USAGE_HOST_WRITE)) == 0)
+                               {
+                                       log << TestLog::Message << "Skipping memory type. None of the usages are supported." << TestLog::EndMessage;
+                               }
+                               else
+                               {
+                                       testCommand(log, m_resultCollector, m_context.getBinaryCollection(), vki, vkd, physicalDevice, device, m_config.size, m_memoryTypeNdx, m_config.usage, m_config.sharing, queue, queueFamilyIndex, queues, maxBufferSize, maxImageSize);
+                               }
                        }
                        catch (const tcu::TestError& e)
                        {
@@ -6453,7 +6397,7 @@ struct AddPrograms
                                "highp float;\n"
                                "void main (void) {\n"
                                "\tgl_PointSize = 1.0;\n"
-                               "\thighp vec2 pos = vec2(gl_VertexID % 256, gl_VertexID / 256) / vec2(255.0);\n"
+                               "\thighp vec2 pos = vec2(gl_VertexIndex % 256, gl_VertexIndex / 256) / vec2(255.0);\n"
                                "\tgl_Position = vec4(1.999 * pos - vec2(0.999), 0.0, 1.0);\n"
                                "}\n";
 
@@ -6482,8 +6426,10 @@ tcu::TestCaseGroup* createPipelineBarrierTests (tcu::TestContext& testCtx)
        de::MovePtr<tcu::TestCaseGroup> group                   (new tcu::TestCaseGroup(testCtx, "pipeline_barrier", "Pipeline barrier tests."));
        const vk::VkDeviceSize                  sizes[]                 =
        {
-               1024,
-               1024*1024,
+               1024,                   // 1K
+               8*1024,                 // 8K
+               64*1024,                // 64K
+               1024*1024,              // 1M
        };
        const Usage                                             usages[]                =
        {
index 1e81530..96a34de 100644 (file)
@@ -139,7 +139,7 @@ private:
 
        VkPipelineColorBlendAttachmentState     m_blendStates[BlendTest::QUAD_COUNT];
 
-       const tcu::IVec2                                        m_renderSize;
+       const tcu::UVec2                                        m_renderSize;
        const VkFormat                                          m_colorFormat;
 
        VkImageCreateInfo                                       m_colorImageCreateInfo;
@@ -739,12 +739,7 @@ BlendTestInstance::BlendTestInstance (Context&                                                                     context,
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue attachmentClearValue = defaultClearValue(m_colorFormat);
@@ -808,6 +803,7 @@ tcu::TestStatus BlendTestInstance::iterate (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
index 35ddbab..a242a7e 100644 (file)
@@ -148,7 +148,7 @@ private:
 
 private:
        VkCompareOp                                                     m_depthCompareOps[DepthTest::QUAD_COUNT];
-       const tcu::IVec2                                        m_renderSize;
+       const tcu::UVec2                                        m_renderSize;
        const VkFormat                                          m_colorFormat;
        const VkFormat                                          m_depthFormat;
 
@@ -738,12 +738,7 @@ DepthTestInstance::DepthTestInstance (Context&                             context,
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue attachmentClearValues[2] =
@@ -811,6 +806,7 @@ tcu::TestStatus DepthTestInstance::iterate (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
index c5601e6..27a0762 100644 (file)
@@ -324,7 +324,7 @@ static MovePtr<Program> createRefProgram(const tcu::TextureFormat&                  renderTarge
 } // anonymous
 
 ImageSamplingInstance::ImageSamplingInstance (Context&                                                 context,
-                                                                                         const tcu::IVec2&                                     renderSize,
+                                                                                         const tcu::UVec2&                                     renderSize,
                                                                                          VkImageViewType                                       imageViewType,
                                                                                          VkFormat                                                      imageFormat,
                                                                                          const tcu::IVec3&                                     imageSize,
@@ -377,9 +377,9 @@ ImageSamplingInstance::ImageSamplingInstance (Context&                                                      context,
                        getCompatibleImageType(m_imageViewType),                                                // VkImageType                          imageType;
                        imageFormat,                                                                                                    // VkFormat                                     format;
                        {                                                                                                                               // VkExtent3D                           extent;
-                               m_imageSize.x(),
-                               m_imageSize.y(),
-                               m_imageSize.z()
+                               (deUint32)m_imageSize.x(),
+                               (deUint32)m_imageSize.y(),
+                               (deUint32)m_imageSize.z()
                        },
                        (deUint32)m_texture->getNumLevels(),                                                    // deUint32                                     mipLevels;
                        (deUint32)m_layerCount,                                                                                 // deUint32                                     arrayLayers;
@@ -458,7 +458,7 @@ ImageSamplingInstance::ImageSamplingInstance (Context&                                                      context,
                        0u,                                                                                                                                                     // VkImageCreateFlags           flags;
                        VK_IMAGE_TYPE_2D,                                                                                                                       // VkImageType                          imageType;
                        m_colorFormat,                                                                                                                          // VkFormat                                     format;
-                       { m_renderSize.x(), m_renderSize.y(), 1u },                                                                     // VkExtent3D                           extent;
+                       { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y(), 1u },                         // VkExtent3D                           extent;
                        1u,                                                                                                                                                     // deUint32                                     mipLevels;
                        1u,                                                                                                                                                     // deUint32                                     arrayLayers;
                        VK_SAMPLE_COUNT_1_BIT,                                                                                                          // VkSampleCountFlagBits        samples;
@@ -654,7 +654,7 @@ ImageSamplingInstance::ImageSamplingInstance (Context&                                                      context,
                        1.0f                                            // float        maxDepth;
                };
 
-               const VkRect2D scissor = { { 0, 0 }, { m_renderSize.x(), m_renderSize.y() } };
+               const VkRect2D scissor = { { 0, 0 }, { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y() } };
 
                const VkPipelineViewportStateCreateInfo viewportStateParams =
                {
@@ -845,12 +845,7 @@ ImageSamplingInstance::ImageSamplingInstance (Context&                                                     context,
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue attachmentClearValue = defaultClearValue(m_colorFormat);
@@ -861,7 +856,10 @@ ImageSamplingInstance::ImageSamplingInstance (Context&                                                     context,
                        DE_NULL,                                                                                                // const void*                  pNext;
                        *m_renderPass,                                                                                  // VkRenderPass                 renderPass;
                        *m_framebuffer,                                                                                 // VkFramebuffer                framebuffer;
-                       { { 0, 0 }, { m_renderSize.x(), m_renderSize.y() } },   // VkRect2D                             renderArea;
+                       {
+                               { 0, 0 },
+                               { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y() }
+                       },                                                                                                              // VkRect2D                             renderArea;
                        1,                                                                                                              // deUint32                             clearValueCount;
                        &attachmentClearValue                                                                   // const VkClearValue*  pClearValues;
                };
@@ -911,6 +909,7 @@ tcu::TestStatus ImageSamplingInstance::iterate (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
index 653c1ae..8b5eae6 100644 (file)
@@ -53,7 +53,7 @@ class ImageSamplingInstance : public vkt::TestInstance
 {
 public:
                                                                                                ImageSamplingInstance   (Context&                                                       context,
-                                                                                                                                                const tcu::IVec2&                                      renderSize,
+                                                                                                                                                const tcu::UVec2&                                      renderSize,
                                                                                                                                                 vk::VkImageViewType                            imageViewType,
                                                                                                                                                 vk::VkFormat                                           imageFormat,
                                                                                                                                                 const tcu::IVec3&                                      imageSize,
@@ -87,7 +87,7 @@ private:
        vk::Move<vk::VkSampler>                                         m_sampler;
        de::MovePtr<TestTexture>                                        m_texture;
 
-       const tcu::IVec2                                                        m_renderSize;
+       const tcu::UVec2                                                        m_renderSize;
        const vk::VkFormat                                                      m_colorFormat;
 
        vk::Move<vk::VkDescriptorPool>                          m_descriptorPool;
index 0958a7a..58f1a7f 100644 (file)
@@ -154,16 +154,16 @@ void ImageTest::initPrograms (SourceCollections& sourceCollections) const
 
 TestInstance* ImageTest::createInstance (Context& context) const
 {
-       tcu::IVec2 renderSize;
+       tcu::UVec2 renderSize;
 
        if (m_imageViewType == VK_IMAGE_VIEW_TYPE_1D || m_imageViewType == VK_IMAGE_VIEW_TYPE_2D)
        {
-               renderSize = tcu::IVec2(m_imageSize.x(), m_imageSize.y());
+               renderSize = tcu::UVec2((deUint32)m_imageSize.x(), (deUint32)m_imageSize.y());
        }
        else
        {
                // Draw a 3x2 grid of texture layers
-               renderSize = tcu::IVec2(m_imageSize.x() * 3, m_imageSize.y() * 2);
+               renderSize = tcu::UVec2((deUint32)m_imageSize.x() * 3, (deUint32)m_imageSize.y() * 2);
        }
 
        const std::vector<Vertex4Tex4>  vertices                        = createTestQuadMosaic(m_imageViewType);
@@ -189,6 +189,7 @@ TestInstance* ImageTest::createInstance (Context& context) const
                VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                                                                  // VkSamplerAddressMode         addressModeV;
                VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                                                                  // VkSamplerAddressMode         addressModeW;
                0.0f,                                                                                                                                   // float                                        mipLodBias;
+               VK_FALSE,                                                                                                                               // VkBool32                                     anisotropyEnable;
                1.0f,                                                                                                                                   // float                                        maxAnisotropy;
                false,                                                                                                                                  // VkBool32                                     compareEnable;
                VK_COMPARE_OP_NEVER,                                                                                                    // VkCompareOp                          compareOp;
index 20f4194..6664d05 100644 (file)
@@ -48,26 +48,38 @@ namespace pipeline
 
 using namespace vk;
 
-/*! Gets the next multiple of M */
-template<deUint32 M>
-static int getNextMultiple(deUint32 value)
+/*! Gets the next multiple of a given divisor */
+static deUint32 getNextMultiple (deUint32 divisor, deUint32 value)
 {
-       if (value % M == 0)
+       if (value % divisor == 0)
        {
                return value;
        }
-       return value + M - (value % M);
+       return value + divisor - (value % divisor);
 }
 
-static int getNextMultiple (deUint32 M, deUint32 value)
+/*! Gets the next value that is multiple of all given divisors */
+static deUint32 getNextMultiple (const std::vector<deUint32>& divisors, deUint32 value)
 {
-       if (value % M == 0)
+       deUint32        nextMultiple            = value;
+       bool            nextMultipleFound       = false;
+
+       while (true)
        {
-               return value;
+               nextMultipleFound = true;
+
+               for (size_t divNdx = 0; divNdx < divisors.size(); divNdx++)
+                       nextMultipleFound = nextMultipleFound && (nextMultiple % divisors[divNdx] == 0);
+
+               if (nextMultipleFound)
+                       break;
+
+               DE_ASSERT(nextMultiple < ~((deUint32)0u));
+               nextMultiple = getNextMultiple(divisors[0], nextMultiple + 1);
        }
-       return value + M - (value % M);
-}
 
+       return nextMultiple;
+}
 
 bool isSupportedSamplableFormat (const InstanceInterface& instanceInterface, VkPhysicalDevice device, VkFormat format)
 {
@@ -136,7 +148,7 @@ de::MovePtr<tcu::TextureLevel> readColorAttachment (const vk::DeviceInterface&      v
                                                                                                        vk::Allocator&                          allocator,
                                                                                                        vk::VkImage                                     image,
                                                                                                        vk::VkFormat                            format,
-                                                                                                       const tcu::IVec2&                       renderSize)
+                                                                                                       const tcu::UVec2&                       renderSize)
 {
        Move<VkBuffer>                                  buffer;
        de::MovePtr<Allocation>                 bufferAlloc;
@@ -242,33 +254,25 @@ de::MovePtr<tcu::TextureLevel> readColorAttachment (const vk::DeviceInterface&    v
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    // VkStructureType                                      sType;
                DE_NULL,                                                                                                // const void*                                          pNext;
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,                    // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                                // VkFramebuffer                                        framebuffer;
-               false,                                                                                                  // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u                                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
-       const void* const       imageBarrierPtr         = &imageBarrier;
-       const void* const       bufferBarrierPtr        = &bufferBarrier;
-
        // Copy image to buffer
 
        const VkBufferImageCopy copyRegion =
        {
-               0u,                                                                                     // VkDeviceSize                         bufferOffset;
-               (deUint32)renderSize.x(),                                       // deUint32                                     bufferRowLength;
-               (deUint32)renderSize.y(),                                       // deUint32                                     bufferImageHeight;
-               { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u },      // VkImageSubresourceLayers     imageSubresource;
-               { 0, 0, 0 },                                                            // VkOffset3D                           imageOffset;
-               { renderSize.x(), renderSize.y(), 1 }           // VkExtent3D                           imageExtent;
+               0u,                                                                                             // VkDeviceSize                         bufferOffset;
+               (deUint32)renderSize.x(),                                               // deUint32                                     bufferRowLength;
+               (deUint32)renderSize.y(),                                               // deUint32                                     bufferImageHeight;
+               { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u },              // VkImageSubresourceLayers     imageSubresource;
+               { 0, 0, 0 },                                                                    // VkOffset3D                           imageOffset;
+               { renderSize.x(), renderSize.y(), 1u }                  // VkExtent3D                           imageExtent;
        };
 
        VK_CHECK(vk.beginCommandBuffer(*cmdBuffer, &cmdBufferBeginInfo));
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 1, &imageBarrierPtr);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &imageBarrier);
        vk.cmdCopyImageToBuffer(*cmdBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *buffer, 1, &copyRegion);
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1, &bufferBarrierPtr);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
 
        const VkSubmitInfo submitInfo =
@@ -277,6 +281,7 @@ de::MovePtr<tcu::TextureLevel> readColorAttachment (const vk::DeviceInterface&      v
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &cmdBuffer.get(),                               // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -426,21 +431,9 @@ void uploadTestTexture (const DeviceInterface&                     vk,
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                DE_NULL,                                                                                // const void*                                          pNext;
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,    // VkCommandBufferUsageFlags            flags;
-               DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-               false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-               0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
-       const void* preCopyBarriers[2] =
-       {
-               &preBufferBarrier,
-               &preImageBarrier
-       };
-
-       const void* const                                               postCopyBarrier = &postImageBarrier;
        const std::vector<VkBufferImageCopy>    copyRegions             = srcTexture.getBufferCopyRegions();
 
        // Write buffer data
@@ -449,9 +442,9 @@ void uploadTestTexture (const DeviceInterface&                      vk,
 
        // Copy buffer to image
        VK_CHECK(vk.beginCommandBuffer(*cmdBuffer, &cmdBufferBeginInfo));
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_FALSE, 2, preCopyBarriers);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &preBufferBarrier, 1, &preImageBarrier);
        vk.cmdCopyBufferToImage(*cmdBuffer, *buffer, destImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, (deUint32)copyRegions.size(), copyRegions.data());
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, 1, &postCopyBarrier);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &postImageBarrier);
 
        VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
 
@@ -461,6 +454,7 @@ void uploadTestTexture (const DeviceInterface&                      vk,
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &cmdBuffer.get(),                               // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -527,14 +521,18 @@ TestTexture::~TestTexture (void)
 
 deUint32 TestTexture::getSize (void) const
 {
-       deUint32 textureSize = 0;
+       std::vector<deUint32>   offsetMultiples;
+       deUint32                                textureSize = 0;
+
+       offsetMultiples.push_back(4);
+       offsetMultiples.push_back(getLevel(0, 0).getFormat().getPixelSize());
 
        for (int levelNdx = 0; levelNdx < getNumLevels(); levelNdx++)
        {
                for (int layerNdx = 0; layerNdx < getArraySize(); layerNdx++)
                {
                        const tcu::ConstPixelBufferAccess level = getLevel(levelNdx, layerNdx);
-                       textureSize = getNextMultiple<4>(textureSize);
+                       textureSize = getNextMultiple(offsetMultiples, textureSize);
                        textureSize += level.getWidth() * level.getHeight() * level.getDepth() * level.getFormat().getPixelSize();
                }
        }
@@ -547,13 +545,17 @@ deUint32 TestTexture::getCompressedSize (void) const
        if (!isCompressed())
                throw tcu::InternalError("Texture is not compressed");
 
-       deUint32 textureSize = 0;
+       std::vector<deUint32>   offsetMultiples;
+       deUint32                                textureSize                     = 0;
+
+       offsetMultiples.push_back(4);
+       offsetMultiples.push_back(tcu::getBlockSize(getCompressedLevel(0, 0).getFormat()));
 
        for (int levelNdx = 0; levelNdx < getNumLevels(); levelNdx++)
        {
                for (int layerNdx = 0; layerNdx < getArraySize(); layerNdx++)
                {
-                       textureSize = getNextMultiple<4>(textureSize);
+                       textureSize = getNextMultiple(offsetMultiples, textureSize);
                        textureSize += getCompressedLevel(levelNdx, layerNdx).getDataSize();
                }
        }
@@ -579,18 +581,23 @@ const tcu::CompressedTexture& TestTexture::getCompressedLevel (int level, int la
 
 std::vector<VkBufferImageCopy> TestTexture::getBufferCopyRegions (void) const
 {
+       std::vector<deUint32>                   offsetMultiples;
        std::vector<VkBufferImageCopy>  regions;
        deUint32                                                layerDataOffset = 0;
 
+       offsetMultiples.push_back(4);
+
        if (isCompressed())
        {
+               offsetMultiples.push_back(tcu::getBlockSize(getCompressedLevel(0, 0).getFormat()));
+
                for (int levelNdx = 0; levelNdx < getNumLevels(); levelNdx++)
                {
                        for (int layerNdx = 0; layerNdx < getArraySize(); layerNdx++)
                        {
                                const tcu::CompressedTexture& level = getCompressedLevel(levelNdx, layerNdx);
                                tcu::IVec3 blockPixelSize                       = getBlockPixelSize(level.getFormat());
-                               layerDataOffset                                         = getNextMultiple<4>(layerDataOffset);
+                               layerDataOffset                                         = getNextMultiple(offsetMultiples, layerDataOffset);
 
                                const VkBufferImageCopy layerRegion =
                                {
@@ -605,9 +612,9 @@ std::vector<VkBufferImageCopy> TestTexture::getBufferCopyRegions (void) const
                                        },
                                        { 0u, 0u, 0u },                                                 // VkOffset3D                           imageOffset;
                                        {                                                                               // VkExtent3D                           imageExtent;
-                                               level.getWidth(),
-                                               level.getHeight(),
-                                               level.getDepth()
+                                               (deUint32)level.getWidth(),
+                                               (deUint32)level.getHeight(),
+                                               (deUint32)level.getDepth()
                                        }
                                };
 
@@ -618,13 +625,15 @@ std::vector<VkBufferImageCopy> TestTexture::getBufferCopyRegions (void) const
        }
        else
        {
+               offsetMultiples.push_back(getLevel(0, 0).getFormat().getPixelSize());
+
                for (int levelNdx = 0; levelNdx < getNumLevels(); levelNdx++)
                {
                        for (int layerNdx = 0; layerNdx < getArraySize(); layerNdx++)
                        {
                                const tcu::ConstPixelBufferAccess level = getLevel(levelNdx, layerNdx);
 
-                               layerDataOffset = getNextMultiple<4>(layerDataOffset);
+                               layerDataOffset = getNextMultiple(offsetMultiples, layerDataOffset);
 
                                const VkBufferImageCopy layerRegion =
                                {
@@ -639,9 +648,9 @@ std::vector<VkBufferImageCopy> TestTexture::getBufferCopyRegions (void) const
                                        },
                                        { 0u, 0u, 0u },                                                 // VkOffset3D                   imageOffset;
                                        {                                                                               // VkExtent3D                   imageExtent;
-                                               level.getWidth(),
-                                               level.getHeight(),
-                                               level.getDepth()
+                                               (deUint32)level.getWidth(),
+                                               (deUint32)level.getHeight(),
+                                               (deUint32)level.getDepth()
                                        }
                                };
 
@@ -656,15 +665,20 @@ std::vector<VkBufferImageCopy> TestTexture::getBufferCopyRegions (void) const
 
 void TestTexture::write (deUint8* destPtr) const
 {
-       deUint32 levelOffset = 0;
+       std::vector<deUint32>   offsetMultiples;
+       deUint32                                levelOffset             = 0;
+
+       offsetMultiples.push_back(4);
 
        if (isCompressed())
        {
+               offsetMultiples.push_back(tcu::getBlockSize(getCompressedLevel(0, 0).getFormat()));
+
                for (int levelNdx = 0; levelNdx < getNumLevels(); levelNdx++)
                {
                        for (int layerNdx = 0; layerNdx < getArraySize(); layerNdx++)
                        {
-                               levelOffset = getNextMultiple<4>(levelOffset);
+                               levelOffset = getNextMultiple(offsetMultiples, levelOffset);
 
                                const tcu::CompressedTexture&           compressedTex   = getCompressedLevel(levelNdx, layerNdx);
 
@@ -675,11 +689,13 @@ void TestTexture::write (deUint8* destPtr) const
        }
        else
        {
+               offsetMultiples.push_back(getLevel(0, 0).getFormat().getPixelSize());
+
                for (int levelNdx = 0; levelNdx < getNumLevels(); levelNdx++)
                {
                        for (int layerNdx = 0; layerNdx < getArraySize(); layerNdx++)
                        {
-                               levelOffset = getNextMultiple<4>(levelOffset);
+                               levelOffset = getNextMultiple(offsetMultiples, levelOffset);
 
                                const tcu::ConstPixelBufferAccess       srcAccess               = getLevel(levelNdx, layerNdx);
                                const tcu::PixelBufferAccess            destAccess              (srcAccess.getFormat(), srcAccess.getSize(), srcAccess.getPitch(), destPtr + levelOffset);
@@ -716,7 +732,7 @@ void TestTexture::populateCompressedLevels (const tcu::CompressedTexFormat& form
                m_compressedLevels.push_back(compressedLevel);
 
                // Store decompressed data
-               compressedLevel->decompress(level);
+               compressedLevel->decompress(level, tcu::TexDecompressionParams::ASTCMODE_LDR);
        }
 }
 
index ab6a214..e40d4c5 100644 (file)
@@ -80,7 +80,7 @@ de::MovePtr<tcu::TextureLevel>        readColorAttachment                      (const vk::DeviceInterface
                                                                                                                          vk::Allocator&                                allocator,
                                                                                                                          vk::VkImage                                   image,
                                                                                                                          vk::VkFormat                                  format,
-                                                                                                                         const tcu::IVec2&                             renderSize);
+                                                                                                                         const tcu::UVec2&                             renderSize);
 
 /*--------------------------------------------------------------------*//*!
  * Uploads data from a test texture to a destination VK image.
index 3a45949..8546796 100644 (file)
@@ -75,13 +75,13 @@ public:
 
        virtual void                    initPrograms                    (SourceCollections&                             sourceCollections) const;
        virtual TestInstance*   createInstance                  (Context&                                               context) const;
-       static std::string              getGlslSamplerType              (const tcu::TextureFormat&              format, 
+       static std::string              getGlslSamplerType              (const tcu::TextureFormat&              format,
                                                                                                         VkImageViewType                                type);
-       static tcu::IVec2               getRenderSize                   (VkImageViewType                                viewType);
+       static tcu::UVec2               getRenderSize                   (VkImageViewType                                viewType);
        static tcu::IVec3               getImageSize                    (VkImageViewType                                viewType);
        static int                              getArraySize                    (VkImageViewType                                viewType);
        static int                              getNumLevels                    (VkImageViewType                                viewType);
-       static tcu::Vec4                swizzle                                 (tcu::Vec4                                              inputData, 
+       static tcu::Vec4                swizzle                                 (tcu::Vec4                                              inputData,
                                                                                                         VkComponentMapping                             componentMapping);
 private:
        VkImageViewType                 m_imageViewType;
@@ -141,7 +141,7 @@ void ImageViewTest::initPrograms (SourceCollections& sourceCollections) const
 
        tcu::Vec4                                               swizzledScale   = swizzle(formatInfo.lookupScale, m_componentMapping);
        tcu::Vec4                                               swizzledBias    = swizzle(formatInfo.lookupBias, m_componentMapping);
-       
+
        switch (m_imageViewType)
        {
                case VK_IMAGE_VIEW_TYPE_1D:
@@ -199,7 +199,7 @@ void ImageViewTest::initPrograms (SourceCollections& sourceCollections) const
 
 TestInstance* ImageViewTest::createInstance (Context& context) const
 {
-       tcu::IVec2                                              renderSize              = getRenderSize(m_imageViewType);
+       const tcu::UVec2                                renderSize              = getRenderSize(m_imageViewType);
        const tcu::IVec3                                imageSize               = getImageSize(m_imageViewType);
        const int                                               arraySize               = getArraySize(m_imageViewType);
        const std::vector<Vertex4Tex4>  vertices                = createTestQuadMosaic(m_imageViewType);
@@ -216,6 +216,7 @@ TestInstance* ImageViewTest::createInstance (Context& context) const
                VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                                                                  // VkSamplerAddressMode         addressModeV;
                VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                                                                  // VkSamplerAddressMode         addressModeW;
                0.0f,                                                                                                                                   // float                                        mipLodBias;
+               VK_FALSE,                                                                                                                               // VkBool32                                     anisotropyEnable;
                1.0f,                                                                                                                                   // float                                        maxAnisotropy;
                false,                                                                                                                                  // VkBool32                                     compareEnable;
                VK_COMPARE_OP_NEVER,                                                                                                    // VkCompareOp                          compareOp;
@@ -275,12 +276,12 @@ std::string ImageViewTest::getGlslSamplerType (const tcu::TextureFormat& format,
        return samplerType.str();
 }
 
-tcu::IVec2 ImageViewTest::getRenderSize (VkImageViewType viewType)
+tcu::UVec2 ImageViewTest::getRenderSize (VkImageViewType viewType)
 {
        if (viewType == VK_IMAGE_VIEW_TYPE_1D || viewType == VK_IMAGE_VIEW_TYPE_2D)
-               return tcu::IVec2(16, 16);
+               return tcu::UVec2(16u, 16u);
        else
-               return tcu::IVec2(16 * 3, 16 * 2);
+               return tcu::UVec2(16u * 3u, 16u * 2u);
 }
 
 tcu::IVec3 ImageViewTest::getImageSize (VkImageViewType viewType)
index 4e7f358..e858cea 100644 (file)
@@ -170,7 +170,7 @@ private:
        std::vector<deUint32>                           m_indices;
        de::MovePtr<Allocation>                         m_indexBufferAlloc;
 
-       const tcu::IVec2                                        m_renderSize;
+       const tcu::UVec2                                        m_renderSize;
 
        const VkFormat                                          m_colorFormat;
        VkImageCreateInfo                                       m_colorImageCreateInfo;
@@ -927,7 +927,7 @@ InputAssemblyInstance::InputAssemblyInstance (Context&                                                      context,
        , m_indexType                           (indexType)
        , m_vertices                            (vertexBufferData)
        , m_indices                                     (indexBufferData)
-       , m_renderSize                          ((primitiveTopology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN) ? tcu::IVec2(32, 32) : tcu::IVec2(64, 16))
+       , m_renderSize                          ((primitiveTopology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN) ? tcu::UVec2(32, 32) : tcu::UVec2(64, 16))
        , m_colorFormat                         (VK_FORMAT_R8G8B8A8_UNORM)
 {
        const DeviceInterface&                  vk                                              = context.getDeviceInterface();
@@ -1384,12 +1384,7 @@ InputAssemblyInstance::InputAssemblyInstance (Context&                                                   context,
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue attachmentClearValue = defaultClearValue(m_colorFormat);
@@ -1449,6 +1444,7 @@ tcu::TestStatus InputAssemblyInstance::iterate (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
index 7fac05e..ef3fddb 100644 (file)
@@ -379,7 +379,7 @@ protected:
        const std::vector<Vertex4RGBA>                          m_vertices;
        const VkPipelineMultisampleStateCreateInfo      m_multisampleStateParams;
        const VkPipelineColorBlendAttachmentState       m_colorBlendState;
-       const GeometryType                      m_geometryType;
+       const GeometryType                                                      m_geometryType;
 };
 
 
@@ -1307,7 +1307,7 @@ MultisampleRenderer::MultisampleRenderer (Context&                                                                                context,
                        0u,                                                                                                                                                     // VkImageCreateFlags           flags;
                        VK_IMAGE_TYPE_2D,                                                                                                                       // VkImageType                          imageType;
                        m_colorFormat,                                                                                                                          // VkFormat                                     format;
-                       { m_renderSize.x(), m_renderSize.y(), 1u },                                                                     // VkExtent3D                           extent;
+                       { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y(), 1u },                         // VkExtent3D                           extent;
                        1u,                                                                                                                                                     // deUint32                                     mipLevels;
                        1u,                                                                                                                                                     // deUint32                                     arrayLayers;
                        m_multisampleStateParams.rasterizationSamples,                                                          // VkSampleCountFlagBits        samples;
@@ -1335,7 +1335,7 @@ MultisampleRenderer::MultisampleRenderer (Context&                                                                                context,
                        0u,                                                                                                                                                             // VkImageCreateFlags           flags;
                        VK_IMAGE_TYPE_2D,                                                                                                                               // VkImageType                          imageType;
                        m_colorFormat,                                                                                                                                  // VkFormat                                     format;
-                       { m_renderSize.x(), m_renderSize.y(), 1u },                                                                             // VkExtent3D                           extent;
+                       { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y(), 1u },                                 // VkExtent3D                           extent;
                        1u,                                                                                                                                                             // deUint32                                     mipLevels;
                        1u,                                                                                                                                                             // deUint32                                     arrayLayers;
                        VK_SAMPLE_COUNT_1_BIT,                                                                                                                  // VkSampleCountFlagBits        samples;
@@ -1581,8 +1581,8 @@ MultisampleRenderer::MultisampleRenderer (Context&                                                                                context,
 
                const VkRect2D scissor =
                {
-                       { 0, 0 },                                                                                               // VkOffset2D  offset;
-                       { m_renderSize.x(), m_renderSize.y() }                                  // VkExtent2D  extent;
+                       { 0, 0 },                                                                                                       // VkOffset2D  offset;
+                       { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y() }      // VkExtent2D  extent;
                };
 
                const VkPipelineViewportStateCreateInfo viewportStateParams =
@@ -1747,12 +1747,7 @@ MultisampleRenderer::MultisampleRenderer (Context&                                                                               context,
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                VkClearValue colorClearValue;
@@ -1773,7 +1768,10 @@ MultisampleRenderer::MultisampleRenderer (Context&                                                                               context,
                        DE_NULL,                                                                                                // const void*                  pNext;
                        *m_renderPass,                                                                                  // VkRenderPass                 renderPass;
                        *m_framebuffer,                                                                                 // VkFramebuffer                framebuffer;
-                       { { 0, 0 }, { m_renderSize.x(), m_renderSize.y() } },   // VkRect2D                             renderArea;
+                       {
+                               { 0, 0 },
+                               { (deUint32)m_renderSize.x(), (deUint32)m_renderSize.y() }
+                       },                                                                                                              // VkRect2D                             renderArea;
                        2,                                                                                                              // deUint32                             clearValueCount;
                        clearValues                                                                                             // const VkClearValue*  pClearValues;
                };
@@ -1824,6 +1822,7 @@ de::MovePtr<tcu::TextureLevel> MultisampleRenderer::render (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -1834,7 +1833,7 @@ de::MovePtr<tcu::TextureLevel> MultisampleRenderer::render (void)
        VK_CHECK(vk.queueSubmit(queue, 1, &submitInfo, *m_fence));
        VK_CHECK(vk.waitForFences(vkDevice, 1, &m_fence.get(), true, ~(0ull) /* infinity*/));
 
-       return readColorAttachment(vk, vkDevice, queue, queueFamilyIndex, allocator, *m_resolveImage, m_colorFormat, m_renderSize);
+       return readColorAttachment(vk, vkDevice, queue, queueFamilyIndex, allocator, *m_resolveImage, m_colorFormat, m_renderSize.cast<deUint32>());
 }
 
 } // anonymous
index e072732..1b9400d 100644 (file)
@@ -140,7 +140,7 @@ private:
        tcu::TestStatus                         verifyImage                                                     (void);
 
 private:
-       const tcu::IVec2                                                                m_renderSize;
+       const tcu::UVec2                                                                m_renderSize;
        const VkFormat                                                                  m_colorFormat;
        const deUint32                                                                  m_rangeCount;
        PushConstantData                                                                m_pushConstantRange[MAX_RANGE_COUNT];
@@ -250,7 +250,7 @@ void PushConstantGraphicsTest::initPrograms (SourceCollections& sourceCollection
                                case SIZE_CASE_16:
                                        vertexSrc << "vec4 color;\n"
                                                          << "} matInst;\n"
-                                                         << "layout(location = 0) uniform UniformBuf {\n"
+                                                         << "layout(std140, binding = 0) uniform UniformBuf {\n"
                                                          << "vec4 element;\n"
                                                          << "} uniformBuf;\n";
                                        break;
@@ -902,7 +902,7 @@ PushConstantGraphicsTestInstance::PushConstantGraphicsTestInstance (Context&
                {
                        VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,              // VkStructureType                             sType;
                        DE_NULL,                                                                                                                // const void*                                 pNext;
-                       0u,                                                                                                                             // VkPipelineTesselationStateCreateFlags       flags;
+                       0u,                                                                                                                             // VkPipelineTessellationStateCreateFlags      flags;
                        3u,                                                                                                                             // uint32_t                                    patchControlPoints;
                };
 
@@ -986,12 +986,7 @@ PushConstantGraphicsTestInstance::PushConstantGraphicsTestInstance (Context&
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue attachmentClearValues[] =
@@ -1084,6 +1079,7 @@ tcu::TestStatus PushConstantGraphicsTestInstance::iterate (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
@@ -1388,12 +1384,7 @@ PushConstantComputeTestInstance::PushConstantComputeTestInstance (Context&                                       c
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
@@ -1438,6 +1429,7 @@ tcu::TestStatus PushConstantComputeTestInstance::iterate (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
index 6f385ff..2b2a94e 100644 (file)
@@ -258,7 +258,7 @@ public:
                                const tcu::Vec4 swizColor       = swizzle(texColor, m_swizzle);
                                const tcu::Vec4 normColor       = swizColor * swizzle(m_textureFormatInfo.lookupScale, m_swizzle) + swizzle(m_textureFormatInfo.lookupBias, m_swizzle);
                                const tcu::Vec4 color           = (normColor - m_colorFormatInfo.lookupBias) / m_colorFormatInfo.lookupScale;
-                               rr::writeFragmentOutput(context, packetNdx, fragNdx, 0, color);
+                               rr::writeFragmentOutput(context, packetNdx, fragNdx, 0, color);
                        }
                }
        }
index 0f44620..f00844e 100644 (file)
@@ -74,7 +74,7 @@ public:
 
        virtual void                                            initPrograms                    (SourceCollections& sourceCollections) const;
        virtual TestInstance*                           createInstance                  (Context& context) const;
-       virtual tcu::IVec2                                      getRenderSize                   (VkImageViewType viewType) const;
+       virtual tcu::UVec2                                      getRenderSize                   (VkImageViewType viewType) const;
        virtual std::vector<Vertex4Tex4>        createVertices                  (void) const;
        virtual VkSamplerCreateInfo                     getSamplerCreateInfo    (void) const;
 
@@ -159,7 +159,7 @@ public:
                                                                                                                                         VkSamplerAddressMode   addressW,
                                                                                                                                         VkBorderColor                  borderColor);
        virtual                                                         ~SamplerAddressModesTest        (void) {}
-       virtual tcu::IVec2                                      getRenderSize (VkImageViewType viewType) const;
+       virtual tcu::UVec2                                      getRenderSize                           (VkImageViewType viewType) const;
        virtual std::vector<Vertex4Tex4>        createVertices                          (void) const;
        virtual VkSamplerCreateInfo                     getSamplerCreateInfo            (void) const;
 
@@ -254,7 +254,7 @@ void SamplerTest::initPrograms (SourceCollections& sourceCollections) const
 
 TestInstance* SamplerTest::createInstance (Context& context) const
 {
-       const tcu::IVec2                                renderSize                      = getRenderSize(m_imageViewType);
+       const tcu::UVec2                                renderSize                      = getRenderSize(m_imageViewType);
        const std::vector<Vertex4Tex4>  vertices                        = createVertices();
        const VkSamplerCreateInfo               samplerParams           = getSamplerCreateInfo();
        const VkComponentMapping                componentMapping        = getFormatComponentMapping(m_imageFormat);
@@ -276,15 +276,15 @@ TestInstance* SamplerTest::createInstance (Context& context) const
                                                                         samplerParams, m_samplerLod,vertices);
 }
 
-tcu::IVec2 SamplerTest::getRenderSize (VkImageViewType viewType) const
+tcu::UVec2 SamplerTest::getRenderSize (VkImageViewType viewType) const
 {
        if (viewType == VK_IMAGE_VIEW_TYPE_1D || viewType == VK_IMAGE_VIEW_TYPE_2D)
        {
-               return tcu::IVec2(16, 16);
+               return tcu::UVec2(16u, 16u);
        }
        else
        {
-               return tcu::IVec2(16 * 3, 16 * 2);
+               return tcu::UVec2(16u * 3u, 16u * 2u);
        }
 }
 
@@ -309,16 +309,17 @@ VkSamplerCreateInfo SamplerTest::getSamplerCreateInfo (void) const
                0u,                                                                                                                                             // VkSamplerCreateFlags         flags;
                VK_FILTER_NEAREST,                                                                                                              // VkFilter                                     magFilter;
                VK_FILTER_NEAREST,                                                                                                              // VkFilter                                     minFilter;
-               VK_SAMPLER_MIPMAP_MODE_BASE,                                                                                    // VkSamplerMipmapMode          mipmapMode;
+               VK_SAMPLER_MIPMAP_MODE_NEAREST,                                                                                 // VkSamplerMipmapMode          mipmapMode;
                VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                                                                  // VkSamplerAddressMode         addressModeU;
                VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                                                                  // VkSamplerAddressMode         addressModeV;
                VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                                                                  // VkSamplerAddressMode         addressModeW;
                0.0f,                                                                                                                                   // float                                        mipLodBias;
+               VK_FALSE,                                                                                                                               // VkBool32                                     anisotropyEnable;
                1.0f,                                                                                                                                   // float                                        maxAnisotropy;
                false,                                                                                                                                  // VkBool32                                     compareEnable;
                VK_COMPARE_OP_NEVER,                                                                                                    // VkCompareOp                          compareOp;
                0.0f,                                                                                                                                   // float                                        minLod;
-               (float)deLog2Floor32(m_imageSize) + 1,                                                                  // float                                        maxLod;
+               0.25f,                                                                                                                                  // float                                        maxLod;
                getFormatBorderColor(BORDER_COLOR_TRANSPARENT_BLACK, m_imageFormat),    // VkBorderColor                        borderColor;
                false                                                                                                                                   // VkBool32                                     unnormalizedCoordinates;
        };
@@ -509,9 +510,9 @@ SamplerAddressModesTest::SamplerAddressModesTest (tcu::TestContext&         testContext
 {
 }
 
-tcu::IVec2 SamplerAddressModesTest::getRenderSize (VkImageViewType viewType) const
+tcu::UVec2 SamplerAddressModesTest::getRenderSize (VkImageViewType viewType) const
 {
-       return 4 * SamplerTest::getRenderSize(viewType);
+       return 4u * SamplerTest::getRenderSize(viewType);
 }
 
 std::vector<Vertex4Tex4> SamplerAddressModesTest::createVertices (void) const
index 5b745fb..e8ff69a 100644 (file)
@@ -151,7 +151,7 @@ private:
 
        VkStencilOpState                                        m_stencilOpStateFront;
        VkStencilOpState                                        m_stencilOpStateBack;
-       const tcu::IVec2                                        m_renderSize;
+       const tcu::UVec2                                        m_renderSize;
        const VkFormat                                          m_colorFormat;
        const VkFormat                                          m_stencilFormat;
 
@@ -825,12 +825,7 @@ StencilTestInstance::StencilTestInstance (Context&                                 context,
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue attachmentClearValues[2] =
@@ -898,6 +893,7 @@ tcu::TestStatus StencilTestInstance::iterate (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
index d2474d5..7071404 100644 (file)
@@ -314,7 +314,7 @@ public:
                                                                                                         const char*           source_name,
                                                                                                         const char*           entry_name);
        void             enableTessellationStage        (deUint32              patchControlPoints);
-       Move<VkPipeline> buildPipeline                  (tcu::IVec2            renderSize,
+       Move<VkPipeline> buildPipeline                  (tcu::UVec2            renderSize,
                                                                                                         VkRenderPass          renderPass);
 protected:
        enum
@@ -376,7 +376,7 @@ void SimpleGraphicsPipelineBuilder::bindShaderStage(VkShaderStageFlagBits stage,
        m_shaderStageCount++;
 }
 
-Move<VkPipeline> SimpleGraphicsPipelineBuilder::buildPipeline(tcu::IVec2 renderSize, VkRenderPass renderPass)
+Move<VkPipeline> SimpleGraphicsPipelineBuilder::buildPipeline(tcu::UVec2 renderSize, VkRenderPass renderPass)
 {
        const DeviceInterface&      vk                  = m_context.getDeviceInterface();
        const VkDevice              vkDevice            = m_context.getDevice();
@@ -573,7 +573,7 @@ Move<VkPipeline> SimpleGraphicsPipelineBuilder::buildPipeline(tcu::IVec2 renderS
                {
                        VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,  // VkStructureType                          sType;
                        DE_NULL,                                                    // const void*                              pNext;
-                       0u,                                                         // VkPipelineTesselationStateCreateFlags    flags;
+                       0u,                                                         // VkPipelineTessellationStateCreateFlags   flags;
                        m_patchControlPoints,                                       // deUint32                                 patchControlPoints;
                };
 
@@ -661,8 +661,8 @@ protected:
                                                                                                                VkBufferUsageFlags       usage,
                                                                                                                de::MovePtr<Allocation>* pAlloc);
        Move<VkImage>           createImage2DAndBindMemory (VkFormat                 format,
-                                                                                                               deInt32                  width,
-                                                                                                               deInt32                  height,
+                                                                                                               deUint32                  width,
+                                                                                                               deUint32                  height,
                                                                                                                VkBufferUsageFlags       usage,
                                                                                                                VkSampleCountFlagBits    sampleCount,
                                                                                                                de::MovePtr<Allocation>* pAlloc);
@@ -784,12 +784,7 @@ void TimestampTestInstance::configCommandBuffer(void)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                  sType;
                DE_NULL,                                        // const void*                      pNext;
                0u,                                             // VkCommandBufferUsageFlags        flags;
-               DE_NULL,                                        // VkRenderPass                     renderPass;
-               0u,                                             // deUint32                         subpass;
-               DE_NULL,                                        // VkFramebuffer                    framebuffer;
-               VK_FALSE,                                       // VkBool32                         occlusionQueryEnable;
-               0u,                                             // VkQueryControlFlags              queryFlags;
-               0u,                                             // VkQueryPipelineStatisticFlags    pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
@@ -821,6 +816,7 @@ tcu::TestStatus TimestampTestInstance::iterate(void)
                DE_NULL,                                            // const void*             pNext;
                0u,                                                 // deUint32                waitSemaphoreCount;
                DE_NULL,                                            // const VkSemaphore*      pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                 // deUint32                commandBufferCount;
                &m_cmdBuffer.get(),                                 // const VkCommandBuffer*  pCommandBuffers;
                0u,                                                 // deUint32                signalSemaphoreCount;
@@ -905,11 +901,11 @@ Move<VkBuffer> TimestampTestInstance::createBufferAndBindMemory(VkDeviceSize siz
 }
 
 Move<VkImage> TimestampTestInstance::createImage2DAndBindMemory(VkFormat                          format,
-                                                                                                                                 deInt32                           width,
-                                                                                                                                 deInt32                           height,
-                                                                                                                                 VkBufferUsageFlags                usage,
-                                                                                                                                 VkSampleCountFlagBits             sampleCount,
-                                                                                                                                 de::details::MovePtr<Allocation>* pAlloc)
+                                                                                                                               deUint32                          width,
+                                                                                                                               deUint32                          height,
+                                                                                                                               VkBufferUsageFlags                usage,
+                                                                                                                               VkSampleCountFlagBits             sampleCount,
+                                                                                                                               de::details::MovePtr<Allocation>* pAlloc)
 {
        const DeviceInterface&      vk                  = m_context.getDeviceInterface();
        const VkDevice              vkDevice            = m_context.getDevice();
@@ -977,11 +973,11 @@ protected:
        virtual void buildVertexBuffer          (void);
        virtual void buildRenderPass            (VkFormat colorFormat,
                                                                                         VkFormat depthFormat);
-       virtual void buildFrameBuffer           (tcu::IVec2 renderSize,
+       virtual void buildFrameBuffer           (tcu::UVec2 renderSize,
                                                                                         VkFormat colorFormat,
                                                                                         VkFormat depthFormat);
 protected:
-       const tcu::IVec2                    m_renderSize;
+       const tcu::UVec2                    m_renderSize;
        const VkFormat                      m_colorFormat;
        const VkFormat                      m_depthFormat;
 
@@ -1129,7 +1125,7 @@ void BasicGraphicsTestInstance::buildRenderPass(VkFormat colorFormat, VkFormat d
 
 }
 
-void BasicGraphicsTestInstance::buildFrameBuffer(tcu::IVec2 renderSize, VkFormat colorFormat, VkFormat depthFormat)
+void BasicGraphicsTestInstance::buildFrameBuffer(tcu::UVec2 renderSize, VkFormat colorFormat, VkFormat depthFormat)
 {
        const DeviceInterface&      vk                   = m_context.getDeviceInterface();
        const VkDevice              vkDevice             = m_context.getDevice();
@@ -1250,12 +1246,7 @@ void BasicGraphicsTestInstance::configCommandBuffer(void)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                  sType;
                DE_NULL,                                        // const void*                      pNext;
                0u,                                             // VkCommandBufferUsageFlags        flags;
-               DE_NULL,                                        // VkRenderPass                     renderPass;
-               0u,                                             // deUint32                         subpass;
-               DE_NULL,                                        // VkFramebuffer                    framebuffer;
-               VK_FALSE,                                       // VkBool32                         occlusionQueryEnable;
-               0u,                                             // VkQueryControlFlags              queryFlags;
-               0u,                                             // VkQueryPipelineStatisticFlags    pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const VkClearValue attachmentClearValues[2] =
@@ -1277,9 +1268,7 @@ void BasicGraphicsTestInstance::configCommandBuffer(void)
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
 
-       deUint32 stage_count = (deUint32)m_stages.size();
-
-       vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, stage_count);
+       vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
        vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
@@ -1503,12 +1492,7 @@ void AdvGraphicsTestInstance::configCommandBuffer(void)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType              sType;
                DE_NULL,                                        // const void*                  pNext;
                0u,                                             // VkCommandBufferUsageFlags    flags;
-               DE_NULL,                                        // VkRenderPass                 renderPass;
-               0u,                                             // deUint32                     subpass;
-               DE_NULL,                                        // VkFramebuffer                framebuffer;
-               VK_FALSE,                                       // VkBool32                     occlusionQueryEnable;
-               0u,                                             // VkQueryControlFlags          queryFlags;
-               0u,                                             // VkQueryPipelineStatisticFlags   pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const VkClearValue attachmentClearValues[2] =
@@ -1530,9 +1514,7 @@ void AdvGraphicsTestInstance::configCommandBuffer(void)
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
 
-       deUint32 stage_count = (deUint32)m_stages.size();
-
-       vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, stage_count);
+       vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
        vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
@@ -1652,10 +1634,10 @@ BasicComputeTestInstance::BasicComputeTestInstance(Context&              context
                }
        }
        flushMappedMemoryRange(vk, vkDevice, bufferAlloc->getMemory(), bufferAlloc->getOffset(), size);
-    
+
        de::MovePtr<Allocation> dummyAlloc;
        m_outputBuf = createBufferAndBindMemory(size, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, &dummyAlloc);
-        
+
        std::vector<VkDescriptorBufferInfo>        descriptorInfos;
        descriptorInfos.push_back(makeDescriptorBufferInfo(*m_inputBuf, 0u, sizeof(tcu::Vec4) * 128u));
        descriptorInfos.push_back(makeDescriptorBufferInfo(*m_outputBuf, 0u, sizeof(tcu::Vec4) * 128u));
@@ -1758,18 +1740,13 @@ void BasicComputeTestInstance::configCommandBuffer(void)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType          sType;
                DE_NULL,                                        // const void*              pNext;
                0u,                                             // VkCmdBufferOptimizeFlags flags;
-               DE_NULL,                                        // VkRenderPass             renderPass;
-               0u,                                             // deUint32                 subpass;
-               DE_NULL,                                        // VkFramebuffer            framebuffer;
-               VK_FALSE,                                       // VkBool32                         occlusionQueryEnable;
-               0u,                                             // VkQueryControlFlags              queryFlags;
-               0u,                                             // VkQueryPipelineStatisticFlags    pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
 
        };
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
 
-       vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, 1u);
+       vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
        vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *m_computePipelines);
        vk.cmdBindDescriptorSets(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *m_pipelineLayout, 0u, 1u, &m_descriptorSet.get(), 0u, DE_NULL);
@@ -1817,8 +1794,8 @@ protected:
        Move<VkBuffer>  m_dstBuffer;
 
        VkFormat        m_imageFormat;
-       deInt32         m_imageWidth;
-       deInt32         m_imageHeight;
+       deUint32        m_imageWidth;
+       deUint32        m_imageHeight;
        VkDeviceSize    m_imageSize;
        Move<VkImage>   m_srcImage;
        Move<VkImage>   m_dstImage;
@@ -1906,12 +1883,7 @@ void TransferTestInstance::configCommandBuffer(void)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                  sType;
                DE_NULL,                                        // const void*                      pNext;
                0u,                                             // VkCmdBufferOptimizeFlags         flags;
-               DE_NULL,                                        // VkRenderPass                     renderPass;
-               0u,                                             // deUint32                         subpass;
-               DE_NULL,                                        // VkFramebuffer                    framebuffer;
-               VK_FALSE,                                       // VkBool32                         occlusionQueryEnable;
-               0u,                                             // VkQueryControlFlags              queryFlags;
-               0u,                                             // VkQueryPipelineStatisticFlags    pipelineStatistics;
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
@@ -1940,7 +1912,7 @@ void TransferTestInstance::configCommandBuffer(void)
        vk.cmdClearColorImage(*m_cmdBuffer, *m_dstImage, VK_IMAGE_LAYOUT_GENERAL, &dstClearValue, 1u, &subRange);
 
 
-       vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, 1u);
+       vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
        // Copy Operations
        const VkImageSubresourceLayers imgSubResCopy =
@@ -1953,6 +1925,7 @@ void TransferTestInstance::configCommandBuffer(void)
 
        const VkOffset3D nullOffset  = {0u, 0u, 0u};
        const VkExtent3D imageExtent = {m_imageWidth, m_imageHeight, 1u};
+       const VkOffset3D imageOffset = {(int)m_imageWidth, (int)m_imageHeight, 1};
        switch(m_method)
        {
                case TRANSFER_METHOD_COPY_BUFFER:
@@ -2013,11 +1986,15 @@ void TransferTestInstance::configCommandBuffer(void)
                                const VkImageBlit imageBlt =
                                {
                                        imgSubResCopy,                          // VkImageSubresourceCopy  srcSubresource;
-                                       nullOffset,                             // VkOffset3D              srcOffset;
-                                       imageExtent,                            // VkExtent3D              srcExtent;
+                                       {
+                                               nullOffset,
+                                               imageOffset,
+                                       },
                                        imgSubResCopy,                          // VkImageSubresourceCopy  destSubresource;
-                                       nullOffset,                             // VkOffset3D              destOffset;
-                                       imageExtent,                            // VkExtent3D              destExtent;
+                                       {
+                                               nullOffset,
+                                               imageOffset,
+                                       }
                                };
                                vk.cmdBlitImage(*m_cmdBuffer, *m_srcImage, VK_IMAGE_LAYOUT_GENERAL, *m_dstImage, VK_IMAGE_LAYOUT_GENERAL, 1u, &imageBlt, VK_FILTER_NEAREST);
                                break;
@@ -2055,6 +2032,7 @@ void TransferTestInstance::configCommandBuffer(void)
                        {
                                vk.cmdWriteTimestamp(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, *m_queryPool, 0u);
                                vk.cmdCopyQueryPoolResults(*m_cmdBuffer, *m_queryPool, 0u, 1u, *m_dstBuffer, 0u, 8u, VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
+                               vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, 1u);
                                break;
                        }
                case TRANSFER_METHOD_RESOLVE_IMAGE:
index 666844c..eb23eb9 100644 (file)
@@ -220,7 +220,7 @@ private:
        std::vector<VkBuffer>                                   m_vertexBuffers;
        std::vector<Allocation*>                                m_vertexBufferAllocs;
 
-       const tcu::IVec2                                                m_renderSize;
+       const tcu::UVec2                                                m_renderSize;
        const VkFormat                                                  m_colorFormat;
 
        Move<VkImage>                                                   m_colorImage;
@@ -431,7 +431,7 @@ std::string VertexInputTest::getGlslVertexCheck (void) const
        glslCode <<
                "       if (okCount == " << totalInputComponentCount << ")\n"
                "       {\n"
-               "               if (gl_InstanceID == 0)\n"
+               "               if (gl_InstanceIndex == 0)\n"
                "                       vtxColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
                "               else\n"
                "                       vtxColor = vec4(0.0, 0.0, 1.0, 1.0);\n"
@@ -440,20 +440,20 @@ std::string VertexInputTest::getGlslVertexCheck (void) const
                "       {\n"
                "               vtxColor = vec4(okCount / float(" << totalInputComponentCount << "), 0.0f, 0.0f, 1.0);\n" <<
                "       }\n\n"
-               "       if (gl_InstanceID == 0)\n"
+               "       if (gl_InstanceIndex == 0)\n"
                "       {\n"
-               "               if (gl_VertexID == 0) gl_Position = vec4(-1.0, -1.0, 0.0, 1.0);\n"
-               "               else if (gl_VertexID == 1) gl_Position = vec4(0.0, -1.0, 0.0, 1.0);\n"
-               "               else if (gl_VertexID == 2) gl_Position = vec4(-1.0, 1.0, 0.0, 1.0);\n"
-               "               else if (gl_VertexID == 3) gl_Position = vec4(0.0, 1.0, 0.0, 1.0);\n"
+               "               if (gl_VertexIndex == 0) gl_Position = vec4(-1.0, -1.0, 0.0, 1.0);\n"
+               "               else if (gl_VertexIndex == 1) gl_Position = vec4(0.0, -1.0, 0.0, 1.0);\n"
+               "               else if (gl_VertexIndex == 2) gl_Position = vec4(-1.0, 1.0, 0.0, 1.0);\n"
+               "               else if (gl_VertexIndex == 3) gl_Position = vec4(0.0, 1.0, 0.0, 1.0);\n"
                "               else gl_Position = vec4(0.0);\n"
                "       }\n"
                "       else\n"
                "       {\n"
-               "               if (gl_VertexID == 0) gl_Position = vec4(0.0, -1.0, 0.0, 1.0);\n"
-               "               else if (gl_VertexID == 1) gl_Position = vec4(1.0, -1.0, 0.0, 1.0);\n"
-               "               else if (gl_VertexID == 2) gl_Position = vec4(0.0, 1.0, 0.0, 1.0);\n"
-               "               else if (gl_VertexID == 3) gl_Position = vec4(1.0, 1.0, 0.0, 1.0);\n"
+               "               if (gl_VertexIndex == 0) gl_Position = vec4(0.0, -1.0, 0.0, 1.0);\n"
+               "               else if (gl_VertexIndex == 1) gl_Position = vec4(1.0, -1.0, 0.0, 1.0);\n"
+               "               else if (gl_VertexIndex == 2) gl_Position = vec4(0.0, 1.0, 0.0, 1.0);\n"
+               "               else if (gl_VertexIndex == 3) gl_Position = vec4(1.0, 1.0, 0.0, 1.0);\n"
                "               else gl_Position = vec4(0.0);\n"
                "       }\n";
 
@@ -464,7 +464,7 @@ std::string VertexInputTest::getGlslAttributeConditions (const AttributeInfo& at
 {
        std::ostringstream      glslCode;
        std::ostringstream      attributeVar;
-       const std::string       indexId                         = (attributeInfo.inputRate == VK_VERTEX_INPUT_RATE_VERTEX) ? "gl_VertexID" : "gl_InstanceID";
+       const std::string       indexId                         = (attributeInfo.inputRate == VK_VERTEX_INPUT_RATE_VERTEX) ? "gl_VertexIndex" : "gl_InstanceIndex";
        const int                       componentCount          = VertexInputTest::s_glslTypeDescriptions[attributeInfo.glslType].vertexInputComponentCount;
        const int                       vertexInputCount        = VertexInputTest::s_glslTypeDescriptions[attributeInfo.glslType].vertexInputCount;
        const deUint32          totalComponentCount     = componentCount * vertexInputCount;
@@ -1009,12 +1009,7 @@ VertexInputInstance::VertexInputInstance (Context&                                                                                               context,
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCommandBufferUsageFlags            flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       false,                                                                                  // VkBool32                                                     occlusionQueryEnable;
-                       0u,                                                                                             // VkQueryControlFlags                          queryFlags;
-                       0u                                                                                              // VkQueryPipelineStatisticFlags        pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue attachmentClearValue = defaultClearValue(m_colorFormat);
@@ -1280,6 +1275,7 @@ tcu::TestStatus VertexInputInstance::iterate (void)
                DE_NULL,                                                // const void*                          pNext;
                0u,                                                             // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,                                                             // deUint32                                     commandBufferCount;
                &m_cmdBuffer.get(),                             // const VkCommandBuffer*       pCommandBuffers;
                0u,                                                             // deUint32                                     signalSemaphoreCount;
index e619fcc..93f840e 100644 (file)
@@ -135,6 +135,7 @@ BufferViewCreateInfo::BufferViewCreateInfo (vk::VkBuffer    _buffer,
        sType = vk::VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
        pNext = DE_NULL;
 
+       flags   = 0u;
        buffer  = _buffer;
        format  = _format;
        offset  = _offset;
@@ -472,21 +473,19 @@ SubpassDescription::SubpassDescription (vk::VkPipelineBindPoint                           _pipelineBind
                                                                                const vk::VkAttachmentReference*        _resolveAttachments,
                                                                                vk::VkAttachmentReference                       depthStencilAttachment,
                                                                                deUint32                                                        _preserveAttachmentCount,
-                                                                               const vk::VkAttachmentReference*        _preserveAttachments)
+                                                                               const deUint32*                                         _preserveAttachments)
 {
        m_inputAttachments = std::vector<vk::VkAttachmentReference>(_inputAttachments, _inputAttachments + _inputAttachmentCount);
        m_colorAttachments = std::vector<vk::VkAttachmentReference>(_colorAttachments, _colorAttachments + _colorAttachmentCount);
 
        if (_resolveAttachments)
-       {
                m_resolveAttachments = std::vector<vk::VkAttachmentReference>(_resolveAttachments, _resolveAttachments + _colorAttachmentCount);
-       }
 
-       m_preserveAttachments = std::vector<vk::VkAttachmentReference>(_preserveAttachments, _preserveAttachments + _preserveAttachmentCount);
+       m_preserveAttachments = std::vector<deUint32>(_preserveAttachments, _preserveAttachments + _preserveAttachmentCount);
 
        m_depthStencilAttachment = depthStencilAttachment;
 
-       flags = _flags;
+       flags                                   = _flags;
        pipelineBindPoint               = _pipelineBindPoint;
        inputAttachmentCount    = _inputAttachmentCount;
        pInputAttachments               = DE_NULL;
@@ -497,25 +496,17 @@ SubpassDescription::SubpassDescription (vk::VkPipelineBindPoint                           _pipelineBind
        pPreserveAttachments    = DE_NULL;
        preserveAttachmentCount = _preserveAttachmentCount;
 
-       if (m_inputAttachments.size())
-       {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
 
-       if (m_colorAttachments.size())
-       {
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size())
-       {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
-       if (m_preserveAttachments.size())
-       {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 }
 
 SubpassDescription::SubpassDescription (const vk::VkSubpassDescription& rhs)
@@ -529,42 +520,31 @@ SubpassDescription::SubpassDescription (const vk::VkSubpassDescription& rhs)
                rhs.pColorAttachments, rhs.pColorAttachments + rhs.colorAttachmentCount);
 
        if (rhs.pResolveAttachments)
-       {
                m_resolveAttachments = std::vector<vk::VkAttachmentReference>(
                        rhs.pResolveAttachments, rhs.pResolveAttachments + rhs.colorAttachmentCount);
-       }
-       m_preserveAttachments = std::vector<vk::VkAttachmentReference>(
+
+       m_preserveAttachments = std::vector<deUint32>(
                rhs.pPreserveAttachments, rhs.pPreserveAttachments + rhs.preserveAttachmentCount);
 
        if (rhs.pDepthStencilAttachment)
-       {
                m_depthStencilAttachment = *rhs.pDepthStencilAttachment;
-       }
 
-       if (m_inputAttachments.size())
-       {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
-       if (m_colorAttachments.size())
-       {
+
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size())
-       {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
        pDepthStencilAttachment = &m_depthStencilAttachment;
 
-       if (m_preserveAttachments.size())
-       {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 }
 
-SubpassDescription::SubpassDescription (const SubpassDescription& rhs)
-{
+SubpassDescription::SubpassDescription (const SubpassDescription& rhs) {
        *this = rhs;
 }
 
@@ -578,26 +558,19 @@ SubpassDescription& SubpassDescription::operator= (const SubpassDescription& rhs
        m_preserveAttachments   = rhs.m_preserveAttachments;
        m_depthStencilAttachment = rhs.m_depthStencilAttachment;
 
-       if (m_inputAttachments.size())
-       {
+       if (!m_inputAttachments.empty())
                pInputAttachments = &m_inputAttachments[0];
-       }
-       if (m_colorAttachments.size())
-       {
+
+       if (!m_colorAttachments.empty())
                pColorAttachments = &m_colorAttachments[0];
-       }
 
-       if (m_resolveAttachments.size())
-       {
+       if (!m_resolveAttachments.empty())
                pResolveAttachments = &m_resolveAttachments[0];
-       }
 
        pDepthStencilAttachment = &m_depthStencilAttachment;
 
-       if (m_preserveAttachments.size())
-       {
+       if (!m_preserveAttachments.empty())
                pPreserveAttachments = &m_preserveAttachments[0];
-       }
 
        return *this;
 }
@@ -632,35 +605,10 @@ SubpassDependency::SubpassDependency (const vk::VkSubpassDependency& rhs)
 
 CmdBufferBeginInfo::CmdBufferBeginInfo (vk::VkCommandBufferUsageFlags _flags)
 {
-       sType = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
-       pNext = DE_NULL;
-       renderPass                              = DE_NULL;
-       subpass                                 = 0;
-       framebuffer                             = DE_NULL;
-       flags                                   = _flags;
-       occlusionQueryEnable    = false;
-       queryFlags                              = 0u;
-       pipelineStatistics              = 0u;
-}
-
-CmdBufferBeginInfo::CmdBufferBeginInfo (vk::VkRenderPass                                       _renderPass,
-                                                                               deUint32                                                        _subpass,
-                                                                               vk::VkFramebuffer                                       _framebuffer,
-                                                                               vk::VkCommandBufferUsageFlags           _flags,
-                                                                               bool                                                            _occlusionQueryEnable,\r
-                                                                               vk::VkQueryControlFlags                         _queryFlags,\r
-                                                                               vk::VkQueryPipelineStatisticFlags       _pipelineStatistics)
-{
-
-       sType = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
-       pNext = DE_NULL;
-       renderPass                              = _renderPass;
-       subpass                                 = _subpass;
-       framebuffer                             = _framebuffer;
-       flags                                   = _flags;
-       occlusionQueryEnable    = _occlusionQueryEnable;
-       queryFlags                              = _queryFlags;
-       pipelineStatistics              = _pipelineStatistics;
+       sType                           = vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+       pNext                           = DE_NULL;
+       flags                           = _flags;
+       pInheritanceInfo        = DE_NULL;
 }
 
 DescriptorPoolCreateInfo::DescriptorPoolCreateInfo (const std::vector<vk::VkDescriptorPoolSize>&       poolSizeCounts,
@@ -693,7 +641,7 @@ DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo (deUint32 _bindingC
        pNext = DE_NULL;
        flags = 0;
        bindingCount = _bindingCount;
-       pBinding         = _pBindings;
+       pBindings        = _pBindings;
 }
 
 PipelineLayoutCreateInfo::PipelineLayoutCreateInfo (deUint32                                                   _descriptorSetCount,
@@ -709,6 +657,8 @@ PipelineLayoutCreateInfo::PipelineLayoutCreateInfo (deUint32                                                        _descriptorSe
 
        sType = vk::VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
        pNext = DE_NULL;
+
+       flags                                   = 0u;
        setLayoutCount                  = static_cast<deUint32>(m_setLayouts.size());
        pSetLayouts                             = setLayoutCount > 0 ? &m_setLayouts[0] : DE_NULL;
        pushConstantRangeCount  = static_cast<deUint32>(m_pushConstantRanges.size());
@@ -732,7 +682,8 @@ PipelineLayoutCreateInfo::PipelineLayoutCreateInfo (const std::vector<vk::VkDesc
        sType = vk::VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
        pNext = DE_NULL;
 
-       setLayoutCount = static_cast<deUint32>(m_setLayouts.size());
+       flags                   = 0u;
+       setLayoutCount  = static_cast<deUint32>(m_setLayouts.size());
 
        if (setLayoutCount)
        {
@@ -789,11 +740,12 @@ PipelineCreateInfo::InputAssemblerState::InputAssemblerState (vk::VkPrimitiveTop
        primitiveRestartEnable  = _primitiveRestartEnable;
 }
 
-PipelineCreateInfo::TesselationState::TesselationState (deUint32 _patchControlPoints)
+PipelineCreateInfo::TessellationState::TessellationState (deUint32 _patchControlPoints)
 {
        sType = vk::VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
        pNext = DE_NULL;
-       patchControlPoints = _patchControlPoints;
+       flags                           = 0u;
+       patchControlPoints      = _patchControlPoints;
 }
 
 PipelineCreateInfo::ViewportState::ViewportState (deUint32                                             _viewportCount,
@@ -834,6 +786,7 @@ PipelineCreateInfo::ViewportState::ViewportState (const ViewportState& other)
 {
        sType                   = other.sType;
        pNext                   = other.pNext;
+       flags                   = other.flags;
        viewportCount   = other.viewportCount;
        scissorCount    = other.scissorCount;
 
@@ -848,6 +801,7 @@ PipelineCreateInfo::ViewportState& PipelineCreateInfo::ViewportState::operator=
 {
        sType                   = other.sType;
        pNext                   = other.pNext;
+       flags                   = other.flags;
        viewportCount   = other.viewportCount;
        scissorCount    = other.scissorCount;
 
@@ -909,6 +863,7 @@ PipelineCreateInfo::MultiSampleState::MultiSampleState (const MultiSampleState&
 {
        sType                                   = other.sType;
        pNext                                   = other.pNext;
+       flags                                   = other.flags;
        rasterizationSamples    = other.rasterizationSamples;
        sampleShadingEnable             = other.sampleShadingEnable;
        minSampleShading                = other.minSampleShading;
@@ -923,6 +878,7 @@ PipelineCreateInfo::MultiSampleState& PipelineCreateInfo::MultiSampleState::oper
 {
        sType = other.sType;
        pNext = other.pNext;
+       flags                                   = other.flags;
        rasterizationSamples    = other.rasterizationSamples;
        sampleShadingEnable             = other.sampleShadingEnable;
        minSampleShading                = other.minSampleShading;
@@ -957,6 +913,7 @@ PipelineCreateInfo::ColorBlendState::ColorBlendState (deUint32                                                                                      _attach
 {
        sType = vk::VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
        pNext   = DE_NULL;
+       flags                                   = 0u;
        logicOpEnable                   = _logicOpEnable;
        logicOp                                 = _logicOp;
        attachmentCount                 = static_cast<deUint32>(m_attachments.size());
@@ -968,6 +925,7 @@ PipelineCreateInfo::ColorBlendState::ColorBlendState (const vk::VkPipelineColorB
 {
        sType = createInfo.sType;
        pNext = createInfo.pNext;
+       flags                                   = createInfo.flags;
        logicOpEnable                   = createInfo.logicOpEnable;
        logicOp                                 = createInfo.logicOp;
        attachmentCount                 = static_cast<deUint32>(m_attachments.size());
@@ -979,6 +937,7 @@ PipelineCreateInfo::ColorBlendState::ColorBlendState (const ColorBlendState& cre
 {
        sType = createInfo.sType;
        pNext = createInfo.pNext;
+       flags                                   = createInfo.flags;
        logicOpEnable                   = createInfo.logicOpEnable;
        logicOp                                 = createInfo.logicOp;
        attachmentCount                 = static_cast<deUint32>(m_attachments.size());
@@ -1052,6 +1011,7 @@ PipelineCreateInfo::DynamicState::DynamicState (const std::vector<vk::VkDynamicS
 {
        sType = vk::VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
        pNext = DE_NULL;
+       flags = 0u;
 
        if (!_dynamicStates.size())
        {
@@ -1071,6 +1031,7 @@ PipelineCreateInfo::DynamicState::DynamicState (const DynamicState &other)
 {
        sType = other.sType;
        pNext = other.pNext;
+       flags = other.flags;
 
        dynamicStateCount = other.dynamicStateCount;
 
@@ -1082,6 +1043,7 @@ PipelineCreateInfo::DynamicState& PipelineCreateInfo::DynamicState::operator= (c
 {
        sType = other.sType;
        pNext = other.pNext;
+       flags = other.flags;
 
        dynamicStateCount = other.dynamicStateCount;
 
@@ -1209,6 +1171,7 @@ SamplerCreateInfo::SamplerCreateInfo (vk::VkFilter                                _magFilter,
                                                                          vk::VkSamplerAddressMode      _addressModeV,
                                                                          vk::VkSamplerAddressMode      _addressModeW,
                                                                          float                                         _mipLodBias,
+                                                                         vk::VkBool32                          _anisotropyEnable,
                                                                          float                                         _maxAnisotropy,
                                                                          vk::VkBool32                          _compareEnable,
                                                                          vk::VkCompareOp                       _compareOp,
@@ -1227,6 +1190,7 @@ SamplerCreateInfo::SamplerCreateInfo (vk::VkFilter                                _magFilter,
        addressModeV                    = _addressModeV;
        addressModeW                    = _addressModeW;
        mipLodBias                              = _mipLodBias;
+       anisotropyEnable                = _anisotropyEnable;
        maxAnisotropy                   = _maxAnisotropy;
        compareEnable                   = _compareEnable;
        compareOp                               = _compareOp;
index 7b980d2..1c1f7e5 100644 (file)
@@ -175,7 +175,7 @@ public:
                                                                         const vk::VkAttachmentReference*       resolveAttachments,
                                                                         vk::VkAttachmentReference                      depthStencilAttachment,
                                                                         deUint32                                                       preserveAttachmentCount,
-                                                                        const vk::VkAttachmentReference*       preserveAttachments);
+                                                                        const deUint32*                                        preserveAttachments);
 
        SubpassDescription                              (const vk::VkSubpassDescription&        other);
        SubpassDescription                              (const SubpassDescription&                      other);
@@ -185,7 +185,7 @@ private:
        std::vector<vk::VkAttachmentReference>  m_inputAttachments;
        std::vector<vk::VkAttachmentReference>  m_colorAttachments;
        std::vector<vk::VkAttachmentReference>  m_resolveAttachments;
-       std::vector<vk::VkAttachmentReference>  m_preserveAttachments;
+       std::vector<deUint32>                                   m_preserveAttachments;
 
        vk::VkAttachmentReference                               m_depthStencilAttachment;
 };
@@ -261,13 +261,6 @@ class CmdBufferBeginInfo : public vk::VkCommandBufferBeginInfo
 {
 public:
        CmdBufferBeginInfo (vk::VkCommandBufferUsageFlags               flags                                   = 0);
-       CmdBufferBeginInfo (vk::VkRenderPass                                    renderPass,
-                                               deUint32                                                        subpass,
-                                               vk::VkFramebuffer                                       framebuffer,
-                                               vk::VkCommandBufferUsageFlags           flags                                   = 0,
-                                               bool                                                            occlusionQueryEnable    = false,
-                                               vk::VkQueryControlFlags                         queryFlags                              = 0u,
-                                               vk::VkQueryPipelineStatisticFlags       pipelineStatistics              = 0u);
 };
 
 class DescriptorPoolSize : public vk::VkDescriptorPoolSize
@@ -334,10 +327,10 @@ public:
                InputAssemblerState (vk::VkPrimitiveTopology topology, vk::VkBool32 primitiveRestartEnable = false);
        };
 
-       class TesselationState : public vk::VkPipelineTessellationStateCreateInfo
+       class TessellationState : public vk::VkPipelineTessellationStateCreateInfo
        {
        public:
-               TesselationState (deUint32 patchControlPoints = 0);
+               TessellationState (deUint32 patchControlPoints = 0);
        };
 
        class ViewportState : public vk::VkPipelineViewportStateCreateInfo
@@ -511,6 +504,7 @@ public:
                                           vk::VkSamplerAddressMode     addressV                                = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
                                           vk::VkSamplerAddressMode     addressW                                = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
                                           float                                        mipLodBias                              = 0.0f,
+                                          vk::VkBool32                         anisotropyEnable                = vk::VK_FALSE,
                                           float                                        maxAnisotropy                   = 1.0f,
                                           vk::VkBool32                         compareEnable                   = false,
                                           vk::VkCompareOp                      compareOp                               = vk::VK_COMPARE_OP_ALWAYS,
index 5e49143..4967248 100644 (file)
@@ -353,10 +353,10 @@ void Image::readUsingBuffer (vk::VkQueue                          queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                               false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                const vk::VkBufferImageCopy region =
@@ -364,7 +364,7 @@ void Image::readUsingBuffer (vk::VkQueue                            queue,
                        0, 0, 0,
                        { aspect, mipLevel, arrayElement, 1 },
                        offset,
-                       { width, height, depth }
+                       { (deUint32)width, (deUint32)height, (deUint32)depth }
                };
 
                m_vk.cmdCopyImageToBuffer(*copyCmdBuffer, object(), layout, stagingResource->object(), 1, &region);
@@ -376,6 +376,7 @@ void Image::readUsingBuffer (vk::VkQueue                            queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -441,7 +442,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
 {
        de::SharedPtr<Image> stagingResource;
        {
-               vk::VkExtent3D stagingExtent = {width, height, depth};
+               vk::VkExtent3D stagingExtent = {(deUint32)width, (deUint32)height, (deUint32)depth};
                ImageCreateInfo stagingResourceCreateInfo(type, m_format, stagingExtent, 1, 1, vk::VK_SAMPLE_COUNT_1_BIT,
                                                                                                  vk::VK_IMAGE_TILING_LINEAR, vk::VK_IMAGE_USAGE_TRANSFER_DST_BIT);
 
@@ -468,7 +469,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
                transition2DImage(m_vk, *copyCmdBuffer, stagingResource->object(), aspect, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL);
 
                const vk::VkOffset3D zeroOffset = { 0, 0, 0 };
-               vk::VkImageCopy region = { {aspect, mipLevel, arrayElement, 1}, offset, {aspect, 0, 0, 1}, zeroOffset, {width, height, depth} };
+               vk::VkImageCopy region = { {aspect, mipLevel, arrayElement, 1}, offset, {aspect, 0, 0, 1}, zeroOffset, {(deUint32)width, (deUint32)height, (deUint32)depth} };
 
                m_vk.cmdCopyImage(*copyCmdBuffer, object(), layout, stagingResource->object(), vk::VK_IMAGE_LAYOUT_GENERAL, 1, &region);
                VK_CHECK(m_vk.endCommandBuffer(*copyCmdBuffer));
@@ -479,6 +480,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -586,7 +588,7 @@ void Image::upload (vk::VkQueue                                     queue,
        DE_ASSERT(layout == vk::VK_IMAGE_LAYOUT_GENERAL || layout == vk::VK_IMAGE_LAYOUT_UNDEFINED || layout == vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
 
        de::SharedPtr<Image> stagingResource;
-       vk::VkExtent3D extent = {width, height, depth};
+       vk::VkExtent3D extent = {(deUint32)width, (deUint32)height, (deUint32)depth};
        ImageCreateInfo stagingResourceCreateInfo(
                type, m_format, extent, 1, 1, vk::VK_SAMPLE_COUNT_1_BIT,
                vk::VK_IMAGE_TILING_LINEAR, vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
@@ -637,9 +639,10 @@ void Image::upload (vk::VkQueue                                    queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                transition2DImage(m_vk, *copyCmdBuffer, stagingResource->object(), aspect, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL);
@@ -648,7 +651,7 @@ void Image::upload (vk::VkQueue                                     queue,
                                                                        zeroOffset,
                                                                        {aspect, mipLevel, arrayElement, 1},
                                                                        offset,
-                                                                       {width, height, depth}};
+                                                                       {(deUint32)width, (deUint32)height, (deUint32)depth}};
 
                m_vk.cmdCopyImage(*copyCmdBuffer, stagingResource->object(),
                                                                vk::VK_IMAGE_LAYOUT_GENERAL, object(), layout, 1, &region);
@@ -660,6 +663,7 @@ void Image::upload (vk::VkQueue                                     queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -756,9 +760,10 @@ void Image::uploadUsingBuffer (vk::VkQueue                                 queue,
                        barrier.subresourceRange.baseArrayLayer = 0;
                        barrier.subresourceRange.layerCount = m_layerCount;
 
-                       void* barriers[] = { &barrier };
-
-                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                                       0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                                       0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                                       1, &barrier);
                }
 
                vk::VkBufferImageCopy region =
@@ -766,7 +771,7 @@ void Image::uploadUsingBuffer (vk::VkQueue                                  queue,
                        0, 0, 0,
                        { aspect, mipLevel, arrayElement, 1 },
                        offset,
-                       { width, height, depth }
+                       { (deUint32)width, (deUint32)height, (deUint32)depth }
                };
 
                m_vk.cmdCopyBufferToImage(*copyCmdBuffer, stagingResource->object(),
@@ -779,6 +784,7 @@ void Image::uploadUsingBuffer (vk::VkQueue                                  queue,
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &copyCmdBuffer.get(),                           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -906,9 +912,10 @@ void transition2DImage (const vk::DeviceInterface& vk,
        barrier.subresourceRange.baseArrayLayer = 0;
        barrier.subresourceRange.layerCount             = 1;
 
-       void* barriers[] = { &barrier };
-
-       vk.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, DE_LENGTH_OF_ARRAY(barriers), barriers);
+       vk.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (vk::VkDependencyFlags)0,
+                                                 0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                 0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                 1, &barrier);
 }
 
 void initialTransitionColor2DImage (const vk::DeviceInterface &vk, vk::VkCommandBuffer cmdBuffer, vk::VkImage image, vk::VkImageLayout layout)
index 4968301..dbd6284 100644 (file)
@@ -377,7 +377,7 @@ tcu::TestStatus     BasicOcclusionQueryTestInstance::iterate (void)
                1u,                                                                                                     // deUint32                                     bufferCount;
        };
        vk::Unique<vk::VkCommandBuffer> cmdBuffer                       (vk::allocateCommandBuffer(vk, device, &cmdBufferAllocateInfo));
-       const CmdBufferBeginInfo                beginInfo                       (DE_NULL, 0, DE_NULL, 0u, true, m_testVector.queryControlFlags);
+       const CmdBufferBeginInfo                beginInfo                       (0u);
 
        vk.beginCommandBuffer(*cmdBuffer, &beginInfo);
 
@@ -425,6 +425,7 @@ tcu::TestStatus     BasicOcclusionQueryTestInstance::iterate (void)
                DE_NULL,                                                        // const void*                          pNext;
                0,                                                                      // deUint32                                     waitSemaphoreCount;
                DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+               (const vk::VkPipelineStageFlags*)DE_NULL,
                1,                                                                      // deUint32                                     commandBufferCount;
                &cmdBuffer.get(),                                       // const VkCommandBuffer*       pCommandBuffers;
                0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -645,6 +646,7 @@ tcu::TestStatus OcclusionQueryTestInstance::iterate (void)
                        DE_NULL,                                                        // const void*                          pNext;
                        0,                                                                      // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1,                                                                      // deUint32                                     commandBufferCount;
                        &m_renderCommandBuffer.get(),           // const VkCommandBuffer*       pCommandBuffers;
                        0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -670,6 +672,7 @@ tcu::TestStatus OcclusionQueryTestInstance::iterate (void)
                                DE_NULL,                                                        // const void*                          pNext;
                                0,                                                                      // deUint32                                     waitSemaphoreCount;
                                DE_NULL,                                                        // const VkSemaphore*           pWaitSemaphores;
+                               (const vk::VkPipelineStageFlags*)DE_NULL,
                                1,                                                                      // deUint32                                     commandBufferCount;
                                &m_copyResultsCommandBuffer.get(),      // const VkCommandBuffer*       pCommandBuffers;
                                0,                                                                      // deUint32                                     signalSemaphoreCount;
@@ -725,7 +728,7 @@ vk::Move<vk::VkCommandBuffer> OcclusionQueryTestInstance::recordRender (vk::VkCo
                1u,                                                                                                     // deUint32                                     bufferCount;
        };
        vk::Move<vk::VkCommandBuffer>   cmdBuffer       (vk::allocateCommandBuffer(vk, device, &cmdBufferAllocateInfo));
-       CmdBufferBeginInfo                              beginInfo       (DE_NULL, 0, DE_NULL, 0u, true, m_testVector.queryControlFlags);
+       CmdBufferBeginInfo                              beginInfo       (0u);
 
        vk.beginCommandBuffer(*cmdBuffer, &beginInfo);
 
@@ -806,7 +809,7 @@ vk::Move<vk::VkCommandBuffer> OcclusionQueryTestInstance::recordCopyResults (vk:
                1u,                                                                                                     // deUint32                                     bufferCount;
        };
        vk::Move<vk::VkCommandBuffer>   cmdBuffer       (vk::allocateCommandBuffer(vk, device, &cmdBufferAllocateInfo));
-       const CmdBufferBeginInfo                beginInfo       (DE_NULL, 0, DE_NULL, 0u, true, m_testVector.queryControlFlags);
+       const CmdBufferBeginInfo                beginInfo       (0u);
 
        vk.beginCommandBuffer(*cmdBuffer, &beginInfo);
        vk.cmdCopyQueryPoolResults(*cmdBuffer, m_queryPool, 0, NUM_QUERIES_IN_POOL, m_queryPoolResultsBuffer->object(), /*dstOffset*/ 0, m_testVector.queryResultsStride, m_queryResultFlags);
index 75f08de..76d5709 100644 (file)
@@ -5,8 +5,6 @@ set(DEQP_VK_SHADEREXECUTOR_SRCS
    vktShaderExecutor.hpp
    vktShaderBuiltinTests.cpp
    vktShaderBuiltinTests.hpp
-   vktShaderBuiltinConstantTests.cpp
-   vktShaderBuiltinConstantTests.hpp
    vktShaderCommonFunctionTests.cpp
    vktShaderCommonFunctionTests.hpp
    vktShaderIntegerFunctionTests.cpp
index ad318ce..8077972 100644 (file)
@@ -1041,10 +1041,13 @@ tcu::TestStatus AtomicCounterIndexingCaseInstance::iterate (void)
        std::vector<deUint32>           outValues                       (numInvocations*numOps);
        deUint32                                        bindingLocation         = getFirstFreeBindingLocation(m_shaderType);
 
+
+       const deUint32 atomicCounterLocation = bindingLocation++;
+
        {
                DE_ASSERT(numCounters <= 4);
                // Add the atomic counters' base value, all zero.
-               m_uniformSetup->addData(new UniformData<tcu::Mat4>(bindingLocation++, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, tcu::Mat4(0.0)));
+               m_uniformSetup->addData(new UniformData<tcu::Mat4>(atomicCounterLocation, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, tcu::Mat4(0.0)));
 
                if (m_indexExprType == INDEX_EXPR_TYPE_DYNAMIC_UNIFORM)
                {
@@ -1080,6 +1083,13 @@ tcu::TestStatus AtomicCounterIndexingCaseInstance::iterate (void)
                for (int opNdx = 0; opNdx < numOps; opNdx++)
                        numHits[m_opIndices[opNdx]] += 1;
 
+               // Read counter values
+               {
+                       const void* mapPtr = m_executor.getBufferPtr(atomicCounterLocation);
+                       DE_ASSERT(mapPtr != DE_NULL);
+                       std::copy((const deUint32*)mapPtr, (const deUint32*)mapPtr + numCounters, &counterValues[0]);
+               }
+
                // Verify counter values
                for (int counterNdx = 0; counterNdx < numCounters; counterNdx++)
                {
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinConstantTests.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinConstantTests.cpp
deleted file mode 100644 (file)
index 5dfa16f..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/*------------------------------------------------------------------------
- * Vulkan Conformance Tests
- * ------------------------
- *
- * Copyright (c) 2015 The Khronos Group Inc.
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice(s) and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * The Materials are Confidential Information as defined by the
- * Khronos Membership Agreement until designated non-confidential by Khronos,
- * at which point this condition clause shall be removed.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- *
- *//*!
- * \file
- * \brief Shader built-in constant tests.
- *//*--------------------------------------------------------------------*/
-
-#include "vktShaderBuiltinConstantTests.hpp"
-#include "vktShaderExecutor.hpp"
-#include "deUniquePtr.hpp"
-#include "deStringUtil.hpp"
-#include "tcuTestLog.hpp"
-
-using std::string;
-using std::vector;
-using tcu::TestLog;
-using namespace vk;
-
-namespace vkt
-{
-namespace shaderexecutor
-{
-
-namespace
-{
-
-static deUint32 getUint32 (deUint32 VkPhysicalDeviceLimits::* ptr, Context &ctx)
-{
-       VkPhysicalDeviceProperties properties;
-       ctx.getInstanceInterface().getPhysicalDeviceProperties(ctx.getPhysicalDevice(), &properties);
-       return properties.limits.*ptr;
-}
-
-template<deUint32 VkPhysicalDeviceLimits::* ptr>
-static deUint32 getUint32 (Context &ctx)
-{
-       return getUint32(ptr, ctx);
-}
-
-#define GET_UINT32(name) getUint32<&VkPhysicalDeviceLimits::name>
-
-static deInt32 getInt32 (deInt32 VkPhysicalDeviceLimits::* ptr, Context &ctx)
-{
-       VkPhysicalDeviceProperties properties;
-       ctx.getInstanceInterface().getPhysicalDeviceProperties(ctx.getPhysicalDevice(), &properties);
-       return properties.limits.*ptr;
-}
-
-template<deInt32 VkPhysicalDeviceLimits::* ptr>
-static deInt32 getInt32 (Context &ctx)
-{
-       return getInt32(ptr, ctx);
-}
-
-#define GET_INT32(name) getInt32<&VkPhysicalDeviceLimits::name>
-
-static tcu::UVec3 getUVec3 (deUint32 (VkPhysicalDeviceLimits::*ptr)[3], Context &ctx)
-{
-       VkPhysicalDeviceProperties properties;
-       ctx.getInstanceInterface().getPhysicalDeviceProperties(ctx.getPhysicalDevice(), &properties);
-       return tcu::UVec3((properties.limits.*ptr)[0], (properties.limits.*ptr)[1], (properties.limits.*ptr)[2]);
-}
-
-template<deUint32 (VkPhysicalDeviceLimits::*ptr)[3]>
-static tcu::UVec3 getUVec3 (Context &ctx)
-{
-       return getUVec3(ptr, ctx);
-}
-
-#define GET_UVEC3(name) getUVec3<&VkPhysicalDeviceLimits::name>
-
-static std::string makeCaseName (const std::string& varName, glu::ShaderType shaderType)
-{
-       DE_ASSERT(varName.length() > 3);
-       DE_ASSERT(varName.substr(0,3) == "gl_");
-
-       std::ostringstream name;
-       name << de::toLower(char(varName[3]));
-
-       for (size_t ndx = 4; ndx < varName.length(); ndx++)
-       {
-               const char c = char(varName[ndx]);
-               if (de::isUpper(c))
-                       name << '_' << de::toLower(c);
-               else
-                       name << c;
-       }
-       name << '_' << glu::getShaderTypeName(glu::ShaderType(shaderType));
-       return name.str();
-}
-
-enum
-{
-       VS = (1<<glu::SHADERTYPE_VERTEX),
-       TC = (1<<glu::SHADERTYPE_TESSELLATION_CONTROL),
-       TE = (1<<glu::SHADERTYPE_TESSELLATION_EVALUATION),
-       GS = (1<<glu::SHADERTYPE_GEOMETRY),
-       FS = (1<<glu::SHADERTYPE_FRAGMENT),
-       CS = (1<<glu::SHADERTYPE_COMPUTE),
-
-       SHADER_TYPES = VS|TC|TE|GS|FS|CS
-};
-
-template<typename DataType>
-class ShaderBuiltinConstantTestInstance;
-
-template<typename DataType>
-class ShaderBuiltinConstantCase : public TestCase
-{
-public:
-       typedef DataType (*GetConstantValueFunc) (Context &);
-
-                                                               ShaderBuiltinConstantCase       (tcu::TestContext& testCtx, const char* varName, glu::ShaderType shaderType, GetConstantValueFunc getValue, const char* requiredExt);
-       virtual                                         ~ShaderBuiltinConstantCase      (void) {};
-
-       virtual void                            initPrograms                            (vk::SourceCollections& programCollection) const
-                                                               {
-                                                                       m_executor->setShaderSources(programCollection);
-                                                               }
-
-       virtual TestInstance* createInstance (Context& context) const { return new ShaderBuiltinConstantTestInstance<DataType>(context, m_getValue, *m_executor, m_varName); };
-
-private:
-       const std::string                                       m_varName;
-       const GetConstantValueFunc                      m_getValue;
-       const std::string                                       m_requiredExt;
-       ShaderExecutor*                                         m_executor;
-       glu::ShaderType                                         m_shaderType;
-       ShaderSpec                                                      m_spec;
-};
-
-template<typename T>
-struct GLConstantTypeForVKType {};
-
-template<>
-struct GLConstantTypeForVKType<tcu::UVec3>
-{
-       typedef tcu::IVec3 GLConstantType;
-};
-
-template<>
-struct GLConstantTypeForVKType<deUint32>
-{
-       typedef deInt32 GLConstantType;
-};
-
-template<>
-struct GLConstantTypeForVKType<deInt32>
-{
-       typedef deInt32 GLConstantType;
-};
-
-template<typename DataType>
-ShaderBuiltinConstantCase<DataType>::ShaderBuiltinConstantCase (tcu::TestContext& testCtx, const char* varName, glu::ShaderType shaderType, GetConstantValueFunc getValue, const char* requiredExt)
-       : TestCase              (testCtx, makeCaseName(varName, shaderType).c_str(), varName)
-       , m_varName             (varName)
-       , m_getValue    (getValue)
-       , m_requiredExt (requiredExt ? requiredExt : "")
-       , m_shaderType  (shaderType)
-{
-       DE_ASSERT(!requiredExt == m_requiredExt.empty());
-
-       ShaderSpec      shaderSpec;
-       shaderSpec.source       = string("result = ") + m_varName + ";\n";
-       shaderSpec.outputs.push_back(Symbol("result", glu::VarType(glu::dataTypeOf<typename GLConstantTypeForVKType<DataType>::GLConstantType>(), glu::PRECISION_HIGHP)));
-
-       if (!m_requiredExt.empty())
-               shaderSpec.globalDeclarations = "#extension " + m_requiredExt + " : require\n";
-
-       m_executor = createExecutor(shaderType, shaderSpec);
-}
-
-template<typename DataType>
-static void logVarValue (tcu::TestLog& log, const std::string& varName, DataType value)
-{
-       log << TestLog::Message << varName << " = " << value << TestLog::EndMessage;
-}
-
-template<>
-void logVarValue<int> (tcu::TestLog& log, const std::string& varName, int value)
-{
-       log << TestLog::Integer(varName, varName, "", QP_KEY_TAG_NONE, value);
-}
-
-// ShaderBuiltinConstantTestInstance
-
-template<typename DataType>
-class ShaderBuiltinConstantTestInstance : public TestInstance
-{
-public:
-                                                               ShaderBuiltinConstantTestInstance (Context& ctx, typename ShaderBuiltinConstantCase<DataType>::GetConstantValueFunc getValue, ShaderExecutor& executor, const std::string varName )
-                                                                       : TestInstance  (ctx)
-                                                                       , m_getValue    (getValue)
-                                                                       , m_testCtx             (ctx.getTestContext())
-                                                                       , m_executor    (executor)
-                                                                       , m_varName             (varName)
-                                                               {}
-       virtual tcu::TestStatus         iterate (void);
-
-private:
-       const typename ShaderBuiltinConstantCase<DataType>::GetConstantValueFunc        m_getValue;
-       tcu::TestContext&                                                                                                                       m_testCtx;
-       ShaderExecutor&                                                                                                                         m_executor;
-       const std::string                                                                                                                       m_varName;
-
-       typedef typename GLConstantTypeForVKType<DataType>::GLConstantType GLConstantType;
-       GLConstantType getReference (void);
-};
-
-template<typename DataType>
-typename ShaderBuiltinConstantTestInstance<DataType>::GLConstantType ShaderBuiltinConstantTestInstance<DataType>::getReference (void)
-{
-       return m_getValue(m_context);
-}
-
-template<>
-typename ShaderBuiltinConstantTestInstance<tcu::UVec3>::GLConstantType ShaderBuiltinConstantTestInstance<tcu::UVec3>::getReference (void)
-{
-       return m_getValue(m_context).asInt();
-}
-
-template<typename DataType>
-tcu::TestStatus ShaderBuiltinConstantTestInstance<DataType>::iterate (void)
-{
-       GLConstantType                  reference       = getReference();
-       GLConstantType                  result          = GLConstantType(-1);
-       void* const                             outputs         = &result;
-
-       m_executor.execute(m_context, 1, DE_NULL, &outputs);
-       logVarValue(m_testCtx.getLog(), m_varName, result);
-
-       if (result != reference)
-       {
-               m_testCtx.getLog() << TestLog::Message << "ERROR: Expected " << m_varName << " = " << reference << TestLog::EndMessage;
-               return tcu::TestStatus::fail("Invalid builtin constant value");
-       }
-       else
-               return tcu::TestStatus::pass("Pass");
-}
-
-// createShaderBuiltinConstantCase
-
-template<typename DataType>
-void createShaderBuiltinConstantCase(tcu::TestCaseGroup* group, tcu::TestContext& testCtx, const char* varName, typename ShaderBuiltinConstantCase<DataType>::GetConstantValueFunc getValue, const char* requiredExt)
-{
-       for (int shaderType = 0; shaderType < glu::SHADERTYPE_LAST; shaderType++)
-       {
-               if ((SHADER_TYPES & (1<<shaderType)) != 0)
-                       group->addChild(new ShaderBuiltinConstantCase<DataType>(testCtx, varName, static_cast<glu::ShaderType>(shaderType), getValue, requiredExt));
-       }
-}
-
-} // anonymous
-
-ShaderBuiltinConstantTests::ShaderBuiltinConstantTests (tcu::TestContext& testCtx)
-       : TestCaseGroup(testCtx, "constant", "Built-in Constant Tests")
-{
-}
-
-ShaderBuiltinConstantTests::~ShaderBuiltinConstantTests (void)
-{
-}
-
-void ShaderBuiltinConstantTests::init (void)
-{
-       // Core builtin constants
-       {
-               static const struct
-               {
-                       const char*                                                                                                     varName;
-                       ShaderBuiltinConstantCase<deUint32>::GetConstantValueFunc       getValue;
-               } uintConstants[] =
-               {
-                       { "gl_MaxVertexAttribs",                                        GET_UINT32(maxVertexInputAttributes)                                    },
-                       { "gl_MaxVertexOutputVectors",                          GET_UINT32(maxVertexOutputComponents)                                   },
-                       { "gl_MaxFragmentInputVectors",                         GET_UINT32(maxFragmentInputComponents)                                  },
-                       { "gl_MaxDrawBuffers",                                          GET_UINT32(maxColorAttachments)                                                 },
-                       { "gl_MaxProgramTexelOffset",                           GET_UINT32(maxTexelOffset)                                                              },
-               };
-
-               static const struct
-               {
-                       const char*                                                                                                     varName;
-                       ShaderBuiltinConstantCase<tcu::UVec3>::GetConstantValueFunc     getValue;
-               } uvec3Constants[] =
-               {
-                       { "gl_MaxComputeWorkGroupCount",                        GET_UVEC3(maxComputeWorkGroupCount)                                             },
-                       { "gl_MaxComputeWorkGroupSize",                         GET_UVEC3(maxComputeWorkGroupSize)                                              },
-               };
-
-               tcu::TestCaseGroup* const coreGroup = new tcu::TestCaseGroup(m_testCtx, "core", "Core Specification");
-               addChild(coreGroup);
-
-               for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(uintConstants); ndx++)
-                       createShaderBuiltinConstantCase<deUint32>(coreGroup, m_testCtx, uintConstants[ndx].varName, uintConstants[ndx].getValue, DE_NULL);
-
-               createShaderBuiltinConstantCase<deInt32>(coreGroup, m_testCtx, "gl_MinProgramTexelOffset", GET_INT32(minTexelOffset), DE_NULL);
-
-               for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(uvec3Constants); ndx++)
-                       createShaderBuiltinConstantCase<tcu::UVec3>(coreGroup, m_testCtx, uvec3Constants[ndx].varName, uvec3Constants[ndx].getValue, DE_NULL);
-       }
-
-       // EXT_geometry_shader
-       {
-               static const struct
-               {
-                       const char*                                                                                                     varName;
-                       ShaderBuiltinConstantCase<deUint32>::GetConstantValueFunc       getValue;
-               } uintConstants[] =
-               {
-                       { "gl_MaxGeometryInputComponents",                      GET_UINT32(maxGeometryInputComponents)                                  },
-                       { "gl_MaxGeometryOutputComponents",                     GET_UINT32(maxGeometryOutputComponents)                                 },
-                       { "gl_MaxGeometryOutputVertices",                       GET_UINT32(maxGeometryOutputVertices)                                   },
-                       { "gl_MaxGeometryTotalOutputComponents",        GET_UINT32(maxGeometryTotalOutputComponents)                    },
-               };
-
-               tcu::TestCaseGroup* const geomGroup = new tcu::TestCaseGroup(m_testCtx, "geometry_shader", "GL_EXT_geometry_shader");
-               addChild(geomGroup);
-
-               for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(uintConstants); ndx++)
-                       createShaderBuiltinConstantCase<deUint32>(geomGroup, m_testCtx, uintConstants[ndx].varName, uintConstants[ndx].getValue, "GL_EXT_geometry_shader");
-       }
-
-       // EXT_tessellation_shader
-       {
-               static const struct
-               {
-                       const char*                                                                                                     varName;
-                       ShaderBuiltinConstantCase<deUint32>::GetConstantValueFunc       getValue;
-               } uintConstants[] =
-               {
-                       { "gl_MaxTessControlInputComponents",                   GET_UINT32(maxTessellationControlPerVertexInputComponents)              },
-                       { "gl_MaxTessControlOutputComponents",                  GET_UINT32(maxTessellationControlPerVertexOutputComponents)             },
-                       { "gl_MaxTessControlTotalOutputComponents",             GET_UINT32(maxTessellationControlTotalOutputComponents)                 },
-
-                       { "gl_MaxTessEvaluationInputComponents",                GET_UINT32(maxTessellationEvaluationInputComponents)                    },
-                       { "gl_MaxTessEvaluationOutputComponents",               GET_UINT32(maxTessellationEvaluationOutputComponents)                   },
-
-                       { "gl_MaxTessPatchComponents",                                  GET_UINT32(maxTessellationControlPerPatchOutputComponents)              },
-
-                       { "gl_MaxPatchVertices",                                                GET_UINT32(maxTessellationPatchSize)                                                    },
-                       { "gl_MaxTessGenLevel",                                                 GET_UINT32(maxTessellationGenerationLevel)                                              },
-               };
-
-               tcu::TestCaseGroup* const tessGroup = new tcu::TestCaseGroup(m_testCtx, "tessellation_shader", "GL_EXT_tessellation_shader");
-               addChild(tessGroup);
-
-               for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(uintConstants); ndx++)
-                       createShaderBuiltinConstantCase<deUint32>(tessGroup, m_testCtx, uintConstants[ndx].varName, uintConstants[ndx].getValue, "GL_EXT_tessellation_shader");
-       }
-}
-
-} // shaderexecutor
-} // vkt
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinConstantTests.hpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderBuiltinConstantTests.hpp
deleted file mode 100644 (file)
index bbe4fad..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef _VKTSHADERBUILTINCONSTANTTESTS_HPP
-#define _VKTSHADERBUILTINCONSTANTTESTS_HPP
-/*------------------------------------------------------------------------
- * Vulkan Conformance Tests
- * ------------------------
- *
- * Copyright (c) 2015 The Khronos Group Inc.
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice(s) and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * The Materials are Confidential Information as defined by the
- * Khronos Membership Agreement until designated non-confidential by Khronos,
- * at which point this condition clause shall be removed.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- *
- *//*!
- * \file
- * \brief Shader built-in constant tests.
- *//*--------------------------------------------------------------------*/
-
-#include "tcuTestCase.hpp"
-
-namespace vkt
-{
-namespace shaderexecutor
-{
-
-class ShaderBuiltinConstantTests : public tcu::TestCaseGroup
-{
-public:
-                                                               ShaderBuiltinConstantTests      (tcu::TestContext& testCtx);
-       virtual                                         ~ShaderBuiltinConstantTests     (void);
-
-       virtual void                            init                                            (void);
-
-private:
-                                                               ShaderBuiltinConstantTests      (const ShaderBuiltinConstantTests&);
-       ShaderBuiltinConstantTests&     operator=                                       (const ShaderBuiltinConstantTests&);
-};
-
-} // shaderexecutor
-} // vkt
-
-#endif // _VKTSHADERBUILTINCONSTANTTESTS_HPP
index 278b574..3b5c427 100644 (file)
@@ -38,7 +38,6 @@
 #include "deUniquePtr.hpp"
 
 #include "vktShaderBuiltinPrecisionTests.hpp"
-#include "vktShaderBuiltinConstantTests.hpp"
 #include "vktShaderCommonFunctionTests.hpp"
 #include "vktShaderIntegerFunctionTests.hpp"
 #include "vktShaderPackingFunctionTests.hpp"
@@ -58,7 +57,6 @@ tcu::TestCaseGroup* createBuiltinTests (tcu::TestContext& testCtx)
        builtinFunctionTests->addChild(new ShaderPackingFunctionTests(testCtx));
 
        builtinTests->addChild(builtinFunctionTests.release());
-       builtinTests->addChild(new ShaderBuiltinConstantTests(testCtx));
        builtinTests->addChild(new BuiltinPrecisionTests(testCtx));
 
        return builtinTests.release();
index c0766d5..6de5626 100644 (file)
@@ -722,9 +722,9 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
        const deUint32                                                                          queueFamilyIndex                = ctx.getUniversalQueueFamilyIndex();
        Allocator&                                                                                      memAlloc                                = ctx.getDefaultAllocator();
 
-       const deInt32                                                                           renderSizeX                             = de::min(static_cast<int>(DEFAULT_RENDER_WIDTH), numValues);
-       const deInt32                                                                           renderSizeY                             = (numValues / renderSizeX) + ((numValues % renderSizeX != 0) ? 1 : 0);
-       const tcu::IVec2                                                                        renderSize                              (renderSizeX, renderSizeY);
+       const deUint32                                                                          renderSizeX                             = de::min(static_cast<deUint32>(DEFAULT_RENDER_WIDTH), (deUint32)numValues);
+       const deUint32                                                                          renderSizeY                             = ((deUint32)numValues / renderSizeX) + (((deUint32)numValues % renderSizeX != 0) ? 1u : 0u);
+       const tcu::UVec2                                                                        renderSize                              (renderSizeX, renderSizeY);
        std::vector<tcu::Vec2>                                                          positions;
 
        VkFormat                                                                                        colorFormat                             = VK_FORMAT_R32G32B32A32_SFLOAT;
@@ -763,7 +763,7 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
        clearRenderData();
 
        // Compute positions - 1px points are used to drive fragment shading.
-       positions = computeVertexPositions(numValues, renderSize);
+       positions = computeVertexPositions(numValues, renderSize.cast<int>());
 
        // Bind attributes
        addAttribute(ctx, memAlloc, 0u, VK_FORMAT_R32G32_SFLOAT, sizeof(tcu::Vec2), (deUint32)positions.size(), &positions[0]);
@@ -1231,12 +1231,7 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                              sType;
                        DE_NULL,                                                                                // const void*                                  pNext;
                        0u,                                                                                             // VkCmdBufferOptimizeFlags             flags;
-                       DE_NULL,                                                                                // VkRenderPass                                 renderPass;
-                       0u,                                                                                             // deUint32                                             subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                framebuffer;
-                       VK_FALSE,                                                                               // VkBool32                                             occlusionQueryEnable;
-                       (VkQueryControlFlags)0u,                                                //VkQueryControlFlags                   queryFlags;
-                       (VkQueryPipelineStatisticFlags)0u                               //VkQueryPipelineStatisticFlags pipelineStatistics;
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkRenderPassBeginInfo renderPassBeginInfo =
@@ -1254,16 +1249,11 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
 
                VK_CHECK(vk.beginCommandBuffer(*cmdBuffer, &cmdBufferBeginInfo));
 
-               {
-                       std::vector<const void*> barriers(colorImagePreRenderBarriers.size());
-                       if (!barriers.empty())
-                       {
-                               for (size_t i = 0; i < barriers.size(); ++i)
-                                       barriers[i] = &colorImagePreRenderBarriers[i];
-                               vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, (deUint32)barriers.size(), &barriers[0]);
-                       }
-               }
-       
+
+               vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0,
+                                                         0, (const VkMemoryBarrier*)DE_NULL,
+                                                         0, (const VkBufferMemoryBarrier*)DE_NULL,
+                                                         (deUint32)colorImagePreRenderBarriers.size(), colorImagePreRenderBarriers.empty() ? DE_NULL : &colorImagePreRenderBarriers[0]);
                vk.cmdBeginRenderPass(*cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *graphicsPipeline);
@@ -1283,16 +1273,11 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
                vk.cmdDraw(*cmdBuffer, (deUint32)positions.size(), 1u, 0u, 0u);
 
                vk.cmdEndRenderPass(*cmdBuffer);
+               vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0,
+                                                         0, (const VkMemoryBarrier*)DE_NULL,
+                                                         0, (const VkBufferMemoryBarrier*)DE_NULL,
+                                                         (deUint32)colorImagePostRenderBarriers.size(), colorImagePostRenderBarriers.empty() ? DE_NULL : &colorImagePostRenderBarriers[0]);
 
-               {
-                       std::vector<const void*> barriers(colorImagePostRenderBarriers.size());
-                       if (!barriers.empty())
-                       {
-                               for (size_t i = 0; i < barriers.size(); ++i)
-                                       barriers[i] = &colorImagePostRenderBarriers[i];
-                               vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FALSE, (deUint32)barriers.size(), &barriers[0]);
-                       }
-               }
                VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
        }
 
@@ -1317,6 +1302,7 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
                        DE_NULL,                                                                // pNext
                        0u,                                                                             // waitSemaphoreCount
                        DE_NULL,                                                                // pWaitSemaphores
+                       (const VkPipelineStageFlags*)DE_NULL,
                        1u,                                                                             // commandBufferCount
                        &cmdBuffer.get(),                                               // pCommandBuffers
                        0u,                                                                             // signalSemaphoreCount
@@ -1369,13 +1355,7 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCmdBufferOptimizeFlags                     flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       VK_FALSE,                                                                               // VkBool32                                                     occlusionQueryEnable;
-                       (VkQueryControlFlags)0,                                                 // VkQueryControlFlags                          queryFlags;
-                       (VkQueryPipelineStatisticFlags)0                                // VkQueryPipelineStatisticFlags        pipelineStatistics;
-
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkBufferImageCopy copyParams =
@@ -1424,6 +1404,7 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
                                                DE_NULL,
                                                0u,
                                                (const VkSemaphore*)DE_NULL,
+                                               (const VkPipelineStageFlags*)DE_NULL,
                                                1u,
                                                &copyCmdBuffer.get(),
                                                0u,
@@ -2023,13 +2004,7 @@ void ComputeShaderExecutor::execute (const Context& ctx, int numValues, const vo
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                DE_NULL,                                                                                // const void*                                          pNext;
                0u,                                                                                             // VkCmdBufferOptimizeFlags                     flags;
-               DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-               0u,                                                                                             // deUint32                                                     subpass;
-               DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-               VK_FALSE,                                                                               // VkBool32                                                     occlusionQueryEnable;
-               (VkQueryControlFlags)0,                                                 // VkQueryControlFlags                          queryFlags;
-               (VkQueryPipelineStatisticFlags)0                                // VkQueryPipelineStatisticFlags        pipelineStatistics;
-
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        m_descriptorSetLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT);
@@ -2177,6 +2152,7 @@ void ComputeShaderExecutor::execute (const Context& ctx, int numValues, const vo
                                DE_NULL,
                                0u,
                                (const VkSemaphore*)DE_NULL,
+                               (const VkPipelineStageFlags*)DE_NULL,
                                1u,
                                &cmdBuffer.get(),
                                0u,
@@ -2199,7 +2175,7 @@ static std::string generateVertexShaderForTess (void)
        std::ostringstream      src;
        src <<  "#version 310 es\n"
                << "void main (void)\n{\n"
-               << "    gl_Position = vec4(gl_VertexID/2, gl_VertexID%2, 0.0, 1.0);\n"
+               << "    gl_Position = vec4(gl_VertexIndex/2, gl_VertexIndex%2, 0.0, 1.0);\n"
                << "}\n";
 
        return src.str();
@@ -2232,7 +2208,7 @@ void TessellationExecutor::renderTess (const Context& ctx, deUint32 vertexCount)
        const deUint32                                          queueFamilyIndex                        = ctx.getUniversalQueueFamilyIndex();
        Allocator&                                                      memAlloc                                        = ctx.getDefaultAllocator();
 
-       const tcu::IVec2                                        renderSize                                      (DEFAULT_RENDER_WIDTH, DEFAULT_RENDER_HEIGHT);
+       const tcu::UVec2                                        renderSize                                      (DEFAULT_RENDER_WIDTH, DEFAULT_RENDER_HEIGHT);
 
        Move<VkImage>                                           colorImage;
        de::MovePtr<Allocation>                         colorImageAlloc;
@@ -2531,7 +2507,7 @@ void TessellationExecutor::renderTess (const Context& ctx, deUint32 vertexCount)
                {
                        VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,              // VkStructureType                                                      sType;
                        DE_NULL,                                                                                                                // const void*                                                          pNext;
-                       (VkPipelineTesselationStateCreateFlags)0,                                               // VkPipelineTessellationStateCreateFlags       flags;
+                       (VkPipelineTessellationStateCreateFlags)0,                                              // VkPipelineTessellationStateCreateFlags       flags;
                        1                                                                                                                               // uint32_t                                                                     patchControlPoints;
                };
 
@@ -2689,13 +2665,7 @@ void TessellationExecutor::renderTess (const Context& ctx, deUint32 vertexCount)
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                                      sType;
                        DE_NULL,                                                                                // const void*                                          pNext;
                        0u,                                                                                             // VkCmdBufferOptimizeFlags                     flags;
-                       DE_NULL,                                                                                // VkRenderPass                                         renderPass;
-                       0u,                                                                                             // deUint32                                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                                        framebuffer;
-                       VK_FALSE,                                                                               //VkBool32                                                      occlusionQueryEnable;
-                       (VkQueryControlFlags)0u,                                                // VkQueryControlFlags                          queryFlags;
-                       (VkQueryPipelineStatisticFlags)0u                               // VkQueryPipelineStatisticFlags        pipelineStatistics;
-
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue clearValues[1] =
@@ -2750,6 +2720,7 @@ void TessellationExecutor::renderTess (const Context& ctx, deUint32 vertexCount)
                        DE_NULL,
                        0u,
                        (const VkSemaphore*)0,
+                       (const VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &cmdBuffer.get(),
                        0u,
@@ -3077,6 +3048,22 @@ void ShaderExecutor::setupSamplerData (const VkDevice&                           vkDevice,
        m_uniformInfos.push_back(UniformInfoSp(new de::UniquePtr<UniformInfo>(samplers)));
 }
 
+const void*    ShaderExecutor::getBufferPtr (const deUint32 bindingLocation) const
+{
+       std::vector<UniformInfoSp>::const_iterator it = m_uniformInfos.begin();
+       for (; it != m_uniformInfos.end(); it++)
+       {
+               const UniformInfo* uniformInfo = it->get()->get();
+               if (uniformInfo->isBufferUniform() && uniformInfo->location == bindingLocation)
+               {
+                       const BufferUniform* bufferUniform = static_cast<const BufferUniform*>(uniformInfo);
+                       return bufferUniform->alloc->getHostPtr();
+               }
+       }
+
+       return DE_NULL;
+}
+
 void ShaderExecutor::addUniforms (const VkDevice& vkDevice, const DeviceInterface& vk, const deUint32 queueFamilyIndex, Allocator& memAlloc)
 {
        if (!m_uniformSetup)
@@ -3136,21 +3123,21 @@ Move<VkImage> ShaderExecutor::createCombinedImage (const VkDevice&                              vkDevice,
 
        const VkImageCreateInfo         imageCreateInfo         =
        {
-               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,                                            // VkStructureType                      sType;
-               DE_NULL,                                                                                                        // const void*                          pnext;
-               flags,                                                                                                          // VkImageCreateFlags           flags;
-               imageType,                                                                                                      // VkImageType                          imageType;
-               format,                                                                                                         // VkFormat                                     format;
-               { texSize.x(), texSize.y(), texSize.z() },                                      // VkExtend3D                           extent;
-               1u,                                                                                                                     // deUint32                                     mipLevels;
-               arraySize,                                                                                                      // deUint32                                     arraySize;
-               VK_SAMPLE_COUNT_1_BIT,                                                                          // VkSampleCountFlagBits        samples;
-               tiling,                                                                                                         // VkImageTiling                        tiling;
-               usage,                                                                                                          // VkImageUsageFlags            usage;
-               VK_SHARING_MODE_EXCLUSIVE,                                                                      // VkSharingMode                        sharingMode;
-               1u,                                                                                                                     // deuint32                                     queueFamilyCount;
-               &queueFamilyIndex,                                                                                      // const deUint32*                      pQueueFamilyIndices;
-               VK_IMAGE_LAYOUT_UNDEFINED,                                                                      // VkImageLayout                        initialLayout;
+               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,                                                                            // VkStructureType                      sType;
+               DE_NULL,                                                                                                                                        // const void*                          pnext;
+               flags,                                                                                                                                          // VkImageCreateFlags           flags;
+               imageType,                                                                                                                                      // VkImageType                          imageType;
+               format,                                                                                                                                         // VkFormat                                     format;
+               { (deUint32)texSize.x(), (deUint32)texSize.y(), (deUint32)texSize.z() },        // VkExtend3D                           extent;
+               1u,                                                                                                                                                     // deUint32                                     mipLevels;
+               arraySize,                                                                                                                                      // deUint32                                     arraySize;
+               VK_SAMPLE_COUNT_1_BIT,                                                                                                          // VkSampleCountFlagBits        samples;
+               tiling,                                                                                                                                         // VkImageTiling                        tiling;
+               usage,                                                                                                                                          // VkImageUsageFlags            usage;
+               VK_SHARING_MODE_EXCLUSIVE,                                                                                                      // VkSharingMode                        sharingMode;
+               1u,                                                                                                                                                     // deuint32                                     queueFamilyCount;
+               &queueFamilyIndex,                                                                                                                      // const deUint32*                      pQueueFamilyIndices;
+               VK_IMAGE_LAYOUT_UNDEFINED,                                                                                                      // VkImageLayout                        initialLayout;
        };
 
        Move<VkImage>                           vkTexture                       = createImage(vk, vkDevice, &imageCreateInfo);
@@ -3214,28 +3201,7 @@ de::MovePtr<ShaderExecutor::SamplerUniform> ShaderExecutor::createSamplerUniform
        allocation = uploadImage(vkDevice, vk, memAlloc, texFormat, texSize, data, *vkTexture, aspectMask);
 
        // Create sampler
-       const bool                                              compareEnabled  = (refSampler.compare != tcu::Sampler::COMPAREMODE_NONE);
-       const VkSamplerCreateInfo               samplerParams   =
-       {
-               VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,                  // VkStructureType              sType;
-               DE_NULL,                                                                                // const void*                  pNext;
-               VkSamplerCreateFlags(0u),                                               // VkSamplerCreateFlags flags;
-               mapFilterMode(refSampler.magFilter),                    // VkTexFilter                  magFilter;
-               mapFilterMode(refSampler.minFilter),                    // VkTexFilter                  minFilter;
-               mapMipmapMode(refSampler.minFilter),                    // VkTexMipmapMode              mipMode;
-               mapWrapMode(refSampler.wrapS),                                  // VkTexAddressMode             addressModeU;
-               mapWrapMode(refSampler.wrapT),                                  // VkTexAddressMode             addressModeV;
-               mapWrapMode(refSampler.wrapR),                                  // VkTexAddressMode             addressModeW;
-               refSampler.lodThreshold,                                                // float                                mipLodBias;
-               1,                                                                                              // float                                maxAnisotropy;
-               compareEnabled,                                                                 // VkBool32                             compareEnable;
-               mapCompareMode(refSampler.compare),                             // VkCompareOp                  compareOp;
-               0.0f,                                                                                   // float                                minLod;
-               0.0f,                                                                                   // float                                maxLod;
-               VK_BORDER_COLOR_INT_OPAQUE_WHITE,                               // VkBorderColor                boderColor;
-               VK_FALSE,                                                                               // VkBool32                             unnormalizerdCoordinates;
-       };
-
+       const VkSamplerCreateInfo               samplerParams   = mapSampler(refSampler, texFormat);
        Move<VkSampler>                                 sampler                 = createSampler(vk, vkDevice, &samplerParams);
 
        const VkImageViewCreateInfo             viewParams              =
index 36a2541..30c6f1e 100644 (file)
@@ -146,6 +146,8 @@ public:
                                                                                                 VkImageViewType                        imageViewType,
                                                                                                 const void*                            data);
 
+       const void*                             getBufferPtr            (const deUint32 bindingLocation) const;
+
 protected:
                                                        ShaderExecutor          (const ShaderSpec& shaderSpec, glu::ShaderType shaderType);
 
index cbf0b56..93562a9 100644 (file)
@@ -68,10 +68,10 @@ using namespace vk;
 namespace
 {
 
-static const int               s_gridSize                      = 2;
-static const int               s_maxRenderWidth        = 128;
-static const int               s_maxRenderHeight       = 128;
-static const tcu::Vec4 s_defaultClearColor     = tcu::Vec4(0.125f, 0.25f, 0.5f, 1.0f);
+static const int               GRID_SIZE                       = 2;
+static const deUint32  MAX_RENDER_WIDTH        = 128;
+static const deUint32  MAX_RENDER_HEIGHT       = 128;
+static const tcu::Vec4 DEFAULT_CLEAR_COLOR     = tcu::Vec4(0.125f, 0.25f, 0.5f, 1.0f);
 
 static bool isSupportedLinearTilingFormat (const InstanceInterface& instanceInterface, VkPhysicalDevice device, VkFormat format)
 {
@@ -471,7 +471,7 @@ ShaderRenderCaseInstance::ShaderRenderCaseInstance (Context&                                        context,
                                                                                                        const UniformSetup&                     uniformSetup,
                                                                                                        const AttributeSetupFunc        attribFunc)
        : vkt::TestInstance     (context)
-       , m_clearColor          (s_defaultClearColor)
+       , m_clearColor          (DEFAULT_CLEAR_COLOR)
        , m_memAlloc            (context.getDefaultAllocator())
        , m_isVertexCase        (isVertexCase)
        , m_evaluator           (evaluator)
@@ -491,11 +491,11 @@ tcu::TestStatus ShaderRenderCaseInstance::iterate (void)
        setup();
 
        // Create quad grid.
-       const tcu::IVec2        viewportSize    = getViewportSize();
+       const tcu::UVec2        viewportSize    = getViewportSize();
        const int                       width                   = viewportSize.x();
        const int                       height                  = viewportSize.y();
 
-       QuadGrid                        quadGrid                (m_isVertexCase ? s_gridSize : 4, width, height, tcu::Vec4(0.125f, 0.25f, 0.5f, 1.0f), m_userAttribTransforms, m_textures);
+       QuadGrid                        quadGrid                (m_isVertexCase ? GRID_SIZE : 4, width, height, tcu::Vec4(0.125f, 0.25f, 0.5f, 1.0f), m_userAttribTransforms, m_textures);
 
        // Render result.
        tcu::Surface            resImage                (width, height);
@@ -747,10 +747,10 @@ void ShaderRenderCaseInstance::useUniform (deUint32 bindingLocation, BaseUniform
        #undef UNIFORM_CASE
 }
 
-const tcu::IVec2 ShaderRenderCaseInstance::getViewportSize (void) const
+const tcu::UVec2 ShaderRenderCaseInstance::getViewportSize (void) const
 {
-       return tcu::IVec2(de::min(m_renderSize.x(), s_maxRenderWidth),
-                                         de::min(m_renderSize.y(), s_maxRenderHeight));
+       return tcu::UVec2(de::min(m_renderSize.x(), MAX_RENDER_WIDTH),
+                                         de::min(m_renderSize.y(), MAX_RENDER_HEIGHT));
 }
 
 Move<VkImage> ShaderRenderCaseInstance::createImage2D (const tcu::Texture2D&   texture,
@@ -769,7 +769,11 @@ Move<VkImage> ShaderRenderCaseInstance::createImage2D (const tcu::Texture2D&       tex
                0,                                                                                                                      // VkImageCreateFlags           flags;
                VK_IMAGE_TYPE_2D,                                                                                       // VkImageType                          imageType;
                format,                                                                                                         // VkFormat                                     format;
-               { texture.getWidth(), texture.getHeight(), 1 },                         // VkExtend3D                           extent;
+               {
+                       (deUint32)texture.getWidth(),
+                       (deUint32)texture.getHeight(),
+                       1u
+               },                                                                                                                      // VkExtend3D                           extent;
                1u,                                                                                                                     // deUint32                                     mipLevels;
                1u,                                                                                                                     // deUint32                                     arraySize;
                VK_SAMPLE_COUNT_1_BIT,                                                                          // deUint32                                     samples;
@@ -816,8 +820,8 @@ de::MovePtr<Allocation> ShaderRenderCaseInstance::uploadImage2D (const tcu::Text
 
 void ShaderRenderCaseInstance::copyTilingImageToOptimal        (const vk::VkImage&     srcImage,
                                                                                                                 const vk::VkImage&     dstImage,
-                                                                                                                deInt32 width,
-                                                                                                                deInt32 height)
+                                                                                                                deUint32                       width,
+                                                                                                                deUint32                       height)
 {
        const VkDevice                                          vkDevice                        = m_context.getDevice();
        const DeviceInterface&                          vk                                      = m_context.getDeviceInterface();
@@ -851,12 +855,7 @@ void ShaderRenderCaseInstance::copyTilingImageToOptimal    (const vk::VkImage&     srcI
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                              sType;
                DE_NULL,                                                                                // const void*                                  pNext;
                usageFlags,                                                                             // VkCommandBufferUsageFlags    flags;
-               DE_NULL,                                                                                // VkRenderPass                                 renderPass;
-               0u,                                                                                             // deUint32                                             subpass;
-               DE_NULL,                                                                                // VkFramebuffer                                framebuffer;
-               VK_FALSE,                                                                               // VkBool32                                             occlusionQueryEnable;
-               (VkQueryControlFlags)0,
-               (VkQueryPipelineStatisticFlags)0,
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        Move<VkCommandBuffer>                           cmdBuffer                       = allocateCommandBuffer(vk, vkDevice, &cmdBufferParams);
@@ -870,11 +869,10 @@ void ShaderRenderCaseInstance::copyTilingImageToOptimal   (const vk::VkImage&     srcI
                createImageMemoryBarrier(dstImage, (VkAccessFlags)0u, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
        };
 
-       for (deUint32 barrierNdx = 0; barrierNdx < DE_LENGTH_OF_ARRAY(layoutBarriers); barrierNdx++)
-       {
-               const VkImageMemoryBarrier* memoryBarrier = &layoutBarriers[barrierNdx];
-               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, (const void * const*)&memoryBarrier);
-       }
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0,
+                                                 0, (const VkMemoryBarrier*)DE_NULL,
+                                                 0, (const VkBufferMemoryBarrier*)DE_NULL,
+                                                 DE_LENGTH_OF_ARRAY(layoutBarriers), layoutBarriers);
 
        // Add image copy
        const VkImageCopy                               imageCopy                       =
@@ -914,8 +912,10 @@ void ShaderRenderCaseInstance::copyTilingImageToOptimal    (const vk::VkImage&     srcI
        const VkImageMemoryBarrier              dstBarrier                      =
                        createImageMemoryBarrier(dstImage, VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, 0u, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
 
-       const void* const*                              barrier                         = (const void* const*)&dstBarrier;
-       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, (const void* const*)&barrier);
+       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0,
+                                                 0, (const VkMemoryBarrier*)DE_NULL,
+                                                 0, (const VkBufferMemoryBarrier*)DE_NULL,
+                                                 1, &dstBarrier);
 
        VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
 
@@ -932,6 +932,7 @@ void ShaderRenderCaseInstance::copyTilingImageToOptimal     (const vk::VkImage&     srcI
                DE_NULL,
                0u,
                (const VkSemaphore*)DE_NULL,
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,
                &cmdBuffer.get(),
                0u,
@@ -985,28 +986,7 @@ void ShaderRenderCaseInstance::useSampler2D (deUint32 bindingLocation, deUint32
        }
 
        // Create sampler
-       const bool                                              compareEnabled  = (refSampler.compare != tcu::Sampler::COMPAREMODE_NONE);
-       const VkSamplerCreateInfo               samplerParams   =
-       {
-               VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,                  // VkStructureType      sType;
-               DE_NULL,                                                                                // const void*          pNext;
-               (VkSamplerCreateFlags)0,
-               mapFilterMode(refSampler.magFilter),                    // VkTexFilter          magFilter;
-               mapFilterMode(refSampler.minFilter),                    // VkTexFilter          minFilter;
-               mapMipmapMode(refSampler.minFilter),                    // VkTexMipmapMode      mipMode;
-               mapWrapMode(refSampler.wrapS),                                  // VkTexAddressMode     addressModeU;
-               mapWrapMode(refSampler.wrapT),                                  // VkTexAddressMode     addressModeV;
-               mapWrapMode(refSampler.wrapR),                                  // VkTexAddressMode     addressModeW;
-               refSampler.lodThreshold,                                                // float                        mipLodBias;
-               1,                                                                                              // float                        maxAnisotropy;
-               compareEnabled,                                                                 // VkBool32                     compareEnable;
-               mapCompareMode(refSampler.compare),                             // VkCompareOp          compareOp;
-               0.0f,                                                                                   // float                        minLod;
-               0.0f,                                                                                   // float                        maxLod;
-               VK_BORDER_COLOR_INT_OPAQUE_WHITE,                               // VkBorderColor        boderColor;
-               VK_FALSE,                                                                               // VkBool32                     unnormalizerdCoordinates;
-       };
-
+       const VkSamplerCreateInfo               samplerParams   = mapSampler(refSampler, refTexture.getFormat());
        Move<VkSampler>                                 sampler                 = createSampler(vk, vkDevice, &samplerParams);
 
        const VkImageViewCreateInfo             viewParams              =
@@ -1264,9 +1244,9 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
                setupUniforms(quadGrid.getConstCoords());
 
                m_descriptorSetLayout = m_descriptorSetLayoutBuilder.build(vk, vkDevice);
-               m_descriptorPool = m_descriptorPoolBuilder.build(vk, vkDevice, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
-
+               if (!m_uniformInfos.empty())
                {
+                       m_descriptorPool                                                                = m_descriptorPoolBuilder.build(vk, vkDevice, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
                        const VkDescriptorSetAllocateInfo       allocInfo       =
                        {
                                VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
@@ -1555,12 +1535,7 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                      sType;
                        DE_NULL,                                                                                // const void*                          pNext;
                        0u,                                                                                             // VkCmdBufferOptimizeFlags     flags;
-                       DE_NULL,                                                                                // VkRenderPass                         renderPass;
-                       0u,                                                                                             // deUint32                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                        framebuffer;
-                       VK_FALSE,
-                       (VkQueryControlFlags)0,
-                       (VkQueryPipelineStatisticFlags)0,
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const VkClearValue                                                              clearValues                                     = makeClearValueColorF32(m_clearColor.x(),
@@ -1585,7 +1560,6 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
 
                // Add texture barriers
                std::vector<VkImageMemoryBarrier> barriers;
-               std::vector<void*> barrierPtrs;
 
                for(deUint32 i = 0; i < m_uniformInfos.size(); i++)
                {
@@ -1602,15 +1576,18 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
                        const VkImageMemoryBarrier      textureBarrier  = createImageMemoryBarrier(sampler->image->get(), outputMask, 0u, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
 
                        barriers.push_back(textureBarrier);
-                       barrierPtrs.push_back((void*)&barriers.back());
                }
 
-               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, (deUint32)barrierPtrs.size(), (barrierPtrs.size() ? (const void * const*)&barrierPtrs[0] : DE_NULL));
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VkDependencyFlags)0,
+                                                         0, (const VkMemoryBarrier*)DE_NULL,
+                                                         0, (const VkBufferMemoryBarrier*)DE_NULL,
+                                                         (deUint32)barriers.size(), (barriers.empty() ? (const VkImageMemoryBarrier*)DE_NULL : &barriers[0]));
 
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_graphicsPipeline);
-               vk.cmdBindDescriptorSets(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0u, 1, &*m_descriptorSet, 0u, DE_NULL);
+               if (!m_uniformInfos.empty())
+                       vk.cmdBindDescriptorSets(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0u, 1, &*m_descriptorSet, 0u, DE_NULL);
                vk.cmdBindIndexBuffer(*m_cmdBuffer, *m_indiceBuffer, 0, VK_INDEX_TYPE_UINT16);
 
                const deUint32 numberOfVertexAttributes = (deUint32)m_vertexBuffers.size();
@@ -1648,6 +1625,7 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
                        DE_NULL,
                        0u,
                        (const VkSemaphore*)DE_NULL,
+                       (const VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &m_cmdBuffer.get(),
                        0u,
@@ -1693,12 +1671,7 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
                        VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                      sType;
                        DE_NULL,                                                                                // const void*                          pNext;
                        0u,                                                                                             // VkCmdBufferOptimizeFlags     flags;
-                       DE_NULL,                                                                                // VkRenderPass                         renderPass;
-                       0u,                                                                                             // deUint32                                     subpass;
-                       DE_NULL,                                                                                // VkFramebuffer                        framebuffer;
-                       VK_FALSE,
-                       (VkQueryControlFlags)0,
-                       (VkQueryPipelineStatisticFlags)0,
+                       (const VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                const Move<VkCommandBuffer>                                             cmdBuffer                                       = allocateCommandBuffer(vk, vkDevice, &cmdBufferParams);
@@ -1723,6 +1696,7 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
                        DE_NULL,
                        0u,
                        (const VkSemaphore*)DE_NULL,
+                       (const VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &cmdBuffer.get(),
                        0u,
index 3368fa3..3466066 100644 (file)
@@ -409,7 +409,7 @@ protected:
        virtual void                                                                            setup                                           (void);
        virtual void                                                                            setupUniforms                           (const tcu::Vec4& constCoords);
 
-       const tcu::IVec2                                                                        getViewportSize                         (void) const;
+       const tcu::UVec2                                                                        getViewportSize                         (void) const;
 
        std::vector<tcu::Mat4>                                                          m_userAttribTransforms;
        const tcu::Vec4                                                                         m_clearColor;
@@ -428,8 +428,8 @@ private:
                                                                                                                                                                         const vk::VkImageTiling                tiling);
        void                                                                                            copyTilingImageToOptimal        (const vk::VkImage&                             srcImage,
                                                                                                                                                                         const vk::VkImage&                             dstImage,
-                                                                                                                                                                        deInt32                                                width,
-                                                                                                                                                                        deInt32                                                height);
+                                                                                                                                                                        deUint32                                               width,
+                                                                                                                                                                        deUint32                                               height);
 
        void                                                                                            setupUniformData                        (deUint32 bindingLocation, size_t size, const void* dataPtr);
        void                                                                                            setupDefaultInputs                      (const QuadGrid& quadGrid);
@@ -453,7 +453,7 @@ private:
        };
        std::vector<EnabledBaseAttribute>                                       m_enabledBaseAttributes;
 
-       const tcu::IVec2                                                                        m_renderSize;
+       const tcu::UVec2                                                                        m_renderSize;
        const vk::VkFormat                                                                      m_colorFormat;
 
        vk::Move<vk::VkImage>                                                           m_colorImage;
index 30e382f..fb983ab 100644 (file)
@@ -136,7 +136,7 @@ ShaderDiscardCase::ShaderDiscardCase (tcu::TestContext&             testCtx,
 {
        m_fragShaderSource      = shaderSource;
        m_vertShaderSource      =
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location=0) in  highp   vec4 a_position;\n"
@@ -204,7 +204,7 @@ static ShaderEvalFunc getEvalFunc (DiscardMode mode)
 static const char* getTemplate (DiscardTemplate variant)
 {
        #define GLSL_SHADER_TEMPLATE_HEADER \
-                               "#version 140\n"        \
+                               "#version 310 es\n"     \
                                "#extension GL_ARB_separate_shader_objects : enable\n"  \
                                "#extension GL_ARB_shading_language_420pack : enable\n"  \
                                "layout(location = 0) in mediump vec4 v_color;\n"       \
index 17e4b8c..f2c633a 100644 (file)
@@ -269,7 +269,7 @@ static de::MovePtr<ShaderIndexingCase> createVaryingArrayCase (tcu::TestContext&
                                                                                                                        IndexAccessType                 fragAccess)
 {
        std::ostringstream vtx;
-       vtx << "#version 140\n";
+       vtx << "#version 310 es\n";
        vtx << "#extension GL_ARB_separate_shader_objects : enable\n";
        vtx << "#extension GL_ARB_shading_language_420pack : enable\n";
        vtx << "layout(location = 0) in highp vec4 a_position;\n";
@@ -324,7 +324,7 @@ static de::MovePtr<ShaderIndexingCase> createVaryingArrayCase (tcu::TestContext&
        vtx << "}\n";
 
        std::ostringstream frag;
-       frag << "#version 140\n";
+       frag << "#version 310 es\n";
        frag << "#extension GL_ARB_separate_shader_objects : enable\n";
        frag << "#extension GL_ARB_shading_language_420pack : enable\n";
        frag << "precision mediump int;\n";
@@ -406,10 +406,10 @@ static de::MovePtr<ShaderIndexingCase> createUniformArrayCase (tcu::TestContext&
        std::ostringstream frag;
        std::ostringstream& op = isVertexCase ? vtx : frag;
 
-       vtx << "#version 140\n";
+       vtx << "#version 310 es\n";
        vtx << "#extension GL_ARB_separate_shader_objects : enable\n";
        vtx << "#extension GL_ARB_shading_language_420pack : enable\n";
-       frag << "#version 140\n";
+       frag << "#version 310 es\n";
        frag << "#extension GL_ARB_separate_shader_objects : enable\n";
        frag << "#extension GL_ARB_shading_language_420pack : enable\n";
 
@@ -527,10 +527,10 @@ static de::MovePtr<ShaderIndexingCase> createTmpArrayCase (tcu::TestContext&      con
        std::ostringstream frag;
        std::ostringstream& op = isVertexCase ? vtx : frag;
 
-       vtx << "#version 140\n";
+       vtx << "#version 310 es\n";
        vtx << "#extension GL_ARB_separate_shader_objects : enable\n";
        vtx << "#extension GL_ARB_shading_language_420pack : enable\n";
-       frag << "#version 140\n";
+       frag << "#version 310 es\n";
        frag << "#extension GL_ARB_separate_shader_objects : enable\n";
        frag << "#extension GL_ARB_shading_language_420pack : enable\n";
 
@@ -705,10 +705,10 @@ static de::MovePtr<ShaderIndexingCase> createVectorSubscriptCase (tcu::TestConte
        int                     vecLen          = getDataTypeScalarSize(varType);
        const char*     vecLenName      = getIntUniformName(vecLen);
 
-       vtx << "#version 140\n";
+       vtx << "#version 310 es\n";
        vtx << "#extension GL_ARB_separate_shader_objects : enable\n";
        vtx << "#extension GL_ARB_shading_language_420pack : enable\n";
-       frag << "#version 140\n";
+       frag << "#version 310 es\n";
        frag << "#extension GL_ARB_separate_shader_objects : enable\n";
        frag << "#extension GL_ARB_shading_language_420pack : enable\n";
 
@@ -916,10 +916,10 @@ static de::MovePtr<ShaderIndexingCase> createMatrixSubscriptCase (tcu::TestConte
        const char*     matSizeName     = getIntUniformName(numCols);
        DataType        vecType         = getDataTypeFloatVec(numRows);
 
-       vtx << "#version 140\n";
+       vtx << "#version 310 es\n";
        vtx << "#extension GL_ARB_separate_shader_objects : enable\n";
        vtx << "#extension GL_ARB_shading_language_420pack : enable\n";
-       frag << "#version 140\n";
+       frag << "#version 310 es\n";
        frag << "#extension GL_ARB_separate_shader_objects : enable\n";
        frag << "#extension GL_ARB_shading_language_420pack : enable\n";
 
index 025f582..1d331a0 100644 (file)
@@ -319,11 +319,11 @@ static de::MovePtr<ShaderLoopCase> createGenericLoopCase (tcu::TestContext&       test
        std::ostringstream frag;
        std::ostringstream& op = isVertexCase ? vtx : frag;
 
-       vtx << "#version 140\n";
+       vtx << "#version 310 es\n";
        vtx << "#extension GL_ARB_separate_shader_objects : enable\n";
        vtx << "#extension GL_ARB_shading_language_420pack : enable\n";
 
-       frag << "#version 140\n";
+       frag << "#version 310 es\n";
        frag << "#extension GL_ARB_separate_shader_objects : enable\n";
        frag << "#extension GL_ARB_shading_language_420pack : enable\n";
 
@@ -549,11 +549,11 @@ static de::MovePtr<ShaderLoopCase> createSpecialLoopCase (tcu::TestContext&       test
        std::vector<BaseUniformType>    uniformInformations;
        deUint32                                                locationCounter = 0;
 
-       vtx << "#version 140\n";
+       vtx << "#version 310 es\n";
        vtx << "#extension GL_ARB_separate_shader_objects : enable\n";
        vtx << "#extension GL_ARB_shading_language_420pack : enable\n";
 
-       frag << "#version 140\n";
+       frag << "#version 310 es\n";
        frag << "#extension GL_ARB_separate_shader_objects : enable\n";
        frag << "#extension GL_ARB_shading_language_420pack : enable\n";
 
index c47b6d4..6430199 100644 (file)
@@ -690,7 +690,7 @@ void ShaderOperatorCase::setupShaderData (void)
        std::ostringstream&     op                      = m_isVertexCase ? vtx : frag;
 
        std::string                     header          =
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n";
 
index 9174e03..43330b9 100644 (file)
@@ -100,7 +100,7 @@ ShaderReturnCase::ShaderReturnCase (tcu::TestContext&                       testCtx,
        {
                m_vertShaderSource = shaderSource;
                m_fragShaderSource =
-                       "#version 140\n"
+                       "#version 310 es\n"
                        "#extension GL_ARB_separate_shader_objects : enable\n"
                        "#extension GL_ARB_shading_language_420pack : enable\n"
                        "layout(location = 0) in mediump vec4 v_color;\n"
@@ -114,7 +114,7 @@ ShaderReturnCase::ShaderReturnCase (tcu::TestContext&                       testCtx,
        {
                m_fragShaderSource = shaderSource;
                m_vertShaderSource =
-                       "#version 140\n"
+                       "#version 310 es\n"
                        "#extension GL_ARB_separate_shader_objects : enable\n"
                        "#extension GL_ARB_shading_language_420pack : enable\n"
                        "layout(location = 0) in  highp   vec4 a_position;\n"
@@ -152,7 +152,7 @@ private:
 de::MovePtr<ShaderReturnCase> makeConditionalReturnInFuncCase (tcu::TestContext& context, const std::string& name, const std::string& description, ReturnMode returnMode, bool isVertex)
 {
        tcu::StringTemplate tmpl(
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = ${COORDLOC}) in ${COORDPREC} vec4 ${COORDS};\n"
@@ -196,7 +196,7 @@ de::MovePtr<ShaderReturnCase> makeOutputWriteReturnCase (tcu::TestContext& conte
        tcu::StringTemplate tmpl(
                inFunction
                ?
-                       "#version 140\n"
+                       "#version 310 es\n"
                        "#extension GL_ARB_separate_shader_objects : enable\n"
                        "#extension GL_ARB_shading_language_420pack : enable\n"
                        "layout(location = ${COORDLOC}) in ${COORDPREC} vec4 ${COORDS};\n"
@@ -214,7 +214,7 @@ de::MovePtr<ShaderReturnCase> makeOutputWriteReturnCase (tcu::TestContext& conte
                        "    myfunc();\n"
                        "}\n"
                :
-                       "#version 140\n"
+                       "#version 310 es\n"
                        "#extension GL_ARB_separate_shader_objects : enable\n"
                        "#extension GL_ARB_shading_language_420pack : enable\n"
                        "layout(location = ${COORDLOC}) in ${COORDPREC} vec4 ${COORDS};\n"
@@ -253,7 +253,7 @@ de::MovePtr<ShaderReturnCase> makeOutputWriteReturnCase (tcu::TestContext& conte
 de::MovePtr<ShaderReturnCase> makeReturnInLoopCase (tcu::TestContext& context, const std::string& name, const std::string& description, bool isDynamicLoop, ReturnMode returnMode, bool isVertex)
 {
        tcu::StringTemplate tmpl(
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = ${COORDLOC}) in ${COORDPREC} vec4 ${COORDS};\n"
@@ -349,7 +349,7 @@ ShaderReturnTests::~ShaderReturnTests (void)
 void ShaderReturnTests::init (void)
 {
        addChild(new ShaderReturnCase(m_testCtx, "single_return_vertex", "Single return statement in function", true,
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in highp vec4 a_position;\n"
@@ -365,7 +365,7 @@ void ShaderReturnTests::init (void)
                "    v_color = getColor();\n"
                "}\n", evalReturnAlways, DE_NULL));
        addChild(new ShaderReturnCase(m_testCtx, "single_return_fragment", "Single return statement in function", false,
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in mediump vec4 v_coords;\n"
@@ -393,7 +393,7 @@ void ShaderReturnTests::init (void)
 
        // Unconditional double return in function.
        addChild(new ShaderReturnCase(m_testCtx, "double_return_vertex", "Unconditional double return in function", true,
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in highp vec4 a_position;\n"
@@ -410,7 +410,7 @@ void ShaderReturnTests::init (void)
                "    v_color = getColor();\n"
                "}\n", evalReturnAlways, DE_NULL));
        addChild(new ShaderReturnCase(m_testCtx, "double_return_fragment", "Unconditional double return in function", false,
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in mediump vec4 v_coords;\n"
@@ -427,7 +427,7 @@ void ShaderReturnTests::init (void)
 
        // Last statement in main.
        addChild(new ShaderReturnCase(m_testCtx, "last_statement_in_main_vertex", "Return as a final statement in main()", true,
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in highp vec4 a_position;\n"
@@ -440,7 +440,7 @@ void ShaderReturnTests::init (void)
                "    return;\n"
                "}\n", evalReturnAlways, DE_NULL));
        addChild(new ShaderReturnCase(m_testCtx, "last_statement_in_main_fragment", "Return as a final statement in main()", false,
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in mediump vec4 v_coords;\n"
@@ -483,7 +483,7 @@ void ShaderReturnTests::init (void)
 
        // Unconditional return in infinite loop.
        addChild(new ShaderReturnCase(m_testCtx, "return_in_infinite_loop_vertex", "Return in infinite loop", true,
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in highp vec4 a_position;\n"
@@ -503,7 +503,7 @@ void ShaderReturnTests::init (void)
                "    return;\n"
                "}\n", evalReturnAlways, new ReturnTestUniformSetup(UI_ZERO)));
        addChild(new ShaderReturnCase(m_testCtx, "return_in_infinite_loop_fragment", "Return in infinite loop", false,
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in mediump vec4 v_coords;\n"
index 9d6b5c9..f02e576 100644 (file)
@@ -84,7 +84,7 @@ ShaderStructCase::~ShaderStructCase (void)
 static de::MovePtr<ShaderStructCase> createStructCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, bool isVertexCase, ShaderEvalFunc evalFunc, UniformSetupFunc uniformFunc, const LineStream& shaderSrc)
 {
        static std::string defaultVertSrc =
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in highp vec4 a_position;\n"
@@ -96,7 +96,7 @@ static de::MovePtr<ShaderStructCase> createStructCase (tcu::TestContext& testCtx
                "       gl_Position = a_position;\n"
                "}\n";
        static std::string defaultFragSrc =
-               "#version 140\n"
+               "#version 310 es\n"
                "#extension GL_ARB_separate_shader_objects : enable\n"
                "#extension GL_ARB_shading_language_420pack : enable\n"
                "layout(location = 0) in mediump vec4 v_color;\n"
@@ -114,7 +114,7 @@ static de::MovePtr<ShaderStructCase> createStructCase (tcu::TestContext& testCtx
        if (isVertexCase)
        {
                spParams["HEADER"] =
-                       "#version 140\n"
+                       "#version 310 es\n"
                        "#extension GL_ARB_separate_shader_objects : enable\n"
                        "#extension GL_ARB_shading_language_420pack : enable\n"
                        "layout(location = 0) in highp vec4 a_position;\n"
@@ -130,7 +130,7 @@ static de::MovePtr<ShaderStructCase> createStructCase (tcu::TestContext& testCtx
        else
        {
                spParams["HEADER"]      =
-                       "#version 140\n"
+                       "#version 310 es\n"
                        "#extension GL_ARB_separate_shader_objects : enable\n"
                        "#extension GL_ARB_shading_language_420pack : enable\n"
                        "layout(location = 0) in mediump vec4 v_coords;\n"
index eb56d42..1517375 100644 (file)
@@ -119,12 +119,12 @@ static de::MovePtr<ShaderSwitchCase> makeSwitchCase (tcu::TestContext& testCtx,
        std::ostringstream      frag;
        std::ostringstream&     op              = isVertex ? vtx : frag;
 
-       vtx << "#version 140\n"
+       vtx << "#version 310 es\n"
                << "#extension GL_ARB_separate_shader_objects : enable\n"
                << "#extension GL_ARB_shading_language_420pack : enable\n"
                << "layout(location = 0) in highp vec4 a_position;\n"
                << "layout(location = 1) in highp vec4 a_coords;\n\n";
-       frag    << "#version 140\n"
+       frag    << "#version 310 es\n"
                        << "#extension GL_ARB_separate_shader_objects : enable\n"
                        << "#extension GL_ARB_shading_language_420pack : enable\n"
                        << "layout(location = 0) out mediump vec4 o_color;\n";
index a317fa0..19cecc4 100644 (file)
@@ -374,12 +374,7 @@ tcu::TestStatus SpvAsmComputeShaderInstance::iterate (void)
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // sType
                DE_NULL,                                                                                // pNext
                VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
-               (VkRenderPass)0u,                                                               // renderPass
-               0u,                                                                                             // subpass
-               (VkFramebuffer)0u,                                                              // framebuffer
-               VK_FALSE,                                                                               // occlusionQueryEnable
-               (VkQueryControlFlags)0,
-               (VkQueryPipelineStatisticFlags)0,
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        const tcu::IVec3&                               numWorkGroups           = m_shaderSpec.numWorkGroups;
@@ -406,6 +401,7 @@ tcu::TestStatus SpvAsmComputeShaderInstance::iterate (void)
                DE_NULL,
                0u,
                (const VkSemaphore*)DE_NULL,
+               (const VkPipelineStageFlags*)DE_NULL,
                1u,
                &cmdBuffer.get(),
                0u,
index 9c83e84..ceb0ba0 100644 (file)
@@ -145,6 +145,7 @@ static const char* const s_CommonTypes =
        "%i32       = OpTypeInt 32 1\n"
        "%f32       = OpTypeFloat 32\n"
        "%uvec3     = OpTypeVector %u32 3\n"
+       "%fvec3     = OpTypeVector %f32 3\n"
        "%uvec3ptr  = OpTypePointer Input %uvec3\n"
        "%f32ptr    = OpTypePointer Uniform %f32\n"
        "%f32arr    = OpTypeRuntimeArray %f32\n";
@@ -557,6 +558,7 @@ tcu::TestCaseGroup* createOpCopyMemoryGroup (tcu::TestContext& testCtx)
                "OpName %id             \"gl_GlobalInvocationID\"\n"
 
                "OpDecorate %id BuiltIn GlobalInvocationId\n"
+               "OpDecorate %vec4arr ArrayStride 16\n"
 
                + string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
 
@@ -616,6 +618,7 @@ tcu::TestCaseGroup* createOpCopyMemoryGroup (tcu::TestContext& testCtx)
                "OpName %id             \"gl_GlobalInvocationID\"\n"
 
                "OpDecorate %id BuiltIn GlobalInvocationId\n"
+               "OpDecorate %f32arr100 ArrayStride 4\n"
 
                + string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
 
@@ -657,7 +660,7 @@ tcu::TestCaseGroup* createOpCopyMemoryGroup (tcu::TestContext& testCtx)
        fillRandomScalars(rnd, -200.f, 200.f, &inputFloats3[0], 16);
 
        for (size_t ndx = 0; ndx < 16; ++ndx)
-               outputFloats3[ndx] = -inputFloats3[ndx];
+               outputFloats3[ndx] = inputFloats3[ndx];
 
        spec3.assembly =
                string(s_ShaderPreamble) +
@@ -666,6 +669,14 @@ tcu::TestCaseGroup* createOpCopyMemoryGroup (tcu::TestContext& testCtx)
                "OpName %id             \"gl_GlobalInvocationID\"\n"
 
                "OpDecorate %id BuiltIn GlobalInvocationId\n"
+               "OpMemberDecorate %inbuf 0 Offset 0\n"
+               "OpMemberDecorate %inbuf 1 Offset 16\n"
+               "OpMemberDecorate %inbuf 2 Offset 32\n"
+               "OpMemberDecorate %inbuf 3 Offset 48\n"
+               "OpMemberDecorate %outbuf 0 Offset 0\n"
+               "OpMemberDecorate %outbuf 1 Offset 16\n"
+               "OpMemberDecorate %outbuf 2 Offset 32\n"
+               "OpMemberDecorate %outbuf 3 Offset 48\n"
 
                + string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
 
@@ -766,7 +777,6 @@ tcu::TestCaseGroup* createOpCopyObjectGroup (tcu::TestContext& testCtx)
 
                + string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
 
-               "%fvec3    = OpTypeVector %f32 3\n"
                "%fmat     = OpTypeMatrix %fvec3 3\n"
                "%three    = OpConstant %u32 3\n"
                "%farr     = OpTypeArray %f32 %three\n"
@@ -909,7 +919,8 @@ tcu::TestCaseGroup* createOpUnreachableGroup (tcu::TestContext& testCtx)
                "%inval       = OpLoad %f32 %inloc\n"
                "%outloc      = OpAccessChain %f32ptr %outdata %zero %x\n"
                "%ret_const5  = OpFunctionCall %u32 %func_const5\n"
-               "%ret_modulo4 = OpFunctionCall %u32 %func_modulo4 %thousand\n"
+               "%v_thousand  = OpVariable %u32ptr Function %thousand\n"
+               "%ret_modulo4 = OpFunctionCall %u32 %func_modulo4 %v_thousand\n"
                "%cmp_gt      = OpUGreaterThan %bool %ret_const5 %ret_modulo4\n"
                "               OpSelectionMerge %if_end None\n"
                "               OpBranchConditional %cmp_gt %if_true %if_false\n"
@@ -1180,6 +1191,7 @@ tcu::TestCaseGroup* createSpecConstantGroup (tcu::TestContext& testCtx)
                "OpDecorate %id BuiltIn GlobalInvocationId\n"
                "OpDecorate %sc_0  SpecId 0\n"
                "OpDecorate %sc_1  SpecId 1\n"
+               "OpDecorate %i32arr ArrayStride 4\n"
 
                + string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
 
@@ -1293,6 +1305,7 @@ tcu::TestCaseGroup* createSpecConstantGroup (tcu::TestContext& testCtx)
                "OpDecorate %sc_0  SpecId 0\n"
                "OpDecorate %sc_1  SpecId 1\n"
                "OpDecorate %sc_2  SpecId 2\n"
+               "OpDecorate %i32arr ArrayStride 4\n"
 
                + string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
 
@@ -1712,23 +1725,24 @@ tcu::TestCaseGroup* createMultipleShaderGroup (tcu::TestContext& testCtx)
                "OpEntryPoint GLCompute %comp_main1 \"entrypoint1\" %id\n"
                "OpEntryPoint GLCompute %comp_main2 \"entrypoint2\" %id\n"
                // A module cannot have two OpEntryPoint instructions with the same Execution Model and the same Name string.
-               "OpEntryPoint Vertex    %vert_main  \"entrypoint2\" %vert_builtins %vertexID %instanceID\n"
-               "OpExecutionMode %vert_main LocalSize 1 1 1\n"
+               "OpEntryPoint Vertex    %vert_main  \"entrypoint2\" %vert_builtins %vertexIndex %instanceIndex\n"
+               "OpExecutionMode %comp_main1 LocalSize 1 1 1\n"
+               "OpExecutionMode %comp_main2 LocalSize 1 1 1\n"
 
                "OpName %comp_main1              \"entrypoint1\"\n"
                "OpName %comp_main2              \"entrypoint2\"\n"
                "OpName %vert_main               \"entrypoint2\"\n"
                "OpName %id                      \"gl_GlobalInvocationID\"\n"
                "OpName %vert_builtin_st         \"gl_PerVertex\"\n"
-               "OpName %vertexID                \"gl_VertexID\"\n"
-               "OpName %instanceID              \"gl_InstanceID\"\n"
+               "OpName %vertexIndex             \"gl_VertexIndex\"\n"
+               "OpName %instanceIndex           \"gl_InstanceIndex\"\n"
                "OpMemberName %vert_builtin_st 0 \"gl_Position\"\n"
                "OpMemberName %vert_builtin_st 1 \"gl_PointSize\"\n"
                "OpMemberName %vert_builtin_st 2 \"gl_ClipDistance\"\n"
 
                "OpDecorate %id                      BuiltIn GlobalInvocationId\n"
-               "OpDecorate %vertexID                BuiltIn VertexId\n"
-               "OpDecorate %instanceID              BuiltIn InstanceId\n"
+               "OpDecorate %vertexIndex             BuiltIn VertexIndex\n"
+               "OpDecorate %instanceIndex           BuiltIn InstanceIndex\n"
                "OpDecorate %vert_builtin_st         Block\n"
                "OpMemberDecorate %vert_builtin_st 0 BuiltIn Position\n"
                "OpMemberDecorate %vert_builtin_st 1 BuiltIn PointSize\n"
@@ -1736,6 +1750,10 @@ tcu::TestCaseGroup* createMultipleShaderGroup (tcu::TestContext& testCtx)
 
                + string(s_InputOutputBufferTraits) + string(s_CommonTypes) + string(s_InputOutputBuffer) +
 
+               "%zero       = OpConstant %i32 0\n"
+               "%one        = OpConstant %u32 1\n"
+               "%c_f32_1    = OpConstant %f32 1\n"
+
                "%i32ptr              = OpTypePointer Input %i32\n"
                "%vec4                = OpTypeVector %f32 4\n"
                "%vec4ptr             = OpTypePointer Output %vec4\n"
@@ -1745,11 +1763,8 @@ tcu::TestCaseGroup* createMultipleShaderGroup (tcu::TestContext& testCtx)
                "%vert_builtins       = OpVariable %vert_builtin_st_ptr Output\n"
 
                "%id         = OpVariable %uvec3ptr Input\n"
-               "%vertexID   = OpVariable %i32ptr Input\n"
-               "%instanceID = OpVariable %i32ptr Input\n"
-               "%zero       = OpConstant %i32 0\n"
-               "%one        = OpConstant %u32 1\n"
-               "%c_f32_1    = OpConstant %f32 1\n"
+               "%vertexIndex = OpVariable %i32ptr Input\n"
+               "%instanceIndex = OpVariable %i32ptr Input\n"
                "%c_vec4_1   = OpConstantComposite %vec4 %c_f32_1 %c_f32_1 %c_f32_1 %c_f32_1\n"
 
                // gl_Position = vec4(1.);
@@ -2025,10 +2040,9 @@ tcu::TestCaseGroup* createOpConstantNullGroup (tcu::TestContext& testCtx)
        cases.push_back(CaseParameter("vec4float32",    "%type = OpTypeVector %f32 4"));
        cases.push_back(CaseParameter("vec3bool",               "%type = OpTypeVector %bool 3"));
        cases.push_back(CaseParameter("vec2uint32",             "%type = OpTypeVector %u32 2"));
-       cases.push_back(CaseParameter("matrix",                 "%type = OpTypeMatrix %uvec3 3"));
+       cases.push_back(CaseParameter("matrix",                 "%type = OpTypeMatrix %fvec3 3"));
        cases.push_back(CaseParameter("array",                  "%100 = OpConstant %u32 100\n"
                                                                                                        "%type = OpTypeArray %i32 %100"));
-       cases.push_back(CaseParameter("runtimearray",   "%type = OpTypeRuntimeArray %f32"));
        cases.push_back(CaseParameter("struct",                 "%type = OpTypeStruct %f32 %i32 %u32"));
        cases.push_back(CaseParameter("pointer",                "%type = OpTypePointer Function %i32"));
 
@@ -2093,11 +2107,11 @@ tcu::TestCaseGroup* createOpConstantCompositeGroup (tcu::TestContext& testCtx)
 
        cases.push_back(CaseParameter("vector",                 "%five = OpConstant %u32 5\n"
                                                                                                        "%const = OpConstantComposite %uvec3 %five %zero %five"));
-       cases.push_back(CaseParameter("matrix",                 "%m3uvec3 = OpTypeMatrix %uvec3 3\n"
+       cases.push_back(CaseParameter("matrix",                 "%m3uvec3 = OpTypeMatrix %fvec3 3\n"
                                                                                                        "%ten = OpConstant %u32 10\n"
                                                                                                        "%vec = OpConstantComposite %uvec3 %ten %zero %ten\n"
                                                                                                        "%mat = OpConstantComposite %m3uvec3 %vec %vec %vec"));
-       cases.push_back(CaseParameter("struct",                 "%m2vec3 = OpTypeMatrix %uvec3 2\n"
+       cases.push_back(CaseParameter("struct",                 "%m2vec3 = OpTypeMatrix %fvec3 2\n"
                                                                                                        "%struct = OpTypeStruct %u32 %f32 %uvec3 %m2vec3\n"
                                                                                                        "%one = OpConstant %u32 1\n"
                                                                                                        "%point5 = OpConstant %f32 0.5\n"
@@ -2149,7 +2163,7 @@ float constructNormalizedFloat (deInt32 exponent, deUint32 significand)
 
        for (deInt32 idx = 0; idx < 23; ++idx)
        {
-               f += ((significand & 0x800000) == 0) ? 0.f : std::ldexp(1.0f, -idx);
+               f += ((significand & 0x800000) == 0) ? 0.f : std::ldexp(1.0f, -(idx + 1));
                significand <<= 1;
        }
 
@@ -2278,6 +2292,7 @@ tcu::TestCaseGroup* createOpQuantizeToF16Group (tcu::TestContext& testCtx)
                        }
                }
 
+               spec.assembly = shader;
                spec.inputs.push_back(BufferSp(new Float32Buffer(infinities)));
                spec.outputs.push_back(BufferSp(new Float32Buffer(results)));
                spec.numWorkGroups = IVec3(numElements, 1, 1);
@@ -2305,6 +2320,7 @@ tcu::TestCaseGroup* createOpQuantizeToF16Group (tcu::TestContext& testCtx)
                        }
                }
 
+               spec.assembly = shader;
                spec.inputs.push_back(BufferSp(new Float32Buffer(nans)));
                spec.outputs.push_back(BufferSp(new Float32Buffer(nans)));
                spec.numWorkGroups = IVec3(numElements, 1, 1);
@@ -2354,6 +2370,7 @@ tcu::TestCaseGroup* createOpQuantizeToF16Group (tcu::TestContext& testCtx)
                        }
                }
 
+               spec.assembly = shader;
                spec.inputs.push_back(BufferSp(new Float32Buffer(small)));
                spec.outputs.push_back(BufferSp(new Float32Buffer(zeros)));
                spec.numWorkGroups = IVec3(numElements, 1, 1);
@@ -2372,6 +2389,7 @@ tcu::TestCaseGroup* createOpQuantizeToF16Group (tcu::TestContext& testCtx)
                for (size_t idx = 0; idx < numElements; ++idx)
                        exact.push_back(static_cast<float>(idx - 100));
 
+               spec.assembly = shader;
                spec.inputs.push_back(BufferSp(new Float32Buffer(exact)));
                spec.outputs.push_back(BufferSp(new Float32Buffer(exact)));
                spec.numWorkGroups = IVec3(numElements, 1, 1);
@@ -2390,6 +2408,7 @@ tcu::TestCaseGroup* createOpQuantizeToF16Group (tcu::TestContext& testCtx)
                inputs.push_back(constructNormalizedFloat(2,    0x01E000));
                inputs.push_back(constructNormalizedFloat(1,    0xFFE000));
 
+               spec.assembly = shader;
                spec.verifyIO = &compareOpQuantizeF16ComputeExactCase;
                spec.inputs.push_back(BufferSp(new Float32Buffer(inputs)));
                spec.outputs.push_back(BufferSp(new Float32Buffer(inputs)));
@@ -2644,7 +2663,6 @@ tcu::TestCaseGroup* createOpConstantUsageGroup (tcu::TestContext& testCtx)
 
                + string(s_InputOutputBufferTraits) + string(s_CommonTypes) +
 
-               "%fvec3     = OpTypeVector %f32 3\n"
                "%fmat      = OpTypeMatrix %fvec3 3\n"
                "%ten       = OpConstant %u32 10\n"
                "%f32arr10  = OpTypeArray %f32 %ten\n"
@@ -3106,7 +3124,7 @@ tcu::TestCaseGroup* createOpUndefGroup (tcu::TestContext& testCtx)
        cases.push_back(CaseParameter("float32",                "%type = OpTypeFloat 32"));
        cases.push_back(CaseParameter("vec4float32",    "%type = OpTypeVector %f32 4"));
        cases.push_back(CaseParameter("vec2uint32",             "%type = OpTypeVector %u32 2"));
-       cases.push_back(CaseParameter("matrix",                 "%type = OpTypeMatrix %uvec3 3"));
+       cases.push_back(CaseParameter("matrix",                 "%type = OpTypeMatrix %fvec3 3"));
        cases.push_back(CaseParameter("image",                  "%type = OpTypeImage %f32 2D 0 0 0 0 Unknown"));
        cases.push_back(CaseParameter("sampler",                "%type = OpTypeSampler"));
        cases.push_back(CaseParameter("sampledimage",   "%img = OpTypeImage %f32 2D 0 0 0 0 Unknown\n"
@@ -3370,7 +3388,7 @@ string makeVertexShaderAssembly(const map<string, string>& fragments)
        static const char vertexShaderBoilerplate[] =
                "OpCapability Shader\n"
                "OpMemoryModel Logical GLSL450\n"
-               "OpEntryPoint Vertex %main \"main\" %BP_stream %BP_position %BP_vtx_color %BP_color %BP_gl_VertexID %BP_gl_InstanceID\n"
+               "OpEntryPoint Vertex %main \"main\" %BP_stream %BP_position %BP_vtx_color %BP_color %BP_gl_VertexIndex %BP_gl_InstanceIndex\n"
                "${debug:opt}\n"
                "OpName %main \"main\"\n"
                "OpName %BP_gl_PerVertex \"gl_PerVertex\"\n"
@@ -3383,8 +3401,8 @@ string makeVertexShaderAssembly(const map<string, string>& fragments)
                "OpName %BP_position \"position\"\n"
                "OpName %BP_vtx_color \"vtxColor\"\n"
                "OpName %BP_color \"color\"\n"
-               "OpName %BP_gl_VertexID \"gl_VertexID\"\n"
-               "OpName %BP_gl_InstanceID \"gl_InstanceID\"\n"
+               "OpName %BP_gl_VertexIndex \"gl_VertexIndex\"\n"
+               "OpName %BP_gl_InstanceIndex \"gl_InstanceIndex\"\n"
                "OpMemberDecorate %BP_gl_PerVertex 0 BuiltIn Position\n"
                "OpMemberDecorate %BP_gl_PerVertex 1 BuiltIn PointSize\n"
                "OpMemberDecorate %BP_gl_PerVertex 2 BuiltIn ClipDistance\n"
@@ -3393,8 +3411,8 @@ string makeVertexShaderAssembly(const map<string, string>& fragments)
                "OpDecorate %BP_position Location 0\n"
                "OpDecorate %BP_vtx_color Location 1\n"
                "OpDecorate %BP_color Location 1\n"
-               "OpDecorate %BP_gl_VertexID BuiltIn VertexId\n"
-               "OpDecorate %BP_gl_InstanceID BuiltIn InstanceId\n"
+               "OpDecorate %BP_gl_VertexIndex BuiltIn VertexIndex\n"
+               "OpDecorate %BP_gl_InstanceIndex BuiltIn InstanceIndex\n"
                "${decoration:opt}\n"
                SPIRV_ASSEMBLY_TYPES
                SPIRV_ASSEMBLY_CONSTANTS
@@ -3405,8 +3423,8 @@ string makeVertexShaderAssembly(const map<string, string>& fragments)
                "%BP_position = OpVariable %ip_v4f32 Input\n"
                "%BP_vtx_color = OpVariable %op_v4f32 Output\n"
                "%BP_color = OpVariable %ip_v4f32 Input\n"
-               "%BP_gl_VertexID = OpVariable %ip_i32 Input\n"
-               "%BP_gl_InstanceID = OpVariable %ip_i32 Input\n"
+               "%BP_gl_VertexIndex = OpVariable %ip_i32 Input\n"
+               "%BP_gl_InstanceIndex = OpVariable %ip_i32 Input\n"
                "${pre_main:opt}\n"
                "%main = OpFunction %void None %fun\n"
                "%BP_label = OpLabel\n"
@@ -3932,14 +3950,14 @@ void createCombinedModule(vk::SourceCollections& dst, InstanceContext)
                "OpName %vert_Position \"position\"\n"
                "OpName %vert_vtxColor \"vtxColor\"\n"
                "OpName %vert_color \"color\"\n"
-               "OpName %vert_vertex_id \"gl_VertexID\"\n"
-               "OpName %vert_instance_id \"gl_InstanceID\"\n"
+               "OpName %vert_vertex_id \"gl_VertexIndex\"\n"
+               "OpName %vert_instance_id \"gl_InstanceIndex\"\n"
                "OpDecorate %vert_vtxPosition Location 2\n"
                "OpDecorate %vert_Position Location 0\n"
                "OpDecorate %vert_vtxColor Location 1\n"
                "OpDecorate %vert_color Location 1\n"
-               "OpDecorate %vert_vertex_id BuiltIn VertexId\n"
-               "OpDecorate %vert_instance_id BuiltIn InstanceId\n"
+               "OpDecorate %vert_vertex_id BuiltIn VertexIndex\n"
+               "OpDecorate %vert_instance_id BuiltIn InstanceIndex\n"
 
                "; Geometry decorations\n"
                "OpName %geom_main \"main\"\n"
@@ -4177,21 +4195,21 @@ void createMultipleEntries(vk::SourceCollections& dst, InstanceContext)
                "OpEntryPoint Vertex %main \"vert1\" %Position %vtxColor %color %vtxPosition %vertex_id %instance_id\n"
                "OpEntryPoint Vertex %main2 \"vert2\" %Position %vtxColor %color %vtxPosition %vertex_id %instance_id\n"
 
-               "OpName %main \"frag1\"\n"
-               "OpName %main2 \"frag2\"\n"
+               "OpName %main \"vert1\"\n"
+               "OpName %main2 \"vert2\"\n"
                "OpName %vtxPosition \"vtxPosition\"\n"
                "OpName %Position \"position\"\n"
                "OpName %vtxColor \"vtxColor\"\n"
                "OpName %color \"color\"\n"
-               "OpName %vertex_id \"gl_VertexID\"\n"
-               "OpName %instance_id \"gl_InstanceID\"\n"
+               "OpName %vertex_id \"gl_VertexIndex\"\n"
+               "OpName %instance_id \"gl_InstanceIndex\"\n"
 
                "OpDecorate %vtxPosition Location 2\n"
                "OpDecorate %Position Location 0\n"
                "OpDecorate %vtxColor Location 1\n"
                "OpDecorate %color Location 1\n"
-               "OpDecorate %vertex_id BuiltIn VertexId\n"
-               "OpDecorate %instance_id BuiltIn InstanceId\n"
+               "OpDecorate %vertex_id BuiltIn VertexIndex\n"
+               "OpDecorate %instance_id BuiltIn InstanceIndex\n"
                SPIRV_ASSEMBLY_TYPES
                SPIRV_ASSEMBLY_CONSTANTS
                SPIRV_ASSEMBLY_ARRAYS
@@ -4580,7 +4598,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
        const DeviceInterface&                                          vk                                              = context.getDeviceInterface();
        const VkQueue                                                           queue                                   = context.getUniversalQueue();
        const deUint32                                                          queueFamilyIndex                = context.getUniversalQueueFamilyIndex();
-       const tcu::IVec2                                                        renderSize                              (256, 256);
+       const tcu::UVec2                                                        renderSize                              (256, 256);
        vector<ModuleHandleSp>                                          modules;
        map<VkShaderStageFlagBits, VkShaderModule>      moduleByStage;
        const int                                                                       testSpecificSeed                = 31354125;
@@ -4590,8 +4608,8 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
        bool                                                                            hasTessellation         = false;
 
        const VkPhysicalDeviceFeatures&                         features                                = context.getDeviceFeatures();
-       supportsGeometry                = features.geometryShader;
-       supportsTessellation    = features.tessellationShader;
+       supportsGeometry                = features.geometryShader == VK_TRUE;
+       supportsTessellation    = features.tessellationShader == VK_TRUE;
        hasTessellation                 = (instance.requiredStages & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) ||
                                                                (instance.requiredStages & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT);
 
@@ -4985,7 +5003,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
        {
                VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
                DE_NULL,
-               (VkPipelineTesselationStateCreateFlags)0,
+               (VkPipelineTessellationStateCreateFlags)0,
                3u
        };
 
@@ -5055,12 +5073,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,                    //      VkStructureType                         sType;
                DE_NULL,                                                                                                //      const void*                                     pNext;
                (VkCommandBufferUsageFlags)0,
-               DE_NULL,                                                                                                //      VkRenderPass                            renderPass;
-               0u,                                                                                                             //      deUint32                                        subpass;
-               DE_NULL,                                                                                                //      VkFramebuffer                           framebuffer;
-               VK_FALSE,                                                                                               //      VkBool32                                        occlusionQueryEnable;
-               (VkQueryControlFlags)0,
-               (VkQueryPipelineStatisticFlags)0,
+               (const VkCommandBufferInheritanceInfo*)DE_NULL,
        };
 
        // Record commands
@@ -5093,8 +5106,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
                                1u,                                                                                     //      deUint32                arraySize;
                        }                                                                                       //      VkImageSubresourceRange subresourceRange;
                };
-               const void*                             barriers[]                              = { &vertFlushBarrier, &colorAttBarrier };
-               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, (VkDependencyFlags)0, 1, &vertFlushBarrier, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &colorAttBarrier);
        }
 
        {
@@ -5140,8 +5152,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
                                1u,                                                                                     //      deUint32                        arraySize;
                        }                                                                                       //      VkImageSubresourceRange subresourceRange;
                };
-               const void*                             barriers[]                              = { &renderFinishBarrier };
-               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &renderFinishBarrier);
        }
 
        {
@@ -5175,8 +5186,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
                        0u,                                                                                     //      VkDeviceSize            offset;
                        imageSizeBytes                                                          //      VkDeviceSize            size;
                };
-               const void*                             barriers[]                              = { &copyFinishBarrier };
-               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &copyFinishBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
        }
 
        VK_CHECK(vk.endCommandBuffer(*cmdBuf));
@@ -5212,6 +5222,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
                        DE_NULL,
                        0u,
                        (const VkSemaphore*)DE_NULL,
+                       (const VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &cmdBuf.get(),
                        0u,
@@ -5658,9 +5669,9 @@ tcu::TestCaseGroup* createOpConstantCompositeTests(tcu::TestContext& testCtx)
 
                        "%v                 = OpVariable %fp_stype Function %cval\n"
                        "%vec_ptr           = OpAccessChain %fp_v4f32 %v %c_u32_0\n"
-                       "%f32_ptr           = OpAccessChain %fp_v4f32 %v %c_u32_1\n"
+                       "%f32_ptr           = OpAccessChain %fp_f32 %v %c_u32_1\n"
                        "%vec_val           = OpLoad %v4f32 %vec_ptr\n"
-                       "%f32_val           = OpLoad %v4f32 %f32_ptr\n"
+                       "%f32_val           = OpLoad %f32 %f32_ptr\n"
                        "%tmp1              = OpVectorTimesScalar %v4f32 %c_v4f32_1_1_1_1 %f32_val\n" // vec4(-1)
                        "%tmp2              = OpFAdd %v4f32 %tmp1 %param1\n" // param1 + vec4(-1)
                        "%transformed_param = OpFAdd %v4f32 %tmp2 %vec_val\n" // param1 + vec4(-1) + vec4(1.5, 1.5, 1.5, 1.0)
@@ -6163,7 +6174,7 @@ tcu::TestCaseGroup* createSpecConstantTests (tcu::TestContext& testCtx)
        cases.push_back(SpecConstantTwoIntGraphicsCase("umod",                                  " %i32 0",              " %i32 0",              "%i32",         "UMod                 %sc_0 %sc_1",                             1001,   500,    addZeroToSc,            outputColors2));
        cases.push_back(SpecConstantTwoIntGraphicsCase("bitwiseand",                    " %i32 0",              " %i32 0",              "%i32",         "BitwiseAnd           %sc_0 %sc_1",                             0x33,   0x0d,   addZeroToSc,            outputColors2));
        cases.push_back(SpecConstantTwoIntGraphicsCase("bitwiseor",                             " %i32 0",              " %i32 0",              "%i32",         "BitwiseOr            %sc_0 %sc_1",                             0,              1,              addZeroToSc,            outputColors2));
-       cases.push_back(SpecConstantTwoIntGraphicsCase("bitwisexor",                    " %i32 0",              " %i32 0",              "%i32",         "BitwiseAnd           %sc_0 %sc_1",                             0x2e,   0x2f,   addZeroToSc,            outputColors2));
+       cases.push_back(SpecConstantTwoIntGraphicsCase("bitwisexor",                    " %i32 0",              " %i32 0",              "%i32",         "BitwiseXor           %sc_0 %sc_1",                             0x2e,   0x2f,   addZeroToSc,            outputColors2));
        cases.push_back(SpecConstantTwoIntGraphicsCase("shiftrightlogical",             " %i32 0",              " %i32 0",              "%i32",         "ShiftRightLogical    %sc_0 %sc_1",                             2,              1,              addZeroToSc,            outputColors2));
        cases.push_back(SpecConstantTwoIntGraphicsCase("shiftrightarithmetic",  " %i32 0",              " %i32 0",              "%i32",         "ShiftRightArithmetic %sc_0 %sc_1",                             -4,             2,              addZeroToSc,            outputColors0));
        cases.push_back(SpecConstantTwoIntGraphicsCase("shiftleftlogical",              " %i32 0",              " %i32 0",              "%i32",         "ShiftLeftLogical     %sc_0 %sc_1",                             1,              0,              addZeroToSc,            outputColors2));
@@ -6947,21 +6958,21 @@ void createOpQuantizeTwoPossibilityTests(tcu::TestCaseGroup* testCtx)
                {
                        "negative_round_up_or_round_down",
                        "-0x1.6008p-7",
-                       -constructNormalizedFloat(8, 0x600800),
+                       -constructNormalizedFloat(-7, 0x600800),
                        "-0x1.6p-7",
                        "-0x1.604p-7"
                },
                {
                        "carry_bit",
                        "0x1.01ep2",
-                       constructNormalizedFloat(8, 0x01e000),
+                       constructNormalizedFloat(2, 0x01e000),
                        "0x1.01cp2",
                        "0x1.02p2"
                },
                {
                        "carry_to_exponent",
-                       "0x1.feep1",
-                       constructNormalizedFloat(8, 0xfee000),
+                       "0x1.ffep1",
+                       constructNormalizedFloat(1, 0xffe000),
                        "0x1.ffcp1",
                        "0x1.0p2"
                },
@@ -7318,7 +7329,6 @@ void addTessCtrlTest(tcu::TestCaseGroup* group, const char* name, const map<stri
                ShaderElement("vert", "main", VK_SHADER_STAGE_VERTEX_BIT),
                ShaderElement("tessc", "main", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT),
                ShaderElement("tesse", "main", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT),
-               ShaderElement("geom", "main", VK_SHADER_STAGE_GEOMETRY_BIT),
                ShaderElement("frag", "main", VK_SHADER_STAGE_FRAGMENT_BIT),
        };
 
index 36326c6..3e6a3f5 100644 (file)
@@ -2065,12 +2065,7 @@ tcu::TestStatus SSBOLayoutCaseInstance::iterate (void)
                vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,        //      VkStructureType                         sType;
                DE_NULL,                                                                                        //      const void*                                     pNext;
                0u,                                                                                                     //      VkCmdBufferOptimizeFlags        flags;
-               DE_NULL,                                                                                        //      VkRenderPass                            renderPass;
-               0u,                                                                                                     //      deUint32                                        subpass;
-               DE_NULL,                                                                                        //      VkFramebuffer                           framebuffer;
-               vk::VK_FALSE,
-               (vk::VkQueryControlFlags)0,
-               (vk::VkQueryPipelineStatisticFlags)0,
+               (const vk::VkCommandBufferInheritanceInfo*)DE_NULL,
        };
        VK_CHECK(vk.beginCommandBuffer(*cmdBuffer, &cmdBufBeginParams));
 
@@ -2095,6 +2090,7 @@ tcu::TestStatus SSBOLayoutCaseInstance::iterate (void)
                DE_NULL,
                0u,
                (const vk::VkSemaphore*)DE_NULL,
+               (const vk::VkPipelineStageFlags*)DE_NULL,
                1u,
                &cmdBuffer.get(),
                0u,
index 8dfbb37..889d353 100644 (file)
@@ -1155,7 +1155,7 @@ Move<VkBuffer> createBuffer (Context& context, VkDeviceSize bufferSize, vk::VkBu
        return vk::createBuffer(vk, vkDevice, &bufferInfo);
 }
 
-Move<vk::VkImage> createImage2D (Context& context, int width, int height, vk::VkFormat format, vk::VkImageTiling tiling, vk::VkImageUsageFlags usageFlags)
+Move<vk::VkImage> createImage2D (Context& context, deUint32 width, deUint32 height, vk::VkFormat format, vk::VkImageTiling tiling, vk::VkImageUsageFlags usageFlags)
 {
        const deUint32                          queueFamilyIndex        = context.getUniversalQueueFamilyIndex();
        const vk::VkImageCreateInfo     params                          =
@@ -1165,7 +1165,7 @@ Move<vk::VkImage> createImage2D (Context& context, int width, int height, vk::Vk
                0u,                                                                                     // VkImageCreateFlags           flags
                vk::VK_IMAGE_TYPE_2D,                                           // VkImageType                          imageType
                format,                                                                         // VkFormat                                     format
-               { width, height, 1 },                                           // VkExtent3D                           extent
+               { width, height, 1u },                                          // VkExtent3D                           extent
                1u,                                                                                     // deUint32                                     mipLevels
                1u,                                                                                     // deUint32                                     arrayLayers
                VK_SAMPLE_COUNT_1_BIT,                                          // VkSampleCountFlagBits        samples
@@ -1456,12 +1456,7 @@ tcu::TestStatus UniformBlockCaseInstance::iterate (void)
                vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,        // VkStructureType                                      sType;
                DE_NULL,                                                                                        // const void*                                          pNext;
                0u,                                                                                                     // VkCommandBufferUsageFlags            flags;
-               (vk::VkRenderPass)0,                                                            // VkRenderPass                                         renderPass;
-               0u,                                                                                                     // deUint32                                                     subpass;
-               (vk::VkFramebuffer)0,                                                           // VkFramebuffer                                        framebuffer;
-               false,                                                                                          // VkBool32                                                     occlusionQueryEnable;
-               0u,                                                                                                     // VkQueryControlFlags                          queryFlags;
-               0u                                                                                                      // VkQueryPipelineStatisticFlags        pipelineStatistics;
+               (const vk::VkCommandBufferInheritanceInfo*)DE_NULL,
        };
        VK_CHECK(vk.beginCommandBuffer(*cmdBuffer, &beginInfo));
 
@@ -1510,9 +1505,11 @@ tcu::TestStatus UniformBlockCaseInstance::iterate (void)
                                1u,                                                                             // deUint32                             arraySize;
                        }                                                                                               // VkImageSubresourceRange      subresourceRange
                };
-               const void* const barriers[] = { &renderFinishBarrier };
 
-               vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0,
+                                                         0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                         0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                         1, &renderFinishBarrier);
        }
 
        // Add Image->Buffer copy command
@@ -1549,9 +1546,11 @@ tcu::TestStatus UniformBlockCaseInstance::iterate (void)
                        0u,                                                                                                     // VkDeviceSize                 offset;
                        (vk::VkDeviceSize)(RENDER_WIDTH * RENDER_HEIGHT * 4)// VkDeviceSize                     size;
                };
-               const void* const barriers[] = { &copyFinishBarrier };
 
-               vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0,
+                                                         0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                         1, &copyFinishBarrier,
+                                                         0, (const vk::VkImageMemoryBarrier*)DE_NULL);
        }
 
        VK_CHECK(vk.endCommandBuffer(*cmdBuffer));
@@ -1572,6 +1571,7 @@ tcu::TestStatus UniformBlockCaseInstance::iterate (void)
                        DE_NULL,                                                // const void*                          pNext;
                        0u,                                                             // deUint32                                     waitSemaphoreCount;
                        DE_NULL,                                                // const VkSemaphore*           pWaitSemaphores;
+                       (const VkPipelineStageFlags*)DE_NULL,
                        1u,                                                             // deUint32                                     commandBufferCount;
                        &cmdBuffer.get(),                               // const VkCommandBuffer*       pCommandBuffers;
                        0u,                                                             // deUint32                                     signalSemaphoreCount;
index 213d89f..07a1aaa 100644 (file)
@@ -283,24 +283,30 @@ Move<VkCommandBuffer> allocateCommandBuffer (const DeviceInterface&       vk,
 void beginCommandBuffer (const DeviceInterface&                        vk,
                                                 VkCommandBuffer                                cmdBuffer,
                                                 VkCommandBufferUsageFlags              pBeginInfo_flags,
-                                                VkRenderPass                                   pBeginInfo_renderPass,
-                                                deUint32                                               pBeginInfo_subpass,
-                                                VkFramebuffer                                  pBeginInfo_framebuffer,
-                                                VkBool32                                               pBeginInfo_occlusionQueryEnable,
-                                                VkQueryControlFlags                    pBeginInfo_queryFlags,
-                                                VkQueryPipelineStatisticFlags  pBeginInfo_pipelineStatistics)
+                                                VkRenderPass                                   pInheritanceInfo_renderPass,
+                                                deUint32                                               pInheritanceInfo_subpass,
+                                                VkFramebuffer                                  pInheritanceInfo_framebuffer,
+                                                VkBool32                                               pInheritanceInfo_occlusionQueryEnable,
+                                                VkQueryControlFlags                    pInheritanceInfo_queryFlags,
+                                                VkQueryPipelineStatisticFlags  pInheritanceInfo_pipelineStatistics)
 {
-       const VkCommandBufferBeginInfo pBeginInfo =
+       const VkCommandBufferInheritanceInfo    pInheritanceInfo        =
+       {
+               VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+               DE_NULL,
+               pInheritanceInfo_renderPass,
+               pInheritanceInfo_subpass,
+               pInheritanceInfo_framebuffer,
+               pInheritanceInfo_occlusionQueryEnable,
+               pInheritanceInfo_queryFlags,
+               pInheritanceInfo_pipelineStatistics,
+       };
+       const VkCommandBufferBeginInfo                  pBeginInfo                      =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
                pBeginInfo_flags,
-               pBeginInfo_renderPass,
-               pBeginInfo_subpass,
-               pBeginInfo_framebuffer,
-               pBeginInfo_occlusionQueryEnable,
-               pBeginInfo_queryFlags,
-               pBeginInfo_pipelineStatistics,
+               &pInheritanceInfo,
        };
        VK_CHECK(vk.beginCommandBuffer(cmdBuffer, &pBeginInfo));
 }
@@ -318,6 +324,7 @@ void queueSubmit (const DeviceInterface& vk, VkQueue queue, deUint32 cmdBufferCo
                DE_NULL,
                0u,                                                             // waitSemaphoreCount
                (const VkSemaphore*)DE_NULL,    // pWaitSemaphores
+               (const VkPipelineStageFlags*)DE_NULL,
                cmdBufferCount,                                 // commandBufferCount
                pCmdBuffers,
                0u,                                                             // signalSemaphoreCount
@@ -958,13 +965,13 @@ VkAttachmentReference createAttachmentReference (const AttachmentReference& refe
 }
 
 VkSubpassDescription createSubpassDescription (const Subpass&                                  subpass,
-                                                                                          vector<VkAttachmentReference>*       attachmentReferenceLists)
+                                                                                          vector<VkAttachmentReference>*       attachmentReferenceLists,
+                                                                                          vector<deUint32>*                            preserveAttachmentReferences)
 {
        vector<VkAttachmentReference>&  inputAttachmentReferences                       = attachmentReferenceLists[0];
        vector<VkAttachmentReference>&  colorAttachmentReferences                       = attachmentReferenceLists[1];
        vector<VkAttachmentReference>&  resolveAttachmentReferences                     = attachmentReferenceLists[2];
        vector<VkAttachmentReference>&  depthStencilAttachmentReferences        = attachmentReferenceLists[3];
-       vector<VkAttachmentReference>&  preserveAttachmentReferences            = attachmentReferenceLists[4];
 
        for (size_t attachmentNdx = 0; attachmentNdx < subpass.getColorAttachments().size(); attachmentNdx++)
                colorAttachmentReferences.push_back(createAttachmentReference(subpass.getColorAttachments()[attachmentNdx]));
@@ -978,26 +985,26 @@ VkSubpassDescription createSubpassDescription (const Subpass&                                     subpass,
        depthStencilAttachmentReferences.push_back(createAttachmentReference(subpass.getDepthStencilAttachment()));
 
        for (size_t attachmentNdx = 0; attachmentNdx < subpass.getPreserveAttachments().size(); attachmentNdx++)
-               preserveAttachmentReferences.push_back(createAttachmentReference(subpass.getPreserveAttachments()[attachmentNdx]));
+               preserveAttachmentReferences->push_back(subpass.getPreserveAttachments()[attachmentNdx].getAttachment());
 
        DE_ASSERT(resolveAttachmentReferences.empty() || colorAttachmentReferences.size() == resolveAttachmentReferences.size());
 
        {
                const VkSubpassDescription subpassDescription =
                {
-                       subpass.getFlags(),                                                                                                                                     // flags;
-                       subpass.getPipelineBindPoint(),                                                                                                         // pipelineBindPoint;
+                       subpass.getFlags(),                                                                                                                                             // flags;
+                       subpass.getPipelineBindPoint(),                                                                                                                 // pipelineBindPoint;
 
-                       (deUint32)inputAttachmentReferences.size(),                                                                                     // inputCount;
-                       inputAttachmentReferences.empty() ? DE_NULL : &inputAttachmentReferences[0],            // inputAttachments;
+                       (deUint32)inputAttachmentReferences.size(),                                                                                             // inputCount;
+                       inputAttachmentReferences.empty() ? DE_NULL : &inputAttachmentReferences[0],                    // inputAttachments;
 
-                       (deUint32)colorAttachmentReferences.size(),                                                                                     // colorCount;
-                       colorAttachmentReferences.empty() ? DE_NULL :  &colorAttachmentReferences[0],           // colorAttachments;
-                       resolveAttachmentReferences.empty() ? DE_NULL : &resolveAttachmentReferences[0],        // resolveAttachments;
+                       (deUint32)colorAttachmentReferences.size(),                                                                                             // colorCount;
+                       colorAttachmentReferences.empty() ? DE_NULL :  &colorAttachmentReferences[0],                   // colorAttachments;
+                       resolveAttachmentReferences.empty() ? DE_NULL : &resolveAttachmentReferences[0],                // resolveAttachments;
 
-                       &depthStencilAttachmentReferences[0],                                                                                           // pDepthStencilAttachment;
-                       (deUint32)preserveAttachmentReferences.size(),                                                                          // preserveCount;
-                       preserveAttachmentReferences.empty() ? DE_NULL : &preserveAttachmentReferences[0]       // preserveAttachments;
+                       &depthStencilAttachmentReferences[0],                                                                                                   // pDepthStencilAttachment;
+                       (deUint32)preserveAttachmentReferences->size(),                                                                                 // preserveCount;
+                       preserveAttachmentReferences->empty() ? DE_NULL : &(*preserveAttachmentReferences)[0]   // preserveAttachments;
                };
 
                return subpassDescription;
@@ -1027,17 +1034,18 @@ Move<VkRenderPass> createRenderPass (const DeviceInterface&     vk,
                                                                         VkDevice                               device,
                                                                         const RenderPass&              renderPassInfo)
 {
-       const size_t                                                    perSubpassAttachmentReferenceLists = 5;
+       const size_t                                                    perSubpassAttachmentReferenceLists = 4;
        vector<VkAttachmentDescription>                 attachments;
        vector<VkSubpassDescription>                    subpasses;
        vector<VkSubpassDependency>                             dependencies;
        vector<vector<VkAttachmentReference> >  attachmentReferenceLists(renderPassInfo.getSubpasses().size() * perSubpassAttachmentReferenceLists);
+       vector<vector<deUint32> >                               preserveAttachments(renderPassInfo.getSubpasses().size());
 
        for (size_t attachmentNdx = 0; attachmentNdx < renderPassInfo.getAttachments().size(); attachmentNdx++)
                attachments.push_back(createAttachmentDescription(renderPassInfo.getAttachments()[attachmentNdx]));
 
        for (size_t subpassNdx = 0; subpassNdx < renderPassInfo.getSubpasses().size(); subpassNdx++)
-               subpasses.push_back(createSubpassDescription(renderPassInfo.getSubpasses()[subpassNdx], &(attachmentReferenceLists[subpassNdx * perSubpassAttachmentReferenceLists])));
+               subpasses.push_back(createSubpassDescription(renderPassInfo.getSubpasses()[subpassNdx], &(attachmentReferenceLists[subpassNdx * perSubpassAttachmentReferenceLists]), &preserveAttachments[subpassNdx]));
 
        for (size_t depNdx = 0; depNdx < renderPassInfo.getDependencies().size(); depNdx++)
                dependencies.push_back(createSubpassDependency(renderPassInfo.getDependencies()[depNdx]));
@@ -1078,7 +1086,7 @@ Move<VkImage> createAttachmentImage (const DeviceInterface&       vk,
                                                                         VkImageUsageFlags              usageFlags,
                                                                         VkImageLayout                  layout)
 {
-       const VkExtent3D size_                                  = { (deInt32)size.x(), (deInt32)size.y(), 1 };
+       const VkExtent3D size_                                  = { size.x(), size.y(), 1u };
        VkImageUsageFlags targetUsageFlags              = 0;
        const tcu::TextureFormat textureFormat  = mapVkFormat(format);
 
@@ -1592,7 +1600,7 @@ Move<VkPipeline> createSubpassPipeline (const DeviceInterface&            vk,
        const VkRect2D scissor =
        {
                { (deInt32)renderInfo.getViewportOffset().x(),  (deInt32)renderInfo.getViewportOffset().y() },
-               { (deInt32)renderInfo.getViewportSize().x(),    (deInt32)renderInfo.getViewportSize().y() }
+               { renderInfo.getViewportSize().x(),                             renderInfo.getViewportSize().y() }
        };
        const VkPipelineViewportStateCreateInfo viewportState =
        {
@@ -1795,7 +1803,7 @@ public:
                                {
                                        {
                                                { (deInt32)colorClear.getOffset().x(),  (deInt32)colorClear.getOffset().y()     },
-                                               { (deInt32)colorClear.getSize().x(),    (deInt32)colorClear.getSize().y()       }
+                                               { colorClear.getSize().x(),                             colorClear.getSize().y()                        }
                                        },                                      // rect
                                        0u,                                     // baseArrayLayer
                                        1u,                                     // layerCount
@@ -1821,7 +1829,7 @@ public:
                        {
                                {
                                        { (deInt32)depthStencilClear.getOffset().x(),   (deInt32)depthStencilClear.getOffset().y()      },
-                                       { (deInt32)depthStencilClear.getSize().x(),             (deInt32)depthStencilClear.getSize().y()        }
+                                       { depthStencilClear.getSize().x(),                              depthStencilClear.getSize().y()                         }
                                },                                                      // rect
                                0u,                                                     // baseArrayLayer
                                1u,                                                     // layerCount
@@ -1898,14 +1906,10 @@ void pushImageInitializationCommands (const DeviceInterface&                                                            vk,
                }
 
                if (!initializeLayouts.empty())
-               {
-                       vector<VkImageMemoryBarrier*> initializeLayoutPtrs;
-
-                       for (size_t ndx = 0; ndx < initializeLayouts.size(); ndx++)
-                               initializeLayoutPtrs.push_back(&initializeLayouts[ndx]);
-
-                       vk.cmdPipelineBarrier(commandBuffer, 0, 0, VK_FALSE, (deUint32)initializeLayouts.size(), (const void* const*)&initializeLayoutPtrs[0]);
-               }
+                       vk.cmdPipelineBarrier(commandBuffer, (VkPipelineStageFlags)0, (VkPipelineStageFlags)0, (VkDependencyFlags)0,
+                                                                 0, (const VkMemoryBarrier*)DE_NULL,
+                                                                 0, (const VkBufferMemoryBarrier*)DE_NULL,
+                                                                 (deUint32)initializeLayouts.size(), &initializeLayouts[0]);
        }
 
        for (size_t attachmentNdx = 0; attachmentNdx < attachmentInfo.size(); attachmentNdx++)
@@ -1989,14 +1993,10 @@ void pushImageInitializationCommands (const DeviceInterface&                                                            vk,
                }
 
                if (!renderPassLayouts.empty())
-               {
-                       vector<VkImageMemoryBarrier*> renderPassLayoutPtrs;
-
-                       for (size_t ndx = 0; ndx < renderPassLayouts.size(); ndx++)
-                               renderPassLayoutPtrs.push_back(&renderPassLayouts[ndx]);
-
-                       vk.cmdPipelineBarrier(commandBuffer, 0, 0, VK_FALSE, (deUint32)renderPassLayouts.size(), (const void* const*)&renderPassLayoutPtrs[0]);
-               }
+                       vk.cmdPipelineBarrier(commandBuffer, 0, 0, (VkDependencyFlags)0,
+                                                                 0, (const VkMemoryBarrier*)DE_NULL,
+                                                                 0, (const VkBufferMemoryBarrier*)DE_NULL,
+                                                                 (deUint32)renderPassLayouts.size(), &renderPassLayouts[0]);
        }
 }
 
@@ -2024,8 +2024,8 @@ void pushRenderPassCommands (const DeviceInterface&                                                               vk,
        {
                const VkRect2D renderArea =
                {
-                       { (deInt32)renderPos.x(),       (deInt32)renderPos.y() },
-                       { (deInt32)renderSize.x(),      (deInt32)renderSize.y() }
+                       { (deInt32)renderPos.x(),       (deInt32)renderPos.y()  },
+                       { renderSize.x(),                       renderSize.y()                  }
                };
 
                for (size_t subpassNdx = 0; subpassNdx < subpassRenderers.size(); subpassNdx++)
@@ -2103,16 +2103,13 @@ void pushReadImagesToBuffers (const DeviceInterface&                                                            vk,
                }
 
                if (!imageBarriers.empty())
-               {
-                       vector<VkImageMemoryBarrier*> clearLayoutPtrs;
-
-                       for (size_t ndx = 0; ndx < imageBarriers.size(); ndx++)
-                               clearLayoutPtrs.push_back(&imageBarriers[ndx]);
-
-                       vk.cmdPipelineBarrier(commandBuffer, getAllPipelineStageFlags(),
-                                                                                                getAllPipelineStageFlags(),
-                                                                                                VK_FALSE, (deUint32)imageBarriers.size(), (const void* const*)&clearLayoutPtrs[0]);
-               }
+                       vk.cmdPipelineBarrier(commandBuffer,
+                                                                 getAllPipelineStageFlags(),
+                                                                 getAllPipelineStageFlags(),
+                                                                 (VkDependencyFlags)0,
+                                                                 0, (const VkMemoryBarrier*)DE_NULL,
+                                                                 0, (const VkBufferMemoryBarrier*)DE_NULL,
+                                                                 (deUint32)imageBarriers.size(), &imageBarriers[0]);
        }
 
        for (size_t attachmentNdx = 0; attachmentNdx < attachmentInfo.size(); attachmentNdx++)
@@ -2133,7 +2130,7 @@ void pushReadImagesToBuffers (const DeviceInterface&                                                              vk,
                                1                                               // arraySize
                        },
                        { 0, 0, 0 },                            // imageOffset
-                       { (deInt32)targetSize.x(), (deInt32)targetSize.y(), 1 }         // imageExtent
+                       { targetSize.x(), targetSize.y(), 1u }          // imageExtent
                };
 
                vk.cmdCopyImageToBuffer(commandBuffer, attachmentResources[attachmentNdx]->getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, attachmentResources[attachmentNdx]->getBuffer(), 1, &rect);
@@ -2152,7 +2149,7 @@ void pushReadImagesToBuffers (const DeviceInterface&                                                              vk,
                                        1                                               // arraySize
                                },
                                { 0, 0, 0 },                            // imageOffset
-                               { (deInt32)targetSize.x(), (deInt32)targetSize.y(), 1 }         // imageExtent
+                               { targetSize.x(), targetSize.y(), 1u }          // imageExtent
                        };
 
                        vk.cmdCopyImageToBuffer(commandBuffer, attachmentResources[attachmentNdx]->getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, attachmentResources[attachmentNdx]->getSecondaryBuffer(), 1, &stencilRect);
@@ -2211,16 +2208,13 @@ void pushReadImagesToBuffers (const DeviceInterface&                                                            vk,
                }
 
                if (!bufferBarriers.empty())
-               {
-                       vector<VkBufferMemoryBarrier*> clearLayoutPtrs;
-
-                       for (size_t ndx = 0; ndx < bufferBarriers.size(); ndx++)
-                               clearLayoutPtrs.push_back(&bufferBarriers[ndx]);
-
-                       vk.cmdPipelineBarrier(commandBuffer, getAllPipelineStageFlags(),
-                                                                                                getAllPipelineStageFlags(),
-                                                                                                VK_FALSE, (deUint32)bufferBarriers.size(), (const void* const*)&clearLayoutPtrs[0]);
-               }
+                       vk.cmdPipelineBarrier(commandBuffer,
+                                                                 getAllPipelineStageFlags(),
+                                                                 getAllPipelineStageFlags(),
+                                                                 (VkDependencyFlags)0,
+                                                                 0, (const VkMemoryBarrier*)DE_NULL,
+                                                                 (deUint32)bufferBarriers.size(), &bufferBarriers[0],
+                                                                 0, (const VkImageMemoryBarrier*)DE_NULL);
        }
 }
 
@@ -2811,6 +2805,7 @@ void checkColorRenderQuad (const ConstPixelBufferAccess&  result,
 
                                if (pixelStatus.getColorStatus() == PixelStatus::STATUS_UNDEFINED)
                                {
+                                       const Vec4      minDiff         = Vec4(1.0f) / (IVec4(1) << tcu::getTextureFormatMantissaBitDepth(format)).cast<float>();
                                        const Vec4      minUvs          = computeUvs(posA, posB, IVec2(x-1, y-1));
                                        const Vec4      maxUvs          = computeUvs(posA, posB, IVec2(x+1, y+1));
                                        const bool      softCheck       = std::abs(x - posA.x()) <= 1 || std::abs(x - posB.x()) <= 1
@@ -2818,10 +2813,22 @@ void checkColorRenderQuad (const ConstPixelBufferAccess&        result,
 
                                        const Vec4      resColor        (result.getPixel(x, y));
 
-                                       const Vec4      minRefColor     = srgb ? tcu::linearToSRGB(valueMax * minUvs + valueMin * (Vec4(1.0f) - minUvs))
-                                                                                                        : valueMax * minUvs + valueMin * (Vec4(1.0f) - minUvs) - threshold;
-                                       const Vec4      maxRefColor     = srgb ? tcu::linearToSRGB(valueMax * maxUvs + valueMin * (Vec4(1.0f) - maxUvs))
-                                                                                                        : valueMax * maxUvs + valueMin * (Vec4(1.0f) - maxUvs) + threshold;
+                                       Vec4    minRefColor     = srgb ? tcu::linearToSRGB(valueMax * minUvs + valueMin * (Vec4(1.0f) - minUvs))
+                                                                                        : valueMax * minUvs + valueMin * (Vec4(1.0f) - minUvs) - threshold;
+                                       Vec4    maxRefColor     = srgb ? tcu::linearToSRGB(valueMax * maxUvs + valueMin * (Vec4(1.0f) - maxUvs))
+                                                                                        : valueMax * maxUvs + valueMin * (Vec4(1.0f) - maxUvs) + threshold;
+
+                                       // Take into account rounding and quantization
+                                       if (channelClass == tcu::TEXTURECHANNELCLASS_FLOATING_POINT)
+                                       {
+                                               minRefColor = tcu::min(minRefColor * (Vec4(1.0f) - minDiff), minRefColor * (Vec4(1.0f) + minDiff));
+                                               maxRefColor = tcu::max(maxRefColor * (Vec4(1.0f) - minDiff), maxRefColor * (Vec4(1.0f) + minDiff));
+                                       }
+                                       else
+                                       {
+                                               minRefColor = minRefColor - minDiff;
+                                               maxRefColor = maxRefColor + minDiff;
+                                       }
 
                                        DE_ASSERT(minRefColor[0] <= maxRefColor[0]);
                                        DE_ASSERT(minRefColor[1] <= maxRefColor[1]);
@@ -3709,6 +3716,18 @@ tcu::TestStatus renderPassTest (Context& context, TestConfig config)
        checkTextureFormatSupport(log, context.getInstanceInterface(), context.getPhysicalDevice(), config.renderPass.getAttachments());
 
        {
+               const vk::VkPhysicalDeviceProperties properties = vk::getPhysicalDeviceProperties(context.getInstanceInterface(), context.getPhysicalDevice());
+
+               log << TestLog::Message << "Max color attachments: " << properties.limits.maxColorAttachments << TestLog::EndMessage;
+
+               for (size_t subpassNdx = 0; subpassNdx < renderPassInfo.getSubpasses().size(); subpassNdx++)
+               {
+                        if (renderPassInfo.getSubpasses()[subpassNdx].getColorAttachments().size() > (size_t)properties.limits.maxColorAttachments)
+                                TCU_THROW(NotSupportedError, "Subpass uses more than maxColorAttachments.");
+               }
+       }
+
+       {
                const VkDevice                                                          device                                                          = context.getDevice();
                const DeviceInterface&                                          vk                                                                      = context.getDeviceInterface();
                const VkQueue                                                           queue                                                           = context.getUniversalQueue();
@@ -3836,7 +3855,7 @@ static const VkFormat s_coreDepthStencilFormats[] =
 
 de::MovePtr<tcu::TestCaseGroup> createAttachmentTestCaseGroup (tcu::TestContext& testCtx)
 {
-       const deUint32 attachmentCounts[] = { 1, 3, 8 };
+       const deUint32 attachmentCounts[] = { 1, 3, 4, 8 };
        const VkAttachmentLoadOp loadOps[] =
        {
                VK_ATTACHMENT_LOAD_OP_LOAD,
@@ -4011,12 +4030,10 @@ de::MovePtr<tcu::TestCaseGroup> createAttachmentAllocationTestGroup (tcu::TestCo
                VK_ATTACHMENT_STORE_OP_DONT_CARE
        };
 
-       const VkImageLayout initialAndFinalLayouts[] =
+       const VkImageLayout initialAndFinalColorLayouts[] =
        {
                VK_IMAGE_LAYOUT_GENERAL,
                VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-               VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-               VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
                VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
                VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
                VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
@@ -4118,8 +4135,8 @@ de::MovePtr<tcu::TestCaseGroup> createAttachmentAllocationTestGroup (tcu::TestCo
                                const VkAttachmentLoadOp        loadOp                  = rng.choose<VkAttachmentLoadOp>(DE_ARRAY_BEGIN(loadOps), DE_ARRAY_END(loadOps));
                                const VkAttachmentStoreOp       storeOp                 = rng.choose<VkAttachmentStoreOp>(DE_ARRAY_BEGIN(storeOps), DE_ARRAY_END(storeOps));
 
-                               const VkImageLayout                     initialLayout   = rng.choose<VkImageLayout>(DE_ARRAY_BEGIN(initialAndFinalLayouts), DE_ARRAY_END(initialAndFinalLayouts));
-                               const VkImageLayout                     finalizeLayout  = rng.choose<VkImageLayout>(DE_ARRAY_BEGIN(initialAndFinalLayouts), DE_ARRAY_END(initialAndFinalLayouts));
+                               const VkImageLayout                     initialLayout   = rng.choose<VkImageLayout>(DE_ARRAY_BEGIN(initialAndFinalColorLayouts), DE_ARRAY_END(initialAndFinalColorLayouts));
+                               const VkImageLayout                     finalizeLayout  = rng.choose<VkImageLayout>(DE_ARRAY_BEGIN(initialAndFinalColorLayouts), DE_ARRAY_END(initialAndFinalColorLayouts));
 
                                const VkAttachmentLoadOp        stencilLoadOp   = rng.choose<VkAttachmentLoadOp>(DE_ARRAY_BEGIN(loadOps), DE_ARRAY_END(loadOps));
                                const VkAttachmentStoreOp       stencilStoreOp  = rng.choose<VkAttachmentStoreOp>(DE_ARRAY_BEGIN(storeOps), DE_ARRAY_END(storeOps));
index 4faa29e..b828933 100644 (file)
@@ -786,7 +786,7 @@ Move<vk::VkBuffer> createBuffer (Context& context, vk::VkDeviceSize size, vk::Vk
        return vk::createBuffer(context.getDeviceInterface(), context.getDevice(), &params);
 }
 
-Move<vk::VkImage> createImage2D (Context& context, int width, int height, vk::VkFormat format, vk::VkImageTiling tiling, vk::VkImageUsageFlags usageFlags)
+Move<vk::VkImage> createImage2D (Context& context, deUint32 width, deUint32 height, vk::VkFormat format, vk::VkImageTiling tiling, vk::VkImageUsageFlags usageFlags)
 {
        const deUint32                                  queueFamilyIndex        = context.getUniversalQueueFamilyIndex();
        const vk::VkImageCreateInfo             params                          =
@@ -796,7 +796,7 @@ Move<vk::VkImage> createImage2D (Context& context, int width, int height, vk::Vk
                0u,                                                                                     // flags
                vk::VK_IMAGE_TYPE_2D,                                           // imageType
                format,                                                                         // format
-               { width, height, 1 },                                           // extent
+               { width, height, 1u },                                          // extent
                1u,                                                                                     // mipLevels
                1u,                                                                                     // arraySize
                vk::VK_SAMPLE_COUNT_1_BIT,                                      // samples
@@ -996,7 +996,7 @@ Move<vk::VkPipeline> createPipeline (Context&                                       context,
                                                                         const PipelineProgram&         program,
                                                                         vk::VkRenderPass                       renderPass,
                                                                         vk::VkPipelineLayout           pipelineLayout,
-                                                                        tcu::IVec2                                     renderSize)
+                                                                        tcu::UVec2                                     renderSize)
 {
        const vector<vk::VkPipelineShaderStageCreateInfo>       shaderStageParams               (getPipelineShaderStageCreateInfo(program));
        const vector<vk::VkVertexInputAttributeDescription>     vertexAttribParams              (getVertexAttributeDescriptions(inputValues, inputLayout));
@@ -1365,7 +1365,7 @@ ShaderCaseInstance::ShaderCaseInstance (Context& context, const ShaderCaseSpecif
        , m_program                             (context, spec)
        , m_descriptorSetLayout (createDescriptorSetLayout(context, m_program.getStages()))
        , m_pipelineLayout              (createPipelineLayout(context, *m_descriptorSetLayout))
-       , m_pipeline                    (createPipeline(context, spec.values.inputs, m_inputLayout, m_program, *m_renderPass, *m_pipelineLayout, tcu::IVec2(RENDER_WIDTH, RENDER_HEIGHT)))
+       , m_pipeline                    (createPipeline(context, spec.values.inputs, m_inputLayout, m_program, *m_renderPass, *m_pipelineLayout, tcu::UVec2(RENDER_WIDTH, RENDER_HEIGHT)))
 
        , m_descriptorPool              (createDescriptorPool(context))
        , m_descriptorSet               (allocateDescriptorSet(context, *m_descriptorPool, *m_descriptorSetLayout))
@@ -1439,12 +1439,7 @@ ShaderCaseInstance::ShaderCaseInstance (Context& context, const ShaderCaseSpecif
                        vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,        // sType
                        DE_NULL,                                                                                        // pNext
                        0u,                                                                                                     // flags
-                       (vk::VkRenderPass)0,                                                            // renderPass
-                       0u,                                                                                                     // subpass
-                       (vk::VkFramebuffer)0,                                                           // framebuffer
-                       vk::VK_FALSE,                                                                           // occlusionQueryEnable
-                       (vk::VkQueryControlFlags)0,
-                       (vk::VkQueryPipelineStatisticFlags)0
+                       (const vk::VkCommandBufferInheritanceInfo*)DE_NULL,
                };
 
                VK_CHECK(vkd.beginCommandBuffer(*m_cmdBuffer, &beginInfo));
@@ -1477,10 +1472,11 @@ ShaderCaseInstance::ShaderCaseInstance (Context& context, const ShaderCaseSpecif
                                1u,                                                                                             // arraySize
                        }                                                                                               // subresourceRange
                };
-               const void* const                               barriers[]                      = { &vertFlushBarrier, &colorAttBarrier };
 
-               vkd.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
-                                                          DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vkd.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, (vk::VkDependencyFlags)0,
+                                                          1, &vertFlushBarrier,
+                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                          1, &colorAttBarrier);
        }
 
        {
@@ -1533,10 +1529,11 @@ ShaderCaseInstance::ShaderCaseInstance (Context& context, const ShaderCaseSpecif
                                1u,                                                                                             // arraySize
                        }                                                                                               // subresourceRange
                };
-               const void* const                               barriers[]                      = { &renderFinishBarrier };
 
-               vkd.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
-                                                          DE_FALSE, DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vkd.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, (vk::VkDependencyFlags)0,
+                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
+                                                          1, &renderFinishBarrier);
        }
 
        {
@@ -1571,10 +1568,11 @@ ShaderCaseInstance::ShaderCaseInstance (Context& context, const ShaderCaseSpecif
                        0u,                                                                                                     // offset
                        (vk::VkDeviceSize)(RENDER_WIDTH*RENDER_HEIGHT*4)        // size
                };
-               const void* const                               barriers[]                      = { &copyFinishBarrier };
 
-               vkd.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT,
-                                                          DE_FALSE, (deUint32)DE_LENGTH_OF_ARRAY(barriers), barriers);
+               vkd.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, (vk::VkDependencyFlags)0,
+                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
+                                                          1, &copyFinishBarrier,
+                                                          0, (const vk::VkImageMemoryBarrier*)DE_NULL);
        }
 
        VK_CHECK(vkd.endCommandBuffer(*m_cmdBuffer));
@@ -1632,6 +1630,7 @@ TestStatus ShaderCaseInstance::iterate (void)
                        DE_NULL,
                        0u,                                                                                     // waitSemaphoreCount
                        (const vk::VkSemaphore*)0,                                      // pWaitSemaphores
+                       (const vk::VkPipelineStageFlags*)DE_NULL,
                        1u,
                        &m_cmdBuffer.get(),
                        0u,                                                                                     // signalSemaphoreCount
index 1e6a659..657d640 100644 (file)
@@ -84,9 +84,9 @@ Move<VkDevice> createDefaultDevice (const InstanceInterface& vki, VkPhysicalDevi
        deviceInfo.pNext                                                = DE_NULL;
        deviceInfo.queueCreateInfoCount                 = 1u;
        deviceInfo.pQueueCreateInfos                    = &queueInfo;
-       deviceInfo.enabledExtensionNameCount    = 0u;
+       deviceInfo.enabledExtensionCount                = 0u;
        deviceInfo.ppEnabledExtensionNames              = DE_NULL;
-       deviceInfo.enabledLayerNameCount                = 0u;
+       deviceInfo.enabledLayerCount                    = 0u;
        deviceInfo.ppEnabledLayerNames                  = DE_NULL;
        deviceInfo.pEnabledFeatures                             = &enabledFeatures;
 
@@ -96,33 +96,33 @@ Move<VkDevice> createDefaultDevice (const InstanceInterface& vki, VkPhysicalDevi
 class DefaultDevice
 {
 public:
-                                                                       DefaultDevice                                   (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine);
-                                                                       ~DefaultDevice                                  (void);
+                                                                               DefaultDevice                                   (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine);
+                                                                               ~DefaultDevice                                  (void);
 
-       VkInstance                                              getInstance                                             (void) const    { return *m_instance;                                   }
-       const InstanceInterface&                getInstanceInterface                    (void) const    { return m_instanceInterface;                   }
+       VkInstance                                                      getInstance                                             (void) const    { return *m_instance;                                   }
+       const InstanceInterface&                        getInstanceInterface                    (void) const    { return m_instanceInterface;                   }
 
-       VkPhysicalDevice                                getPhysicalDevice                               (void) const    { return m_physicalDevice;                              }
-       const VkPhysicalDeviceFeatures& getDeviceFeatures                               (void) const    { return m_deviceFeatures;                              }
-       VkDevice                                                getDevice                                               (void) const    { return *m_device;                                             }
-       const DeviceInterface&                  getDeviceInterface                              (void) const    { return m_deviceInterface;                             }
-       const VkPhysicalDeviceProperties& getDeviceProperties                   (void) const    { return m_deviceProperties;                    }
+       VkPhysicalDevice                                        getPhysicalDevice                               (void) const    { return m_physicalDevice;                              }
+       const VkPhysicalDeviceFeatures&         getDeviceFeatures                               (void) const    { return m_deviceFeatures;                              }
+       VkDevice                                                        getDevice                                               (void) const    { return *m_device;                                             }
+       const DeviceInterface&                          getDeviceInterface                              (void) const    { return m_deviceInterface;                             }
+       const VkPhysicalDeviceProperties&       getDeviceProperties                             (void) const    { return m_deviceProperties;                    }
 
-       deUint32                                                getUniversalQueueFamilyIndex    (void) const    { return m_universalQueueFamilyIndex;   }
-       VkQueue                                                 getUniversalQueue                               (void) const;
+       deUint32                                                        getUniversalQueueFamilyIndex    (void) const    { return m_universalQueueFamilyIndex;   }
+       VkQueue                                                         getUniversalQueue                               (void) const;
 
 private:
-       const Unique<VkInstance>                m_instance;
-       const InstanceDriver                    m_instanceInterface;
+       const Unique<VkInstance>                        m_instance;
+       const InstanceDriver                            m_instanceInterface;
 
-       const VkPhysicalDevice                  m_physicalDevice;
+       const VkPhysicalDevice                          m_physicalDevice;
 
-       const deUint32                                  m_universalQueueFamilyIndex;
-       const VkPhysicalDeviceFeatures  m_deviceFeatures;
+       const deUint32                                          m_universalQueueFamilyIndex;
+       const VkPhysicalDeviceFeatures          m_deviceFeatures;
        const VkPhysicalDeviceProperties        m_deviceProperties;
 
-       const Unique<VkDevice>                  m_device;
-       const DeviceDriver                              m_deviceInterface;
+       const Unique<VkDevice>                          m_device;
+       const DeviceDriver                                      m_deviceInterface;
 };
 
 DefaultDevice::DefaultDevice (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine)
diff --git a/external/vulkancts/mustpass/1.0.0/.gitignore b/external/vulkancts/mustpass/1.0.0/.gitignore
new file mode 100644 (file)
index 0000000..893edd4
--- /dev/null
@@ -0,0 +1,3 @@
+vk-default.txt
+com.drawelements.deqp.vk.xml
+mustpass.xml
diff --git a/external/vulkancts/mustpass/1.0.0/src/excluded-tests.txt b/external/vulkancts/mustpass/1.0.0/src/excluded-tests.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/external/vulkancts/mustpass/1.0.0/src/master.txt b/external/vulkancts/mustpass/1.0.0/src/master.txt
new file mode 100644 (file)
index 0000000..6db63aa
--- /dev/null
@@ -0,0 +1 @@
+dEQP-VK.*
diff --git a/external/vulkancts/mustpass/1.0.0/src/test-issues.txt b/external/vulkancts/mustpass/1.0.0/src/test-issues.txt
new file mode 100644 (file)
index 0000000..e69de29
index 93e4541..d5a1625 100644 (file)
@@ -37,7 +37,7 @@ class VulkanLibrary : public vk::Library
 {
 public:
        VulkanLibrary (void)
-               : m_library     ("vulkan-0.dll")
+               : m_library     ("vulkan-1.dll")
                , m_driver      (m_library)
        {
        }
index f573947..c517d68 100644 (file)
@@ -625,7 +625,7 @@ TestCase::IterateResult FboRenderCase::iterate (void)
        }
 
        // Compare images
-       const float             threshold       = 0.02f;
+       const float             threshold       = 0.03f;
        bool                    imagesOk        = tcu::fuzzyCompare(log, "ComparisonResult", "Image comparison result", refFrame, gles2Frame, threshold, tcu::COMPARE_LOG_RESULT);
 
        if (!imagesOk && !failReason)
index 3c87553..69245eb 100644 (file)
 #
 #-------------------------------------------------------------------------
 
-from build.common import *
+from build.common import DEQP_DIR
 from build.config import ANY_GENERATOR
-from build.build import build
-from build_caselists import Module, getBuildConfig, genCaseList, getCaseListPath, DEFAULT_BUILD_DIR, DEFAULT_TARGET
-from fnmatch import fnmatch
-from copy import copy
+from build_caselists import Module, getModuleByName, getBuildConfig, DEFAULT_BUILD_DIR, DEFAULT_TARGET
+from mustpass import Project, Package, Mustpass, Configuration, include, exclude, genMustpassLists
 
-import xml.etree.cElementTree as ElementTree
-import xml.dom.minidom as minidom
-
-CTS_DATA_DIR   = os.path.join(DEQP_DIR, "android", "cts")
-APK_NAME               = "com.drawelements.deqp.apk"
+import os
 
 COPYRIGHT_DECLARATION = """
      Copyright (C) 2015 The Android Open Source Project
@@ -49,388 +43,15 @@ COPYRIGHT_DECLARATION = """
      limitations under the License.
      """
 
-GENERATED_FILE_WARNING = """
-     This file has been automatically generated. Edit with caution.
-     """
-
-class Configuration:
-       def __init__ (self, name, glconfig, rotation, surfacetype, filters):
-               self.name                       = name
-               self.glconfig           = glconfig
-               self.rotation           = rotation
-               self.surfacetype        = surfacetype
-               self.filters            = filters
-
-class Package:
-       def __init__ (self, module, configurations):
-               self.module                     = module
-               self.configurations     = configurations
-
-class Mustpass:
-       def __init__ (self, version, packages):
-               self.version    = version
-               self.packages   = packages
-
-class Filter:
-       TYPE_INCLUDE = 0
-       TYPE_EXCLUDE = 1
-
-       def __init__ (self, type, filename):
-               self.type               = type
-               self.filename   = filename
-
-class TestRoot:
-       def __init__ (self):
-               self.children   = []
-
-class TestGroup:
-       def __init__ (self, name):
-               self.name               = name
-               self.children   = []
-
-class TestCase:
-       def __init__ (self, name):
-               self.name                       = name
-               self.configurations     = []
-
-class GLESVersion:
-       def __init__(self, major, minor):
-               self.major = major
-               self.minor = minor
-
-       def encode (self):
-               return (self.major << 16) | (self.minor)
-
-def getModuleGLESVersion (module):
-       versions = {
-               'dEQP-EGL':             GLESVersion(2,0),
-               'dEQP-GLES2':   GLESVersion(2,0),
-               'dEQP-GLES3':   GLESVersion(3,0),
-               'dEQP-GLES31':  GLESVersion(3,1)
-       }
-       return versions[module.name]
-
-def getSrcDir (mustpass):
-       return os.path.join(CTS_DATA_DIR, mustpass.version, "src")
-
-def getTmpDir (mustpass):
-       return os.path.join(CTS_DATA_DIR, mustpass.version, "tmp")
-
-def getModuleShorthand (module):
-       assert module.name[:5] == "dEQP-"
-       return module.name[5:].lower()
-
-def getCaseListFileName (package, configuration):
-       return "%s-%s.txt" % (getModuleShorthand(package.module), configuration.name)
-
-def getDstCaseListPath (mustpass, package, configuration):
-       return os.path.join(CTS_DATA_DIR, mustpass.version, getCaseListFileName(package, configuration))
-
-def getCTSPackageName (package):
-       return "com.drawelements.deqp." + getModuleShorthand(package.module)
-
-def getCommandLine (config):
-       return "--deqp-gl-config-name=%s --deqp-screen-rotation=%s --deqp-surface-type=%s --deqp-watchdog=enable" % (config.glconfig, config.rotation, config.surfacetype)
-
-def readCaseList (filename):
-       cases = []
-       with open(filename, 'rb') as f:
-               for line in f:
-                       if line[:6] == "TEST: ":
-                               cases.append(line[6:].strip())
-       return cases
-
-def getCaseList (buildCfg, generator, module):
-       build(buildCfg, generator, [module.binName])
-       genCaseList(buildCfg, generator, module, "txt")
-       return readCaseList(getCaseListPath(buildCfg, module, "txt"))
-
-def readPatternList (filename):
-       ptrns = []
-       with open(filename, 'rb') as f:
-               for line in f:
-                       line = line.strip()
-                       if len(line) > 0 and line[0] != '#':
-                               ptrns.append(line)
-       return ptrns
-
-def applyPatterns (caseList, patterns, filename, op):
-       matched                 = set()
-       errors                  = []
-       curList                 = copy(caseList)
-       trivialPtrns    = [p for p in patterns if p.find('*') < 0]
-       regularPtrns    = [p for p in patterns if p.find('*') >= 0]
-
-       # Apply trivial (just case paths)
-       allCasesSet             = set(caseList)
-       for path in trivialPtrns:
-               if path in allCasesSet:
-                       if path in matched:
-                               errors.append((path, "Same case specified more than once"))
-                       matched.add(path)
-               else:
-                       errors.append((path, "Test case not found"))
-
-       curList = [c for c in curList if c not in matched]
-
-       for pattern in regularPtrns:
-               matchedThisPtrn = set()
-
-               for case in curList:
-                       if fnmatch(case, pattern):
-                               matchedThisPtrn.add(case)
-
-               if len(matchedThisPtrn) == 0:
-                       errors.append((pattern, "Pattern didn't match any cases"))
-
-               matched = matched | matchedThisPtrn
-               curList = [c for c in curList if c not in matched]
-
-       for pattern, reason in errors:
-               print "ERROR: %s: %s" % (reason, pattern)
-
-       if len(errors) > 0:
-               die("Found %s invalid patterns while processing file %s" % (len(errors), filename))
-
-       return [c for c in caseList if op(c in matched)]
-
-def applyInclude (caseList, patterns, filename):
-       return applyPatterns(caseList, patterns, filename, lambda b: b)
-
-def applyExclude (caseList, patterns, filename):
-       return applyPatterns(caseList, patterns, filename, lambda b: not b)
-
-def readPatternLists (mustpass):
-       lists = {}
-       for package in mustpass.packages:
-               for cfg in package.configurations:
-                       for filter in cfg.filters:
-                               if not filter.filename in lists:
-                                       lists[filter.filename] = readPatternList(os.path.join(getSrcDir(mustpass), filter.filename))
-       return lists
-
-def applyFilters (caseList, patternLists, filters):
-       res = copy(caseList)
-       for filter in filters:
-               ptrnList = patternLists[filter.filename]
-               if filter.type == Filter.TYPE_INCLUDE:
-                       res = applyInclude(res, ptrnList, filter.filename)
-               else:
-                       assert filter.type == Filter.TYPE_EXCLUDE
-                       res = applyExclude(res, ptrnList, filter.filename)
-       return res
-
-def appendToHierarchy (root, casePath):
-       def findChild (node, name):
-               for child in node.children:
-                       if child.name == name:
-                               return child
-               return None
-
-       curNode         = root
-       components      = casePath.split('.')
-
-       for component in components[:-1]:
-               nextNode = findChild(curNode, component)
-               if not nextNode:
-                       nextNode = TestGroup(component)
-                       curNode.children.append(nextNode)
-               curNode = nextNode
-
-       if not findChild(curNode, components[-1]):
-               curNode.children.append(TestCase(components[-1]))
-
-def buildTestHierachy (caseList):
-       root = TestRoot()
-       for case in caseList:
-               appendToHierarchy(root, case)
-       return root
-
-def buildTestCaseMap (root):
-       caseMap = {}
-
-       def recursiveBuild (curNode, prefix):
-               curPath = prefix + curNode.name
-               if isinstance(curNode, TestCase):
-                       caseMap[curPath] = curNode
-               else:
-                       for child in curNode.children:
-                               recursiveBuild(child, curPath + '.')
-
-       for child in root.children:
-               recursiveBuild(child, '')
-
-       return caseMap
-
-def include (filename):
-       return Filter(Filter.TYPE_INCLUDE, filename)
-
-def exclude (filename):
-       return Filter(Filter.TYPE_EXCLUDE, filename)
-
-def prettifyXML (doc):
-       doc.insert(0, ElementTree.Comment(COPYRIGHT_DECLARATION))
-       doc.insert(1, ElementTree.Comment(GENERATED_FILE_WARNING))
-       uglyString      = ElementTree.tostring(doc, 'utf-8')
-       reparsed        = minidom.parseString(uglyString)
-       return reparsed.toprettyxml(indent='\t', encoding='utf-8')
-
-def genCTSPackageXML (package, root):
-       def isLeafGroup (testGroup):
-               numGroups       = 0
-               numTests        = 0
-
-               for child in testGroup.children:
-                       if isinstance(child, TestCase):
-                               numTests += 1
-                       else:
-                               numGroups += 1
-
-               assert numGroups + numTests > 0
-
-               if numGroups > 0 and numTests > 0:
-                       die("Mixed groups and cases in %s" % testGroup.name)
-
-               return numGroups == 0
-
-       def makeConfiguration (parentElem, configuration):
-               return ElementTree.SubElement(parentElem, "TestInstance", glconfig=configuration.glconfig, rotation=configuration.rotation, surfacetype=configuration.surfacetype)
-
-       def makeTestCase (parentElem, testCase):
-               caseElem = ElementTree.SubElement(parentElem, "Test", name=testCase.name)
-               for config in testCase.configurations:
-                       makeConfiguration(caseElem, config)
-               return caseElem
-
-       def makeTestGroup (parentElem, testGroup):
-               groupElem = ElementTree.SubElement(parentElem, "TestCase" if isLeafGroup(testGroup) else "TestSuite", name=testGroup.name)
-               for child in testGroup.children:
-                       if isinstance(child, TestCase):
-                               makeTestCase(groupElem, child)
-                       else:
-                               makeTestGroup(groupElem, child)
-               return groupElem
-
-       pkgElem = ElementTree.Element("TestPackage",
-                                                                 name                          = package.module.name,
-                                                                 appPackageName        = getCTSPackageName(package),
-                                                                 testType                      = "deqpTest")
-
-       pkgElem.set("xmlns:deqp", "http://drawelements.com/deqp")
-       pkgElem.set("deqp:glesVersion", str(getModuleGLESVersion(package.module).encode()))
-
-       for child in root.children:
-               makeTestGroup(pkgElem, child)
-
-       return pkgElem
-
-def genSpecXML (mustpass):
-       mustpassElem = ElementTree.Element("Mustpass", version = mustpass.version)
-
-       for package in mustpass.packages:
-               packageElem = ElementTree.SubElement(mustpassElem, "TestPackage", name = package.module.name)
-
-               for config in package.configurations:
-                       configElem = ElementTree.SubElement(packageElem, "Configuration",
-                                                                                               name                    = config.name,
-                                                                                               caseListFile    = getCaseListFileName(package, config),
-                                                                                               commandLine             = getCommandLine(config))
-
-       return mustpassElem
-
-def addOptionElement (parent, optionName, optionValue):
-       ElementTree.SubElement(parent, "option", name=optionName, value=optionValue)
-
-def genAndroidTestXml (mustpass):
-       INSTALLER_CLASS = "com.android.compatibility.common.tradefed.targetprep.ApkInstaller"
-       RUNNER_CLASS = "com.drawelements.deqp.runner.DeqpTestRunner"
-       configElement = ElementTree.Element("configuration")
-       preparerElement = ElementTree.SubElement(configElement, "target_preparer")
-       preparerElement.set("class", INSTALLER_CLASS)
-       addOptionElement(preparerElement, "cleanup-apks", "true")
-       addOptionElement(preparerElement, "test-file-name", APK_NAME)
-
-       for package in mustpass.packages:
-               for config in package.configurations:
-                       testElement = ElementTree.SubElement(configElement, "test")
-                       testElement.set("class", RUNNER_CLASS)
-                       addOptionElement(testElement, "deqp-package", package.module.name)
-                       addOptionElement(testElement, "deqp-caselist-file", getCaseListFileName(package,config))
-                       # \todo [2015-10-16 kalle]: Replace with just command line? - requires simplifications in the runner/tests as well.
-                       addOptionElement(testElement, "deqp-gl-config-name", config.glconfig)
-                       addOptionElement(testElement, "deqp-surface-type", config.surfacetype)
-                       addOptionElement(testElement, "deqp-screen-rotation", config.rotation)
-
-       return configElement
-
-
-def genMustpass (mustpass, moduleCaseLists):
-       print "Generating mustpass '%s'" % mustpass.version
-
-       patternLists = readPatternLists(mustpass)
-
-       for package in mustpass.packages:
-               allCasesInPkg           = moduleCaseLists[package.module]
-               matchingByConfig        = {}
-               allMatchingSet          = set()
+CTS_DATA_DIR                                   = os.path.join(DEQP_DIR, "android", "cts")
 
-               for config in package.configurations:
-                       filtered        = applyFilters(allCasesInPkg, patternLists, config.filters)
-                       dstFile         = getDstCaseListPath(mustpass, package, config)
+CTS_PROJECT                                            = Project(path = CTS_DATA_DIR, copyright = COPYRIGHT_DECLARATION)
 
-                       print "  Writing deqp caselist: " + dstFile
-                       writeFile(dstFile, "\n".join(filtered) + "\n")
-
-                       matchingByConfig[config]        = filtered
-                       allMatchingSet                          = allMatchingSet | set(filtered)
-
-               allMatchingCases        = [c for c in allCasesInPkg if c in allMatchingSet] # To preserve ordering
-               root                            = buildTestHierachy(allMatchingCases)
-               testCaseMap                     = buildTestCaseMap(root)
-
-               for config in package.configurations:
-                       for case in matchingByConfig[config]:
-                               testCaseMap[case].configurations.append(config)
-
-               # NOTE: CTS v2 does not need package XML files. Remove when transition is complete.
-               packageXml      = genCTSPackageXML(package, root)
-               xmlFilename     = os.path.join(CTS_DATA_DIR, mustpass.version, getCTSPackageName(package) + ".xml")
-
-               print "  Writing CTS caselist: " + xmlFilename
-               writeFile(xmlFilename, prettifyXML(packageXml))
-
-       specXML                 = genSpecXML(mustpass)
-       specFilename    = os.path.join(CTS_DATA_DIR, mustpass.version, "mustpass.xml")
-
-       print "  Writing spec: " + specFilename
-       writeFile(specFilename, prettifyXML(specXML))
-
-       # TODO: Which is the best selector mechanism?
-       if (mustpass.version == "mnc"):
-               androidTestXML          = genAndroidTestXml(mustpass)
-               androidTestFilename     = os.path.join(CTS_DATA_DIR, "AndroidTest.xml")
-
-               print "  Writing AndroidTest.xml: " + androidTestFilename
-               writeFile(androidTestFilename, prettifyXML(androidTestXML))
-
-       print "Done!"
-
-def genMustpassLists (mustpassLists, generator, buildCfg):
-       moduleCaseLists = {}
-
-       # Getting case lists involves invoking build, so we want to cache the results
-       for mustpass in mustpassLists:
-               for package in mustpass.packages:
-                       if not package.module in moduleCaseLists:
-                               moduleCaseLists[package.module] = getCaseList(buildCfg, generator, package.module)
-
-       for mustpass in mustpassLists:
-               genMustpass(mustpass, moduleCaseLists)
-
-EGL_MODULE                                             = Module(name = "dEQP-EGL", dirName = "egl", binName = "deqp-egl")
-GLES2_MODULE                                   = Module(name = "dEQP-GLES2", dirName = "gles2", binName = "deqp-gles2")
-GLES3_MODULE                                   = Module(name = "dEQP-GLES3", dirName = "gles3", binName = "deqp-gles3")
-GLES31_MODULE                                  = Module(name = "dEQP-GLES31", dirName = "gles31", binName = "deqp-gles31")
+EGL_MODULE                                             = getModuleByName("dEQP-EGL")
+GLES2_MODULE                                   = getModuleByName("dEQP-GLES2")
+GLES3_MODULE                                   = getModuleByName("dEQP-GLES3")
+GLES31_MODULE                                  = getModuleByName("dEQP-GLES31")
+VULKAN_MODULE                                  = getModuleByName("dEQP-VK")
 
 # Lollipop
 
@@ -708,11 +329,13 @@ MASTER_GLES31_PKG                         = Package(module = GLES31_MODULE, configurations = [
        ])
 
 MUSTPASS_LISTS                         = [
-               Mustpass(version = "lmp",               packages = [LMP_GLES3_PKG, LMP_GLES31_PKG]),
-               Mustpass(version = "lmp-mr1",   packages = [LMP_MR1_GLES3_PKG, LMP_MR1_GLES31_PKG]),
-               Mustpass(version = "mnc",               packages = [MNC_EGL_PKG, MNC_GLES2_PKG, MNC_GLES3_PKG, MNC_GLES31_PKG]),
-               Mustpass(version = "master",    packages = [MASTER_EGL_PKG, MASTER_GLES2_PKG, MASTER_GLES3_PKG, MASTER_GLES31_PKG])
+               Mustpass(project = CTS_PROJECT, version = "lmp",                packages = [LMP_GLES3_PKG, LMP_GLES31_PKG]),
+               Mustpass(project = CTS_PROJECT, version = "lmp-mr1",    packages = [LMP_MR1_GLES3_PKG, LMP_MR1_GLES31_PKG]),
+               Mustpass(project = CTS_PROJECT, version = "mnc",                packages = [MNC_EGL_PKG, MNC_GLES2_PKG, MNC_GLES3_PKG, MNC_GLES31_PKG]),
+               Mustpass(project = CTS_PROJECT, version = "master",             packages = [MASTER_EGL_PKG, MASTER_GLES2_PKG, MASTER_GLES3_PKG, MASTER_GLES31_PKG])
        ]
 
+BUILD_CONFIG                           = getBuildConfig(DEFAULT_BUILD_DIR, DEFAULT_TARGET, "Debug")
+
 if __name__ == "__main__":
-       genMustpassLists(MUSTPASS_LISTS, ANY_GENERATOR, getBuildConfig(DEFAULT_BUILD_DIR, DEFAULT_TARGET, "Debug"))
+       genMustpassLists(MUSTPASS_LISTS, ANY_GENERATOR, BUILD_CONFIG)
diff --git a/scripts/mustpass.py b/scripts/mustpass.py
new file mode 100644 (file)
index 0000000..328e663
--- /dev/null
@@ -0,0 +1,456 @@
+# -*- coding: utf-8 -*-
+
+#-------------------------------------------------------------------------
+# drawElements Quality Program utilities
+# --------------------------------------
+#
+# Copyright 2016 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.
+#
+#-------------------------------------------------------------------------
+
+from build.common import *
+from build.config import ANY_GENERATOR
+from build.build import build
+from build_caselists import Module, getModuleByName, getBuildConfig, genCaseList, getCaseListPath, DEFAULT_BUILD_DIR, DEFAULT_TARGET
+from fnmatch import fnmatch
+from copy import copy
+
+import xml.etree.cElementTree as ElementTree
+import xml.dom.minidom as minidom
+
+APK_NAME               = "com.drawelements.deqp.apk"
+
+GENERATED_FILE_WARNING = """
+     This file has been automatically generated. Edit with caution.
+     """
+
+class Project:
+       def __init__ (self, path, copyright = None):
+               self.path               = path
+               self.copyright  = copyright
+
+class Configuration:
+       def __init__ (self, name, filters, glconfig = None, rotation = None, surfacetype = None):
+               self.name                       = name
+               self.glconfig           = glconfig
+               self.rotation           = rotation
+               self.surfacetype        = surfacetype
+               self.filters            = filters
+
+class Package:
+       def __init__ (self, module, configurations):
+               self.module                     = module
+               self.configurations     = configurations
+
+class Mustpass:
+       def __init__ (self, project, version, packages):
+               self.project    = project
+               self.version    = version
+               self.packages   = packages
+
+class Filter:
+       TYPE_INCLUDE = 0
+       TYPE_EXCLUDE = 1
+
+       def __init__ (self, type, filename):
+               self.type               = type
+               self.filename   = filename
+
+class TestRoot:
+       def __init__ (self):
+               self.children   = []
+
+class TestGroup:
+       def __init__ (self, name):
+               self.name               = name
+               self.children   = []
+
+class TestCase:
+       def __init__ (self, name):
+               self.name                       = name
+               self.configurations     = []
+
+class GLESVersion:
+       def __init__(self, major, minor):
+               self.major = major
+               self.minor = minor
+
+       def encode (self):
+               return (self.major << 16) | (self.minor)
+
+def getModuleGLESVersion (module):
+       versions = {
+               'dEQP-EGL':             GLESVersion(2,0),
+               'dEQP-GLES2':   GLESVersion(2,0),
+               'dEQP-GLES3':   GLESVersion(3,0),
+               'dEQP-GLES31':  GLESVersion(3,1)
+       }
+       return versions[module.name] if module.name in versions else None
+
+def getSrcDir (mustpass):
+       return os.path.join(mustpass.project.path, mustpass.version, "src")
+
+def getTmpDir (mustpass):
+       return os.path.join(mustpass.project.path, mustpass.version, "tmp")
+
+def getModuleShorthand (module):
+       assert module.name[:5] == "dEQP-"
+       return module.name[5:].lower()
+
+def getCaseListFileName (package, configuration):
+       return "%s-%s.txt" % (getModuleShorthand(package.module), configuration.name)
+
+def getDstCaseListPath (mustpass, package, configuration):
+       return os.path.join(mustpass.project.path, mustpass.version, getCaseListFileName(package, configuration))
+
+def getCTSPackageName (package):
+       return "com.drawelements.deqp." + getModuleShorthand(package.module)
+
+def getCommandLine (config):
+       cmdLine = ""
+
+       if config.glconfig != None:
+               cmdLine += "--deqp-gl-config-name=%s " % config.glconfig
+
+       if config.rotation != None:
+               cmdLine += "--deqp-screen-rotation=%s " % config.rotation
+
+       if config.surfacetype != None:
+               cmdLine += "--deqp-surface-type=%s " % config.surfacetype
+
+       cmdLine += "--deqp-watchdog=enable"
+
+       return cmdLine
+
+def readCaseList (filename):
+       cases = []
+       with open(filename, 'rb') as f:
+               for line in f:
+                       if line[:6] == "TEST: ":
+                               cases.append(line[6:].strip())
+       return cases
+
+def getCaseList (buildCfg, generator, module):
+       build(buildCfg, generator, [module.binName])
+       genCaseList(buildCfg, generator, module, "txt")
+       return readCaseList(getCaseListPath(buildCfg, module, "txt"))
+
+def readPatternList (filename):
+       ptrns = []
+       with open(filename, 'rb') as f:
+               for line in f:
+                       line = line.strip()
+                       if len(line) > 0 and line[0] != '#':
+                               ptrns.append(line)
+       return ptrns
+
+def applyPatterns (caseList, patterns, filename, op):
+       matched                 = set()
+       errors                  = []
+       curList                 = copy(caseList)
+       trivialPtrns    = [p for p in patterns if p.find('*') < 0]
+       regularPtrns    = [p for p in patterns if p.find('*') >= 0]
+
+       # Apply trivial (just case paths)
+       allCasesSet             = set(caseList)
+       for path in trivialPtrns:
+               if path in allCasesSet:
+                       if path in matched:
+                               errors.append((path, "Same case specified more than once"))
+                       matched.add(path)
+               else:
+                       errors.append((path, "Test case not found"))
+
+       curList = [c for c in curList if c not in matched]
+
+       for pattern in regularPtrns:
+               matchedThisPtrn = set()
+
+               for case in curList:
+                       if fnmatch(case, pattern):
+                               matchedThisPtrn.add(case)
+
+               if len(matchedThisPtrn) == 0:
+                       errors.append((pattern, "Pattern didn't match any cases"))
+
+               matched = matched | matchedThisPtrn
+               curList = [c for c in curList if c not in matched]
+
+       for pattern, reason in errors:
+               print "ERROR: %s: %s" % (reason, pattern)
+
+       if len(errors) > 0:
+               die("Found %s invalid patterns while processing file %s" % (len(errors), filename))
+
+       return [c for c in caseList if op(c in matched)]
+
+def applyInclude (caseList, patterns, filename):
+       return applyPatterns(caseList, patterns, filename, lambda b: b)
+
+def applyExclude (caseList, patterns, filename):
+       return applyPatterns(caseList, patterns, filename, lambda b: not b)
+
+def readPatternLists (mustpass):
+       lists = {}
+       for package in mustpass.packages:
+               for cfg in package.configurations:
+                       for filter in cfg.filters:
+                               if not filter.filename in lists:
+                                       lists[filter.filename] = readPatternList(os.path.join(getSrcDir(mustpass), filter.filename))
+       return lists
+
+def applyFilters (caseList, patternLists, filters):
+       res = copy(caseList)
+       for filter in filters:
+               ptrnList = patternLists[filter.filename]
+               if filter.type == Filter.TYPE_INCLUDE:
+                       res = applyInclude(res, ptrnList, filter.filename)
+               else:
+                       assert filter.type == Filter.TYPE_EXCLUDE
+                       res = applyExclude(res, ptrnList, filter.filename)
+       return res
+
+def appendToHierarchy (root, casePath):
+       def findChild (node, name):
+               for child in node.children:
+                       if child.name == name:
+                               return child
+               return None
+
+       curNode         = root
+       components      = casePath.split('.')
+
+       for component in components[:-1]:
+               nextNode = findChild(curNode, component)
+               if not nextNode:
+                       nextNode = TestGroup(component)
+                       curNode.children.append(nextNode)
+               curNode = nextNode
+
+       if not findChild(curNode, components[-1]):
+               curNode.children.append(TestCase(components[-1]))
+
+def buildTestHierachy (caseList):
+       root = TestRoot()
+       for case in caseList:
+               appendToHierarchy(root, case)
+       return root
+
+def buildTestCaseMap (root):
+       caseMap = {}
+
+       def recursiveBuild (curNode, prefix):
+               curPath = prefix + curNode.name
+               if isinstance(curNode, TestCase):
+                       caseMap[curPath] = curNode
+               else:
+                       for child in curNode.children:
+                               recursiveBuild(child, curPath + '.')
+
+       for child in root.children:
+               recursiveBuild(child, '')
+
+       return caseMap
+
+def include (filename):
+       return Filter(Filter.TYPE_INCLUDE, filename)
+
+def exclude (filename):
+       return Filter(Filter.TYPE_EXCLUDE, filename)
+
+def insertXMLHeaders (mustpass, doc):
+       if mustpass.project.copyright != None:
+               doc.insert(0, ElementTree.Comment(mustpass.project.copyright))
+       doc.insert(1, ElementTree.Comment(GENERATED_FILE_WARNING))
+
+def prettifyXML (doc):
+       uglyString      = ElementTree.tostring(doc, 'utf-8')
+       reparsed        = minidom.parseString(uglyString)
+       return reparsed.toprettyxml(indent='\t', encoding='utf-8')
+
+def genCTSPackageXML (mustpass, package, root):
+       def isLeafGroup (testGroup):
+               numGroups       = 0
+               numTests        = 0
+
+               for child in testGroup.children:
+                       if isinstance(child, TestCase):
+                               numTests += 1
+                       else:
+                               numGroups += 1
+
+               assert numGroups + numTests > 0
+
+               if numGroups > 0 and numTests > 0:
+                       die("Mixed groups and cases in %s" % testGroup.name)
+
+               return numGroups == 0
+
+       def makeConfiguration (parentElem, config):
+               attributes = {}
+
+               if config.glconfig != None:
+                       attributes['glconfig'] = config.glconfig
+
+               if config.rotation != None:
+                       attributes['rotation'] = config.rotation
+
+               if config.surfacetype != None:
+                       attributes['surfacetype'] = config.surfacetype
+
+               return ElementTree.SubElement(parentElem, "TestInstance", attributes)
+
+       def makeTestCase (parentElem, testCase):
+               caseElem = ElementTree.SubElement(parentElem, "Test", name=testCase.name)
+               for config in testCase.configurations:
+                       makeConfiguration(caseElem, config)
+               return caseElem
+
+       def makeTestGroup (parentElem, testGroup):
+               groupElem = ElementTree.SubElement(parentElem, "TestCase" if isLeafGroup(testGroup) else "TestSuite", name=testGroup.name)
+               for child in testGroup.children:
+                       if isinstance(child, TestCase):
+                               makeTestCase(groupElem, child)
+                       else:
+                               makeTestGroup(groupElem, child)
+               return groupElem
+
+       pkgElem = ElementTree.Element("TestPackage",
+                                                                 name                          = package.module.name,
+                                                                 appPackageName        = getCTSPackageName(package),
+                                                                 testType                      = "deqpTest")
+
+       pkgElem.set("xmlns:deqp", "http://drawelements.com/deqp")
+       insertXMLHeaders(mustpass, pkgElem)
+
+       glesVersion = getModuleGLESVersion(package.module)
+
+       if glesVersion != None:
+               pkgElem.set("deqp:glesVersion", str(glesVersion.encode()))
+
+       for child in root.children:
+               makeTestGroup(pkgElem, child)
+
+       return pkgElem
+
+def genSpecXML (mustpass):
+       mustpassElem = ElementTree.Element("Mustpass", version = mustpass.version)
+       insertXMLHeaders(mustpass, mustpassElem)
+
+       for package in mustpass.packages:
+               packageElem = ElementTree.SubElement(mustpassElem, "TestPackage", name = package.module.name)
+
+               for config in package.configurations:
+                       configElem = ElementTree.SubElement(packageElem, "Configuration",
+                                                                                               name                    = config.name,
+                                                                                               caseListFile    = getCaseListFileName(package, config),
+                                                                                               commandLine             = getCommandLine(config))
+
+       return mustpassElem
+
+def addOptionElement (parent, optionName, optionValue):
+       ElementTree.SubElement(parent, "option", name=optionName, value=optionValue)
+
+def genAndroidTestXml (mustpass):
+       INSTALLER_CLASS = "com.android.compatibility.common.tradefed.targetprep.ApkInstaller"
+       RUNNER_CLASS = "com.drawelements.deqp.runner.DeqpTestRunner"
+       configElement = ElementTree.Element("configuration")
+       preparerElement = ElementTree.SubElement(configElement, "target_preparer")
+       preparerElement.set("class", INSTALLER_CLASS)
+       addOptionElement(preparerElement, "cleanup-apks", "true")
+       addOptionElement(preparerElement, "test-file-name", APK_NAME)
+
+       for package in mustpass.packages:
+               for config in package.configurations:
+                       testElement = ElementTree.SubElement(configElement, "test")
+                       testElement.set("class", RUNNER_CLASS)
+                       addOptionElement(testElement, "deqp-package", package.module.name)
+                       addOptionElement(testElement, "deqp-caselist-file", getCaseListFileName(package,config))
+                       # \todo [2015-10-16 kalle]: Replace with just command line? - requires simplifications in the runner/tests as well.
+                       if config.glconfig != None:
+                               addOptionElement(testElement, "deqp-gl-config-name", config.glconfig)
+
+                       if config.surfacetype != None:
+                               addOptionElement(testElement, "deqp-surface-type", config.surfacetype)
+
+                       if config.rotation != None:
+                               addOptionElement(testElement, "deqp-screen-rotation", config.rotation)
+
+       insertXMLHeaders(mustpass, configElement)
+
+       return configElement
+
+def genMustpass (mustpass, moduleCaseLists):
+       print "Generating mustpass '%s'" % mustpass.version
+
+       patternLists = readPatternLists(mustpass)
+
+       for package in mustpass.packages:
+               allCasesInPkg           = moduleCaseLists[package.module]
+               matchingByConfig        = {}
+               allMatchingSet          = set()
+
+               for config in package.configurations:
+                       filtered        = applyFilters(allCasesInPkg, patternLists, config.filters)
+                       dstFile         = getDstCaseListPath(mustpass, package, config)
+
+                       print "  Writing deqp caselist: " + dstFile
+                       writeFile(dstFile, "\n".join(filtered) + "\n")
+
+                       matchingByConfig[config]        = filtered
+                       allMatchingSet                          = allMatchingSet | set(filtered)
+
+               allMatchingCases        = [c for c in allCasesInPkg if c in allMatchingSet] # To preserve ordering
+               root                            = buildTestHierachy(allMatchingCases)
+               testCaseMap                     = buildTestCaseMap(root)
+
+               for config in package.configurations:
+                       for case in matchingByConfig[config]:
+                               testCaseMap[case].configurations.append(config)
+
+               # NOTE: CTS v2 does not need package XML files. Remove when transition is complete.
+               packageXml      = genCTSPackageXML(mustpass, package, root)
+               xmlFilename     = os.path.join(mustpass.project.path, mustpass.version, getCTSPackageName(package) + ".xml")
+
+               print "  Writing CTS caselist: " + xmlFilename
+               writeFile(xmlFilename, prettifyXML(packageXml))
+
+       specXML                 = genSpecXML(mustpass)
+       specFilename    = os.path.join(mustpass.project.path, mustpass.version, "mustpass.xml")
+
+       print "  Writing spec: " + specFilename
+       writeFile(specFilename, prettifyXML(specXML))
+
+       # TODO: Which is the best selector mechanism?
+       if (mustpass.version == "mnc"):
+               androidTestXML          = genAndroidTestXml(mustpass)
+               androidTestFilename     = os.path.join(mustpass.project.path, "AndroidTest.xml")
+
+               print "  Writing AndroidTest.xml: " + androidTestFilename
+               writeFile(androidTestFilename, prettifyXML(androidTestXML))
+
+       print "Done!"
+
+def genMustpassLists (mustpassLists, generator, buildCfg):
+       moduleCaseLists = {}
+
+       # Getting case lists involves invoking build, so we want to cache the results
+       for mustpass in mustpassLists:
+               for package in mustpass.packages:
+                       if not package.module in moduleCaseLists:
+                               moduleCaseLists[package.module] = getCaseList(buildCfg, generator, package.module)
+
+       for mustpass in mustpassLists:
+               genMustpass(mustpass, moduleCaseLists)