| Index: tools/vulkan/VulkanTestContext.h
|
| diff --git a/tools/vulkan/VulkanTestContext.h b/tools/vulkan/VulkanTestContext.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c1535b99523f82c8d815053f7830adecb94a4501
|
| --- /dev/null
|
| +++ b/tools/vulkan/VulkanTestContext.h
|
| @@ -0,0 +1,92 @@
|
| +
|
| +/*
|
| + * Copyright 2016 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +#ifndef VulkanTestContext_DEFINED
|
| +#define VulkanTestContext_DEFINED
|
| +
|
| +#ifdef SK_VULKAN
|
| +
|
| +#include "GrTypes.h"
|
| +#include "vk/GrVkBackendContext.h"
|
| +
|
| +class SkSurface;
|
| +class GrContext;
|
| +
|
| +class VulkanTestContext {
|
| +public:
|
| + ~VulkanTestContext();
|
| +
|
| + // each platform will have to implement these in its CPP file
|
| + VkSurfaceKHR createVkSurface(void* platformData);
|
| + bool canPresent(uint32_t queueFamilyIndex);
|
| +
|
| + static VulkanTestContext* Create(void* platformData, int msaaSampleCount) {
|
| + VulkanTestContext* ctx = new VulkanTestContext(platformData, msaaSampleCount);
|
| + if (!ctx->isValid()) {
|
| + delete ctx;
|
| + return nullptr;
|
| + }
|
| + return ctx;
|
| + }
|
| +
|
| + SkSurface* getBackbufferSurface();
|
| + void swapBuffers();
|
| +
|
| + bool makeCurrent() { return true; }
|
| + int getStencilBits() { return 0; }
|
| + int getSampleCount() { return 0; }
|
| +
|
| + bool isValid() { return SkToBool(fBackendContext.get()); }
|
| +
|
| + void resize() {
|
| + this->createSwapchain(0, 0);
|
| + }
|
| +
|
| + GrBackendContext getBackendContext() { return (GrBackendContext)fBackendContext.get(); }
|
| +
|
| +private:
|
| + VulkanTestContext();
|
| + VulkanTestContext(void*, int msaaSampleCount);
|
| + void initializeContext(void*);
|
| + void destroyContext();
|
| +
|
| + struct BackbufferInfo {
|
| + uint32_t fImageIndex; // image this is associated with
|
| + VkSemaphore fAcquireSemaphore; // we signal on this for acquisition of image
|
| + VkSemaphore fRenderSemaphore; // we wait on this for rendering to be done
|
| + VkCommandBuffer fTransitionCmdBuffers[2]; // to transition layout between present and render
|
| + VkFence fUsageFences[2]; // used to ensure this data is no longer used on GPU
|
| + };
|
| +
|
| + BackbufferInfo* getAvailableBackbuffer();
|
| + bool createSwapchain(uint32_t width, uint32_t height);
|
| + void createBuffers();
|
| + void destroyBuffers();
|
| +
|
| + SkAutoTUnref<const GrVkBackendContext> fBackendContext;
|
| +
|
| + GrContext* fContext;
|
| + VkSurfaceKHR fSurface;
|
| + VkSwapchainKHR fSwapchain;
|
| + uint32_t fPresentQueueIndex;
|
| + VkQueue fPresentQueue;
|
| + int fWidth;
|
| + int fHeight;
|
| + GrPixelConfig fPixelConfig;
|
| +
|
| + uint32_t fImageCount;
|
| + VkImage* fImages; // images in the swapchain
|
| + VkImageLayout* fImageLayouts; // layouts of these images when not color attachment
|
| + sk_sp<SkSurface>* fSurfaces; // wrapped surface for those images
|
| + VkCommandPool fCommandPool;
|
| + BackbufferInfo* fBackbuffers;
|
| + uint32_t fCurrentBackbufferIndex;
|
| +};
|
| +
|
| +#endif // SK_VULKAN
|
| +
|
| +#endif
|
|
|