Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Functions
GrVkPipeline.cpp File Reference
#include "src/gpu/ganesh/vk/GrVkPipeline.h"
#include "src/core/SkTraceEvent.h"
#include "src/gpu/ganesh/GrGeometryProcessor.h"
#include "src/gpu/ganesh/GrPipeline.h"
#include "src/gpu/ganesh/GrStencilSettings.h"
#include "src/gpu/ganesh/vk/GrVkCommandBuffer.h"
#include "src/gpu/ganesh/vk/GrVkGpu.h"
#include "src/gpu/ganesh/vk/GrVkRenderTarget.h"
#include "src/gpu/ganesh/vk/GrVkUtil.h"
#include "src/gpu/vk/VulkanUtilsPriv.h"

Go to the source code of this file.

Functions

static VkFormat attrib_type_to_vkformat (GrVertexAttribType type)
 
static void setup_vertex_input_state (const GrGeometryProcessor::AttributeSet &vertexAttribs, const GrGeometryProcessor::AttributeSet &instanceAttribs, VkPipelineVertexInputStateCreateInfo *vertexInputInfo, STArray< 2, VkVertexInputBindingDescription, true > *bindingDescs, VkVertexInputAttributeDescription *attributeDesc)
 
static VkPrimitiveTopology gr_primitive_type_to_vk_topology (GrPrimitiveType primitiveType)
 
static void setup_input_assembly_state (GrPrimitiveType primitiveType, VkPipelineInputAssemblyStateCreateInfo *inputAssemblyInfo)
 
static VkStencilOp stencil_op_to_vk_stencil_op (GrStencilOp op)
 
static VkCompareOp stencil_func_to_vk_compare_op (GrStencilTest test)
 
static void setup_stencil_op_state (VkStencilOpState *opState, const GrStencilSettings::Face &stencilFace)
 
static void setup_depth_stencil_state (const GrStencilSettings &stencilSettings, GrSurfaceOrigin origin, VkPipelineDepthStencilStateCreateInfo *stencilInfo)
 
static void setup_viewport_scissor_state (VkPipelineViewportStateCreateInfo *viewportInfo)
 
static void setup_multisample_state (int numSamples, const GrCaps *caps, VkPipelineMultisampleStateCreateInfo *multisampleInfo)
 
static VkBlendFactor blend_coeff_to_vk_blend (skgpu::BlendCoeff coeff)
 
static VkBlendOp blend_equation_to_vk_blend_op (skgpu::BlendEquation equation)
 
static void setup_color_blend_state (const skgpu::BlendInfo &blendInfo, VkPipelineColorBlendStateCreateInfo *colorBlendInfo, VkPipelineColorBlendAttachmentState *attachmentState)
 
static void setup_raster_state (bool isWireframe, const GrCaps *caps, VkPipelineRasterizationStateCreateInfo *rasterInfo)
 
static void setup_conservative_raster_info (VkPipelineRasterizationConservativeStateCreateInfoEXT *conservativeRasterInfo)
 
static void setup_dynamic_state (VkPipelineDynamicStateCreateInfo *dynamicInfo, VkDynamicState *dynamicStates)
 

Function Documentation

◆ attrib_type_to_vkformat()

static VkFormat attrib_type_to_vkformat ( GrVertexAttribType  type)
inlinestatic

Definition at line 26 of file GrVkPipeline.cpp.

26 {
27 switch (type) {
49 return VK_FORMAT_R8_SINT;
55 return VK_FORMAT_R8_UINT;
61 return VK_FORMAT_R8_UNORM;
73 return VK_FORMAT_R32_SINT;
75 return VK_FORMAT_R32_UINT;
80 }
81 SK_ABORT("Unknown vertex attrib type");
82}
@ kUShort_norm_GrVertexAttribType
@ kFloat2_GrVertexAttribType
@ kUShort2_GrVertexAttribType
@ kUInt_GrVertexAttribType
@ kUByte4_norm_GrVertexAttribType
@ kUByte_GrVertexAttribType
@ kShort2_GrVertexAttribType
@ kUShort4_norm_GrVertexAttribType
@ kInt_GrVertexAttribType
@ kByte_GrVertexAttribType
@ kByte4_GrVertexAttribType
@ kFloat3_GrVertexAttribType
@ kFloat_GrVertexAttribType
@ kByte2_GrVertexAttribType
@ kFloat4_GrVertexAttribType
@ kShort4_GrVertexAttribType
@ kUShort2_norm_GrVertexAttribType
@ kInt3_GrVertexAttribType
@ kHalf2_GrVertexAttribType
@ kHalf4_GrVertexAttribType
@ kUByte4_GrVertexAttribType
@ kUByte2_GrVertexAttribType
@ kInt4_GrVertexAttribType
@ kUByte_norm_GrVertexAttribType
@ kInt2_GrVertexAttribType
@ kHalf_GrVertexAttribType
#define SK_ABORT(message,...)
Definition SkAssert.h:70
@ VK_FORMAT_R16G16B16A16_UNORM
@ VK_FORMAT_R16G16_SFLOAT
@ VK_FORMAT_R32G32_SFLOAT
@ VK_FORMAT_R16_SFLOAT
@ VK_FORMAT_R32_SINT
@ VK_FORMAT_R16G16_UINT
@ VK_FORMAT_R8_UNORM
@ VK_FORMAT_R32G32B32A32_SFLOAT
@ VK_FORMAT_R32_SFLOAT
@ VK_FORMAT_R16G16B16A16_SINT
@ VK_FORMAT_R8G8B8A8_UNORM
@ VK_FORMAT_R16G16_SINT
@ VK_FORMAT_R8G8_SINT
@ VK_FORMAT_R32G32B32_SINT
@ VK_FORMAT_R16_UNORM
@ VK_FORMAT_R8_SINT
@ VK_FORMAT_R8_UINT
@ VK_FORMAT_R16G16B16A16_SFLOAT
@ VK_FORMAT_R16G16_UNORM
@ VK_FORMAT_R8G8B8A8_SINT
@ VK_FORMAT_R32G32B32A32_SINT
@ VK_FORMAT_R32G32B32_SFLOAT
@ VK_FORMAT_R8G8B8A8_UINT
@ VK_FORMAT_R8G8_UINT
@ VK_FORMAT_R32G32_SINT
@ VK_FORMAT_R32_UINT

◆ blend_coeff_to_vk_blend()

static VkBlendFactor blend_coeff_to_vk_blend ( skgpu::BlendCoeff  coeff)
static

Definition at line 292 of file GrVkPipeline.cpp.

292 {
293 switch (coeff) {
297 return VK_BLEND_FACTOR_ONE;
328 }
330}
#define SkUNREACHABLE
Definition SkAssert.h:135
@ VK_BLEND_FACTOR_ONE
@ VK_BLEND_FACTOR_SRC1_ALPHA
@ VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA
@ VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR
@ VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR
@ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
@ VK_BLEND_FACTOR_SRC_COLOR
@ VK_BLEND_FACTOR_CONSTANT_COLOR
@ VK_BLEND_FACTOR_SRC_ALPHA
@ VK_BLEND_FACTOR_DST_ALPHA
@ VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
@ VK_BLEND_FACTOR_ZERO
@ VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
@ VK_BLEND_FACTOR_DST_COLOR
@ VK_BLEND_FACTOR_SRC1_COLOR
@ VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR

◆ blend_equation_to_vk_blend_op()

static VkBlendOp blend_equation_to_vk_blend_op ( skgpu::BlendEquation  equation)
static

Definition at line 332 of file GrVkPipeline.cpp.

332 {
333 static const VkBlendOp gTable[] = {
334 // Basic blend ops
338
339 // Advanced blend ops
355
356 // Illegal.
358 };
359 static_assert(0 == (int)skgpu::BlendEquation::kAdd);
360 static_assert(1 == (int)skgpu::BlendEquation::kSubtract);
361 static_assert(2 == (int)skgpu::BlendEquation::kReverseSubtract);
362 static_assert(3 == (int)skgpu::BlendEquation::kScreen);
363 static_assert(4 == (int)skgpu::BlendEquation::kOverlay);
364 static_assert(5 == (int)skgpu::BlendEquation::kDarken);
365 static_assert(6 == (int)skgpu::BlendEquation::kLighten);
366 static_assert(7 == (int)skgpu::BlendEquation::kColorDodge);
367 static_assert(8 == (int)skgpu::BlendEquation::kColorBurn);
368 static_assert(9 == (int)skgpu::BlendEquation::kHardLight);
369 static_assert(10 == (int)skgpu::BlendEquation::kSoftLight);
370 static_assert(11 == (int)skgpu::BlendEquation::kDifference);
371 static_assert(12 == (int)skgpu::BlendEquation::kExclusion);
372 static_assert(13 == (int)skgpu::BlendEquation::kMultiply);
373 static_assert(14 == (int)skgpu::BlendEquation::kHSLHue);
374 static_assert(15 == (int)skgpu::BlendEquation::kHSLSaturation);
375 static_assert(16 == (int)skgpu::BlendEquation::kHSLColor);
376 static_assert(17 == (int)skgpu::BlendEquation::kHSLLuminosity);
377 static_assert(std::size(gTable) == skgpu::kBlendEquationCnt);
378
379 SkASSERT((unsigned)equation < skgpu::kBlendEquationCnt);
380 return gTable[(int)equation];
381}
#define SkASSERT(cond)
Definition SkAssert.h:116
Type::kYUV Type::kRGBA() int(0.7 *637)
static const int kBlendEquationCnt
Definition Blend.h:55
VkBlendOp
@ VK_BLEND_OP_MULTIPLY_EXT
@ VK_BLEND_OP_ADD
@ VK_BLEND_OP_HARDLIGHT_EXT
@ VK_BLEND_OP_OVERLAY_EXT
@ VK_BLEND_OP_COLORDODGE_EXT
@ VK_BLEND_OP_SUBTRACT
@ VK_BLEND_OP_HSL_COLOR_EXT
@ VK_BLEND_OP_DARKEN_EXT
@ VK_BLEND_OP_SOFTLIGHT_EXT
@ VK_BLEND_OP_LIGHTEN_EXT
@ VK_BLEND_OP_HSL_HUE_EXT
@ VK_BLEND_OP_HSL_SATURATION_EXT
@ VK_BLEND_OP_SCREEN_EXT
@ VK_BLEND_OP_HSL_LUMINOSITY_EXT
@ VK_BLEND_OP_EXCLUSION_EXT
@ VK_BLEND_OP_COLORBURN_EXT
@ VK_BLEND_OP_DIFFERENCE_EXT
@ VK_BLEND_OP_REVERSE_SUBTRACT

◆ gr_primitive_type_to_vk_topology()

static VkPrimitiveTopology gr_primitive_type_to_vk_topology ( GrPrimitiveType  primitiveType)
static

Definition at line 147 of file GrVkPipeline.cpp.

147 {
148 switch (primitiveType) {
159 }
161}
@ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
@ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
@ VK_PRIMITIVE_TOPOLOGY_POINT_LIST
@ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP
@ VK_PRIMITIVE_TOPOLOGY_LINE_LIST

◆ setup_color_blend_state()

static void setup_color_blend_state ( const skgpu::BlendInfo blendInfo,
VkPipelineColorBlendStateCreateInfo colorBlendInfo,
VkPipelineColorBlendAttachmentState attachmentState 
)
static

Definition at line 383 of file GrVkPipeline.cpp.

385 {
386 skgpu::BlendEquation equation = blendInfo.fEquation;
387 skgpu::BlendCoeff srcCoeff = blendInfo.fSrcBlend;
388 skgpu::BlendCoeff dstCoeff = blendInfo.fDstBlend;
389 bool blendOff = skgpu::BlendShouldDisable(equation, srcCoeff, dstCoeff);
390
391 memset(attachmentState, 0, sizeof(VkPipelineColorBlendAttachmentState));
392 attachmentState->blendEnable = !blendOff;
393 if (!blendOff) {
394 attachmentState->srcColorBlendFactor = blend_coeff_to_vk_blend(srcCoeff);
395 attachmentState->dstColorBlendFactor = blend_coeff_to_vk_blend(dstCoeff);
396 attachmentState->colorBlendOp = blend_equation_to_vk_blend_op(equation);
397 attachmentState->srcAlphaBlendFactor = blend_coeff_to_vk_blend(srcCoeff);
398 attachmentState->dstAlphaBlendFactor = blend_coeff_to_vk_blend(dstCoeff);
399 attachmentState->alphaBlendOp = blend_equation_to_vk_blend_op(equation);
400 }
401
402 if (!blendInfo.fWritesColor) {
403 attachmentState->colorWriteMask = 0;
404 } else {
407 }
408
409 memset(colorBlendInfo, 0, sizeof(VkPipelineColorBlendStateCreateInfo));
411 colorBlendInfo->pNext = nullptr;
412 colorBlendInfo->flags = 0;
413 colorBlendInfo->logicOpEnable = VK_FALSE;
414 colorBlendInfo->attachmentCount = 1;
415 colorBlendInfo->pAttachments = attachmentState;
416 // colorBlendInfo->blendConstants is set dynamically
417}
static VkBlendFactor blend_coeff_to_vk_blend(skgpu::BlendCoeff coeff)
static VkBlendOp blend_equation_to_vk_blend_op(skgpu::BlendEquation equation)
static constexpr bool BlendShouldDisable(BlendEquation equation, BlendCoeff srcCoeff, BlendCoeff dstCoeff)
Definition Blend.h:145
BlendEquation
Definition Blend.h:26
BlendCoeff
Definition Blend.h:60
VkColorComponentFlags colorWriteMask
VkPipelineColorBlendStateCreateFlags flags
const VkPipelineColorBlendAttachmentState * pAttachments
skgpu::BlendCoeff fDstBlend
Definition Blend.h:96
bool fWritesColor
Definition Blend.h:98
skgpu::BlendCoeff fSrcBlend
Definition Blend.h:95
#define VK_FALSE
@ VK_COLOR_COMPONENT_R_BIT
@ VK_COLOR_COMPONENT_A_BIT
@ VK_COLOR_COMPONENT_B_BIT
@ VK_COLOR_COMPONENT_G_BIT
@ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO

◆ setup_conservative_raster_info()

static void setup_conservative_raster_info ( VkPipelineRasterizationConservativeStateCreateInfoEXT conservativeRasterInfo)
static

Definition at line 439 of file GrVkPipeline.cpp.

440 {
441 memset(conservativeRasterInfo, 0,
443 conservativeRasterInfo->sType =
445 conservativeRasterInfo->pNext = nullptr;
446 conservativeRasterInfo->flags = 0;
447 conservativeRasterInfo->conservativeRasterizationMode =
449 conservativeRasterInfo->extraPrimitiveOverestimationSize = 0;
450}
VkConservativeRasterizationModeEXT conservativeRasterizationMode
VkPipelineRasterizationConservativeStateCreateFlagsEXT flags
@ VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
@ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT

◆ setup_depth_stencil_state()

static void setup_depth_stencil_state ( const GrStencilSettings stencilSettings,
GrSurfaceOrigin  origin,
VkPipelineDepthStencilStateCreateInfo stencilInfo 
)
static

Definition at line 233 of file GrVkPipeline.cpp.

236 {
237
238 memset(stencilInfo, 0, sizeof(VkPipelineDepthStencilStateCreateInfo));
240 stencilInfo->pNext = nullptr;
241 stencilInfo->flags = 0;
242 // set depth testing defaults
243 stencilInfo->depthTestEnable = VK_FALSE;
244 stencilInfo->depthWriteEnable = VK_FALSE;
246 stencilInfo->depthBoundsTestEnable = VK_FALSE;
247 stencilInfo->stencilTestEnable = !stencilSettings.isDisabled();
248 if (!stencilSettings.isDisabled()) {
249 if (!stencilSettings.isTwoSided()) {
250 setup_stencil_op_state(&stencilInfo->front, stencilSettings.singleSidedFace());
251 stencilInfo->back = stencilInfo->front;
252 } else {
253 setup_stencil_op_state(&stencilInfo->front, stencilSettings.postOriginCCWFace(origin));
254 setup_stencil_op_state(&stencilInfo->back, stencilSettings.postOriginCWFace(origin));
255 }
256 }
257 stencilInfo->minDepthBounds = 0.0f;
258 stencilInfo->maxDepthBounds = 1.0f;
259}
static void setup_stencil_op_state(VkStencilOpState *opState, const GrStencilSettings::Face &stencilFace)
bool isTwoSided() const
const Face & postOriginCCWFace(GrSurfaceOrigin origin) const
bool isDisabled() const
const Face & singleSidedFace() const
const Face & postOriginCWFace(GrSurfaceOrigin origin) const
VkPipelineDepthStencilStateCreateFlags flags
@ VK_COMPARE_OP_ALWAYS
@ VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO

◆ setup_dynamic_state()

static void setup_dynamic_state ( VkPipelineDynamicStateCreateInfo dynamicInfo,
VkDynamicState dynamicStates 
)
static

Definition at line 452 of file GrVkPipeline.cpp.

453 {
454 memset(dynamicInfo, 0, sizeof(VkPipelineDynamicStateCreateInfo));
456 dynamicInfo->pNext = VK_NULL_HANDLE;
457 dynamicInfo->flags = 0;
458 dynamicStates[0] = VK_DYNAMIC_STATE_VIEWPORT;
459 dynamicStates[1] = VK_DYNAMIC_STATE_SCISSOR;
460 dynamicStates[2] = VK_DYNAMIC_STATE_BLEND_CONSTANTS;
461 dynamicInfo->dynamicStateCount = 3;
462 dynamicInfo->pDynamicStates = dynamicStates;
463}
VkPipelineDynamicStateCreateFlags flags
const VkDynamicState * pDynamicStates
@ VK_DYNAMIC_STATE_BLEND_CONSTANTS
@ VK_DYNAMIC_STATE_VIEWPORT
@ VK_DYNAMIC_STATE_SCISSOR
#define VK_NULL_HANDLE
Definition vulkan_core.h:46
@ VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO

◆ setup_input_assembly_state()

static void setup_input_assembly_state ( GrPrimitiveType  primitiveType,
VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo 
)
static

Definition at line 163 of file GrVkPipeline.cpp.

164 {
165 memset(inputAssemblyInfo, 0, sizeof(VkPipelineInputAssemblyStateCreateInfo));
167 inputAssemblyInfo->pNext = nullptr;
168 inputAssemblyInfo->flags = 0;
169 inputAssemblyInfo->primitiveRestartEnable = false;
170 inputAssemblyInfo->topology = gr_primitive_type_to_vk_topology(primitiveType);
171}
static VkPrimitiveTopology gr_primitive_type_to_vk_topology(GrPrimitiveType primitiveType)
VkPipelineInputAssemblyStateCreateFlags flags
@ VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO

◆ setup_multisample_state()

static void setup_multisample_state ( int  numSamples,
const GrCaps caps,
VkPipelineMultisampleStateCreateInfo multisampleInfo 
)
static

Definition at line 276 of file GrVkPipeline.cpp.

278 {
279 memset(multisampleInfo, 0, sizeof(VkPipelineMultisampleStateCreateInfo));
281 multisampleInfo->pNext = nullptr;
282 multisampleInfo->flags = 0;
284 &multisampleInfo->rasterizationSamples));
285 multisampleInfo->sampleShadingEnable = VK_FALSE;
286 multisampleInfo->minSampleShading = 0.0f;
287 multisampleInfo->pSampleMask = nullptr;
288 multisampleInfo->alphaToCoverageEnable = VK_FALSE;
289 multisampleInfo->alphaToOneEnable = VK_FALSE;
290}
#define SkAssertResult(cond)
Definition SkAssert.h:123
static constexpr bool SampleCountToVkSampleCount(uint32_t samples, VkSampleCountFlagBits *vkSamples)
VkPipelineMultisampleStateCreateFlags flags
VkSampleCountFlagBits rasterizationSamples
@ VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO

◆ setup_raster_state()

static void setup_raster_state ( bool  isWireframe,
const GrCaps caps,
VkPipelineRasterizationStateCreateInfo rasterInfo 
)
static

Definition at line 419 of file GrVkPipeline.cpp.

421 {
422 memset(rasterInfo, 0, sizeof(VkPipelineRasterizationStateCreateInfo));
424 rasterInfo->pNext = nullptr;
425 rasterInfo->flags = 0;
426 rasterInfo->depthClampEnable = VK_FALSE;
427 rasterInfo->rasterizerDiscardEnable = VK_FALSE;
428 rasterInfo->polygonMode = (caps->wireframeMode() || isWireframe) ?
430 rasterInfo->cullMode = VK_CULL_MODE_NONE;
432 rasterInfo->depthBiasEnable = VK_FALSE;
433 rasterInfo->depthBiasConstantFactor = 0.0f;
434 rasterInfo->depthBiasClamp = 0.0f;
435 rasterInfo->depthBiasSlopeFactor = 0.0f;
436 rasterInfo->lineWidth = 1.0f;
437}
bool wireframeMode() const
Definition GrCaps.h:399
VkPipelineRasterizationStateCreateFlags flags
@ VK_CULL_MODE_NONE
@ VK_FRONT_FACE_COUNTER_CLOCKWISE
@ VK_POLYGON_MODE_FILL
@ VK_POLYGON_MODE_LINE
@ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO

◆ setup_stencil_op_state()

static void setup_stencil_op_state ( VkStencilOpState opState,
const GrStencilSettings::Face stencilFace 
)
static

Definition at line 222 of file GrVkPipeline.cpp.

223 {
224 opState->failOp = stencil_op_to_vk_stencil_op(stencilFace.fFailOp);
225 opState->passOp = stencil_op_to_vk_stencil_op(stencilFace.fPassOp);
226 opState->depthFailOp = opState->failOp;
227 opState->compareOp = stencil_func_to_vk_compare_op(stencilFace.fTest);
228 opState->compareMask = stencilFace.fTestMask;
229 opState->writeMask = stencilFace.fWriteMask;
230 opState->reference = stencilFace.fRef;
231}
static VkStencilOp stencil_op_to_vk_stencil_op(GrStencilOp op)
static VkCompareOp stencil_func_to_vk_compare_op(GrStencilTest test)
VkStencilOp failOp
VkStencilOp passOp
VkCompareOp compareOp
VkStencilOp depthFailOp

◆ setup_vertex_input_state()

static void setup_vertex_input_state ( const GrGeometryProcessor::AttributeSet vertexAttribs,
const GrGeometryProcessor::AttributeSet instanceAttribs,
VkPipelineVertexInputStateCreateInfo vertexInputInfo,
STArray< 2, VkVertexInputBindingDescription, true > *  bindingDescs,
VkVertexInputAttributeDescription attributeDesc 
)
static

Definition at line 84 of file GrVkPipeline.cpp.

89 {
90 int vaCount = vertexAttribs.count();
91 int iaCount = instanceAttribs.count();
92
93 uint32_t vertexBinding = 0, instanceBinding = 0;
94
95 int nextBinding = bindingDescs->size();
96 if (vaCount) {
97 vertexBinding = nextBinding++;
98 }
99
100 if (iaCount) {
101 instanceBinding = nextBinding;
102 }
103
104 // setup attribute descriptions
105 int attribIndex = 0;
106 for (auto attrib : vertexAttribs) {
107 VkVertexInputAttributeDescription& vkAttrib = attributeDesc[attribIndex];
108 vkAttrib.location = attribIndex++; // for now assume location = attribIndex
109 vkAttrib.binding = vertexBinding;
110 vkAttrib.format = attrib_type_to_vkformat(attrib.cpuType());
111 vkAttrib.offset = *attrib.offset();
112 }
113
114 for (auto attrib : instanceAttribs) {
115 VkVertexInputAttributeDescription& vkAttrib = attributeDesc[attribIndex];
116 vkAttrib.location = attribIndex++; // for now assume location = attribIndex
117 vkAttrib.binding = instanceBinding;
118 vkAttrib.format = attrib_type_to_vkformat(attrib.cpuType());
119 vkAttrib.offset = *attrib.offset();
120 }
121
122 if (vaCount) {
123 bindingDescs->push_back() = {
124 vertexBinding,
125 (uint32_t) vertexAttribs.stride(),
127 };
128 }
129 if (iaCount) {
130 bindingDescs->push_back() = {
131 instanceBinding,
132 (uint32_t) instanceAttribs.stride(),
134 };
135 }
136
137 memset(vertexInputInfo, 0, sizeof(VkPipelineVertexInputStateCreateInfo));
139 vertexInputInfo->pNext = nullptr;
140 vertexInputInfo->flags = 0;
141 vertexInputInfo->vertexBindingDescriptionCount = bindingDescs->size();
142 vertexInputInfo->pVertexBindingDescriptions = bindingDescs->begin();
143 vertexInputInfo->vertexAttributeDescriptionCount = vaCount + iaCount;
144 vertexInputInfo->pVertexAttributeDescriptions = attributeDesc;
145}
static VkFormat attrib_type_to_vkformat(GrVertexAttribType type)
int size() const
Definition SkTArray.h:416
const VkVertexInputAttributeDescription * pVertexAttributeDescriptions
const VkVertexInputBindingDescription * pVertexBindingDescriptions
VkPipelineVertexInputStateCreateFlags flags
@ VK_VERTEX_INPUT_RATE_VERTEX
@ VK_VERTEX_INPUT_RATE_INSTANCE
@ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO

◆ setup_viewport_scissor_state()

static void setup_viewport_scissor_state ( VkPipelineViewportStateCreateInfo viewportInfo)
static

Definition at line 261 of file GrVkPipeline.cpp.

261 {
262 memset(viewportInfo, 0, sizeof(VkPipelineViewportStateCreateInfo));
264 viewportInfo->pNext = nullptr;
265 viewportInfo->flags = 0;
266
267 viewportInfo->viewportCount = 1;
268 viewportInfo->pViewports = nullptr; // This is set dynamically
269
270 viewportInfo->scissorCount = 1;
271 viewportInfo->pScissors = nullptr; // This is set dynamically
272
273 SkASSERT(viewportInfo->viewportCount == viewportInfo->scissorCount);
274}
VkPipelineViewportStateCreateFlags flags
@ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO

◆ stencil_func_to_vk_compare_op()

static VkCompareOp stencil_func_to_vk_compare_op ( GrStencilTest  test)
static

Definition at line 197 of file GrVkPipeline.cpp.

197 {
198 static const VkCompareOp gTable[] = {
199 VK_COMPARE_OP_ALWAYS, // kAlways
200 VK_COMPARE_OP_NEVER, // kNever
201 VK_COMPARE_OP_GREATER, // kGreater
203 VK_COMPARE_OP_LESS, // kLess
205 VK_COMPARE_OP_EQUAL, // kEqual
206 VK_COMPARE_OP_NOT_EQUAL, // kNotEqual
207 };
208 static_assert(std::size(gTable) == kGrStencilTestCount);
209 static_assert(0 == (int)GrStencilTest::kAlways);
210 static_assert(1 == (int)GrStencilTest::kNever);
211 static_assert(2 == (int)GrStencilTest::kGreater);
212 static_assert(3 == (int)GrStencilTest::kGEqual);
213 static_assert(4 == (int)GrStencilTest::kLess);
214 static_assert(5 == (int)GrStencilTest::kLEqual);
215 static_assert(6 == (int)GrStencilTest::kEqual);
216 static_assert(7 == (int)GrStencilTest::kNotEqual);
218
219 return gTable[(int)test];
220}
static constexpr int kGrStencilTestCount
GrStencilTest
VkCompareOp
@ VK_COMPARE_OP_LESS_OR_EQUAL
@ VK_COMPARE_OP_LESS
@ VK_COMPARE_OP_NOT_EQUAL
@ VK_COMPARE_OP_NEVER
@ VK_COMPARE_OP_EQUAL
@ VK_COMPARE_OP_GREATER_OR_EQUAL
@ VK_COMPARE_OP_GREATER

◆ stencil_op_to_vk_stencil_op()

static VkStencilOp stencil_op_to_vk_stencil_op ( GrStencilOp  op)
static

Definition at line 173 of file GrVkPipeline.cpp.

173 {
174 static const VkStencilOp gTable[] = {
175 VK_STENCIL_OP_KEEP, // kKeep
176 VK_STENCIL_OP_ZERO, // kZero
177 VK_STENCIL_OP_REPLACE, // kReplace
178 VK_STENCIL_OP_INVERT, // kInvert
183 };
184 static_assert(std::size(gTable) == kGrStencilOpCount);
185 static_assert(0 == (int)GrStencilOp::kKeep);
186 static_assert(1 == (int)GrStencilOp::kZero);
187 static_assert(2 == (int)GrStencilOp::kReplace);
188 static_assert(3 == (int)GrStencilOp::kInvert);
189 static_assert(4 == (int)GrStencilOp::kIncWrap);
190 static_assert(5 == (int)GrStencilOp::kDecWrap);
191 static_assert(6 == (int)GrStencilOp::kIncClamp);
192 static_assert(7 == (int)GrStencilOp::kDecClamp);
194 return gTable[(int)op];
195}
GrStencilOp
static constexpr int kGrStencilOpCount
VkStencilOp
@ VK_STENCIL_OP_INCREMENT_AND_CLAMP
@ VK_STENCIL_OP_DECREMENT_AND_CLAMP
@ VK_STENCIL_OP_INCREMENT_AND_WRAP
@ VK_STENCIL_OP_KEEP
@ VK_STENCIL_OP_REPLACE
@ VK_STENCIL_OP_ZERO
@ VK_STENCIL_OP_DECREMENT_AND_WRAP
@ VK_STENCIL_OP_INVERT