blob: b27954675a0e548f298acebf59ad8a600cf62385 [file] [log] [blame]
Greg Daniel164a9f02016-02-22 09:56:40 -05001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrVkUtil_DEFINED
9#define GrVkUtil_DEFINED
10
11#include "GrColor.h"
12#include "GrTypes.h"
Greg Danield3e65aa2018-08-01 09:19:45 -040013#include "GrVkInterface.h"
Hal Canary22be4c42018-06-12 12:37:31 -040014#include "SkMacros.h"
15#include "ir/SkSLProgram.h"
Greg Daniel487132b2018-12-20 14:09:36 -050016#include "vk/GrVkTypes.h"
Greg Daniel164a9f02016-02-22 09:56:40 -050017
egdaniel88987d82016-09-19 10:17:34 -070018class GrVkGpu;
Greg Daniel164a9f02016-02-22 09:56:40 -050019
Greg Daniel164a9f02016-02-22 09:56:40 -050020// makes a Vk call on the interface
Brian Salomon23356442018-11-30 15:33:19 -050021#define GR_VK_CALL(IFACE, X) (IFACE)->fFunctions.f##X
Greg Daniel164a9f02016-02-22 09:56:40 -050022// same as GR_VK_CALL but checks for success
23#ifdef SK_DEBUG
Brian Salomon23356442018-11-30 15:33:19 -050024#define GR_VK_CALL_ERRCHECK(IFACE, X) \
Greg Daniel164a9f02016-02-22 09:56:40 -050025 VkResult SK_MACRO_APPEND_LINE(ret) = GR_VK_CALL(IFACE, X); \
Brian Salomon23356442018-11-30 15:33:19 -050026 SkASSERT(VK_SUCCESS == SK_MACRO_APPEND_LINE(ret))
Greg Daniel164a9f02016-02-22 09:56:40 -050027#else
Brian Salomon23356442018-11-30 15:33:19 -050028#define GR_VK_CALL_ERRCHECK(IFACE, X) (void) GR_VK_CALL(IFACE, X)
Greg Daniel164a9f02016-02-22 09:56:40 -050029#endif
30
31/**
32 * Returns the vulkan texture format for the given GrPixelConfig
33 */
34bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format);
35
Greg Daniel81b80592017-12-13 10:20:04 -050036bool GrVkFormatIsSupported(VkFormat);
37
Greg Daniel7e000222018-12-03 10:08:21 -050038#ifdef SK_DEBUG
Greg Daniel81b80592017-12-13 10:20:04 -050039/**
40 * Returns true if the passed in VkFormat and GrPixelConfig are compatible with each other.
41 */
42bool GrVkFormatPixelConfigPairIsValid(VkFormat, GrPixelConfig);
Greg Daniel7e000222018-12-03 10:08:21 -050043#endif
Greg Daniel81b80592017-12-13 10:20:04 -050044
Greg Daniel164a9f02016-02-22 09:56:40 -050045bool GrSampleCountToVkSampleCount(uint32_t samples, VkSampleCountFlagBits* vkSamples);
46
egdaniel88987d82016-09-19 10:17:34 -070047bool GrCompileVkShaderModule(const GrVkGpu* gpu,
48 const char* shaderString,
49 VkShaderStageFlagBits stage,
50 VkShaderModule* shaderModule,
Ethan Nicholas941e7e22016-12-12 15:33:30 -050051 VkPipelineShaderStageCreateInfo* stageInfo,
52 const SkSL::Program::Settings& settings,
Ethan Nicholas92e01cf2018-12-19 13:12:10 -050053 SkSL::String* outSPIRV,
Ethan Nicholas941e7e22016-12-12 15:33:30 -050054 SkSL::Program::Inputs* outInputs);
egdaniel88987d82016-09-19 10:17:34 -070055
Ethan Nicholas92e01cf2018-12-19 13:12:10 -050056bool GrInstallVkShaderModule(const GrVkGpu* gpu,
57 const SkSL::String& spirv,
58 VkShaderStageFlagBits stage,
59 VkShaderModule* shaderModule,
60 VkPipelineShaderStageCreateInfo* stageInfo);
61
Greg Daniel164a9f02016-02-22 09:56:40 -050062#endif