blob: dd4319b904110868e900643bbe5d8add3f1aeccd [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
Greg Daniel54bfb182018-11-20 17:12:36 -050011#include "GrVkVulkan.h"
12
Greg Daniel164a9f02016-02-22 09:56:40 -050013#include "GrColor.h"
14#include "GrTypes.h"
Greg Danield3e65aa2018-08-01 09:19:45 -040015#include "GrVkInterface.h"
Hal Canary22be4c42018-06-12 12:37:31 -040016#include "SkMacros.h"
17#include "ir/SkSLProgram.h"
Greg Daniel164a9f02016-02-22 09:56:40 -050018
egdaniel88987d82016-09-19 10:17:34 -070019class GrVkGpu;
Greg Daniel164a9f02016-02-22 09:56:40 -050020
Greg Daniel164a9f02016-02-22 09:56:40 -050021// makes a Vk call on the interface
Brian Salomon23356442018-11-30 15:33:19 -050022#define GR_VK_CALL(IFACE, X) (IFACE)->fFunctions.f##X
Greg Daniel164a9f02016-02-22 09:56:40 -050023// same as GR_VK_CALL but checks for success
24#ifdef SK_DEBUG
Brian Salomon23356442018-11-30 15:33:19 -050025#define GR_VK_CALL_ERRCHECK(IFACE, X) \
Greg Daniel164a9f02016-02-22 09:56:40 -050026 VkResult SK_MACRO_APPEND_LINE(ret) = GR_VK_CALL(IFACE, X); \
Brian Salomon23356442018-11-30 15:33:19 -050027 SkASSERT(VK_SUCCESS == SK_MACRO_APPEND_LINE(ret))
Greg Daniel164a9f02016-02-22 09:56:40 -050028#else
Brian Salomon23356442018-11-30 15:33:19 -050029#define GR_VK_CALL_ERRCHECK(IFACE, X) (void) GR_VK_CALL(IFACE, X)
Greg Daniel164a9f02016-02-22 09:56:40 -050030#endif
31
32/**
33 * Returns the vulkan texture format for the given GrPixelConfig
34 */
35bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format);
36
Greg Daniel81b80592017-12-13 10:20:04 -050037bool GrVkFormatIsSupported(VkFormat);
38
Greg Daniel7e000222018-12-03 10:08:21 -050039#ifdef SK_DEBUG
Greg Daniel81b80592017-12-13 10:20:04 -050040/**
41 * Returns true if the passed in VkFormat and GrPixelConfig are compatible with each other.
42 */
43bool GrVkFormatPixelConfigPairIsValid(VkFormat, GrPixelConfig);
Greg Daniel7e000222018-12-03 10:08:21 -050044#endif
Greg Daniel81b80592017-12-13 10:20:04 -050045
Greg Daniel164a9f02016-02-22 09:56:40 -050046bool GrSampleCountToVkSampleCount(uint32_t samples, VkSampleCountFlagBits* vkSamples);
47
egdaniel88987d82016-09-19 10:17:34 -070048bool GrCompileVkShaderModule(const GrVkGpu* gpu,
49 const char* shaderString,
50 VkShaderStageFlagBits stage,
51 VkShaderModule* shaderModule,
Ethan Nicholas941e7e22016-12-12 15:33:30 -050052 VkPipelineShaderStageCreateInfo* stageInfo,
53 const SkSL::Program::Settings& settings,
Ethan Nicholas92e01cf2018-12-19 13:12:10 -050054 SkSL::String* outSPIRV,
Ethan Nicholas941e7e22016-12-12 15:33:30 -050055 SkSL::Program::Inputs* outInputs);
egdaniel88987d82016-09-19 10:17:34 -070056
Ethan Nicholas92e01cf2018-12-19 13:12:10 -050057bool GrInstallVkShaderModule(const GrVkGpu* gpu,
58 const SkSL::String& spirv,
59 VkShaderStageFlagBits stage,
60 VkShaderModule* shaderModule,
61 VkPipelineShaderStageCreateInfo* stageInfo);
62
Greg Daniel164a9f02016-02-22 09:56:40 -050063#endif