blob: 435d17ccbe1a1ab7f31d033578b7082c338e3e4d [file] [log] [blame]
#ifndef _VKTPROTECTEDMEMCONTEXT_HPP
#define _VKTPROTECTEDMEMCONTEXT_HPP
/*------------------------------------------------------------------------
* Vulkan Conformance Tests
* ------------------------
*
* Copyright (c) 2017 The Khronos Group Inc.
* Copyright (c) 2017 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief Protected Memory image validator helper
*//*--------------------------------------------------------------------*/
#include "tcuVector.hpp"
#include "vkDefs.hpp"
#include "vktTestCase.hpp"
#include "vktCustomInstancesDevices.hpp"
#include "vktProtectedMemUtils.hpp"
#include "tcuCommandLine.hpp"
#include "vkMemUtil.hpp"
#include "vkWsiUtil.hpp"
namespace vkt
{
namespace ProtectedMem
{
class ProtectedContext
{
public:
ProtectedContext (Context& ctx,
const std::vector<std::string> instanceExtensions = std::vector<std::string>(),
const std::vector<std::string> deviceExtensions = std::vector<std::string>());
ProtectedContext (Context& ctx,
vk::wsi::Type wsiType,
vk::wsi::Display& display,
vk::wsi::Window& window,
const std::vector<std::string> instanceExtensions = std::vector<std::string>(),
const std::vector<std::string> deviceExtensions = std::vector<std::string>());
const vk::DeviceInterface& getDeviceInterface (void) const { return m_deviceDriver; }
vk::VkDevice getDevice (void) const { return *m_device; }
const vk::DeviceDriver& getDeviceDriver (void) const { return m_deviceDriver; }
vk::VkPhysicalDevice getPhysicalDevice (void) const { return m_phyDevice; }
vk::VkQueue getQueue (void) const { return m_queue; }
deUint32 getQueueFamilyIndex (void) const { return m_queueFamilyIndex; }
tcu::TestContext& getTestContext (void) const { return m_context.getTestContext(); }
vk::BinaryCollection& getBinaryCollection (void) const { return m_context.getBinaryCollection(); }
vk::Allocator& getDefaultAllocator (void) const { return *m_allocator; }
const vk::InstanceDriver& getInstanceDriver (void) const { return m_vki; }
vk::VkInstance getInstance (void) const { return m_instance; }
const vk::VkSurfaceKHR getSurface (void) const { return *m_surface; }
private:
vk::Allocator* createAllocator (void)
{
const vk::VkPhysicalDeviceMemoryProperties memoryProperties =
vk::getPhysicalDeviceMemoryProperties(m_vki, m_phyDevice);
// \todo [2015-07-24 jarkko] support allocator selection/configuration from command line (or compile time)
return new vk::SimpleAllocator(getDeviceInterface(), getDevice(), memoryProperties);
}
Context& m_context;
const vk::PlatformInterface& m_interface;
CustomInstance m_instance;
const vk::InstanceDriver& m_vki;
vk::VkPhysicalDevice m_phyDevice;
const vk::Move<vk::VkSurfaceKHR> m_surface;
deUint32 m_queueFamilyIndex;
vk::Move<vk::VkDevice> m_device;
const de::UniquePtr<vk::Allocator> m_allocator;
vk::DeviceDriver m_deviceDriver;
vk::VkQueue m_queue;
};
class ProtectedTestInstance : public TestInstance
{
public:
ProtectedTestInstance (Context& ctx)
: TestInstance (ctx)
, m_protectedContext (ctx)
{}
protected:
ProtectedContext m_protectedContext;
};
} // ProtectedMem
} // vkt
#endif // _VKTPROTECTEDMEMCONTEXT_HPP