blob: c636a507c665dc876995745b5356ccf281fa69de [file] [log] [blame]
/*
* Copyright 2020 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef VkTestHelper_DEFINED
#define VkTestHelper_DEFINED
#include "include/core/SkTypes.h"
#ifdef SK_VULKAN
#include "include/core/SkRefCnt.h"
#include "include/gpu/vk/VulkanBackendContext.h"
#include "include/gpu/vk/VulkanExtensions.h"
class GrDirectContext;
class SkSurface;
struct SkISize;
namespace skiatest {
enum class TestType : uint8_t;
}
#define DECLARE_VK_PROC(name) PFN_vk##name fVk##name
class VkTestHelper {
public:
static std::unique_ptr<VkTestHelper> Make(skiatest::TestType, bool isProtected);
virtual ~VkTestHelper();
virtual bool isValid() const = 0;
virtual sk_sp<SkSurface> createSurface(SkISize, bool textureable, bool isProtected) = 0;
virtual void submitAndWaitForCompletion(bool* completionMarker) = 0;
virtual GrDirectContext* directContext() { return nullptr; }
protected:
VkTestHelper(bool isProtected) : fIsProtected(isProtected) {}
bool setupBackendContext();
virtual bool init() = 0;
DECLARE_VK_PROC(DestroyInstance);
DECLARE_VK_PROC(DeviceWaitIdle);
DECLARE_VK_PROC(DestroyDevice);
DECLARE_VK_PROC(GetDeviceProcAddr);
DECLARE_VK_PROC(GetPhysicalDeviceFormatProperties);
DECLARE_VK_PROC(GetPhysicalDeviceMemoryProperties);
DECLARE_VK_PROC(CreateImage);
DECLARE_VK_PROC(DestroyImage);
DECLARE_VK_PROC(GetImageMemoryRequirements);
DECLARE_VK_PROC(AllocateMemory);
DECLARE_VK_PROC(FreeMemory);
DECLARE_VK_PROC(BindImageMemory);
DECLARE_VK_PROC(MapMemory);
DECLARE_VK_PROC(UnmapMemory);
DECLARE_VK_PROC(FlushMappedMemoryRanges);
DECLARE_VK_PROC(GetImageSubresourceLayout);
bool fIsProtected = false;
VkDevice fDevice = VK_NULL_HANDLE;
skgpu::VulkanExtensions fExtensions;
VkPhysicalDeviceFeatures2 fFeatures = {};
VkDebugReportCallbackEXT fDebugCallback = VK_NULL_HANDLE;
PFN_vkDestroyDebugReportCallbackEXT fDestroyDebugCallback = nullptr;
skgpu::VulkanBackendContext fBackendContext;
};
#undef DECLARE_VK_PROC
#endif // SK_VULKAN
#endif // VkTestHelper_DEFINED