OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "GrVkPipeline.h" | 8 #include "GrVkPipeline.h" |
9 | 9 |
10 #include "GrGeometryProcessor.h" | 10 #include "GrGeometryProcessor.h" |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 stencilInfo->depthBoundsTestEnable = VK_FALSE; | 161 stencilInfo->depthBoundsTestEnable = VK_FALSE; |
162 stencilInfo->stencilTestEnable = !stencilSettings.isDisabled(); | 162 stencilInfo->stencilTestEnable = !stencilSettings.isDisabled(); |
163 if (!stencilSettings.isDisabled()) { | 163 if (!stencilSettings.isDisabled()) { |
164 // Set front face | 164 // Set front face |
165 GrStencilSettings::Face face = GrStencilSettings::kFront_Face; | 165 GrStencilSettings::Face face = GrStencilSettings::kFront_Face; |
166 stencilInfo->front.failOp = stencil_op_to_vk_stencil_op(stencilSettings.
failOp(face)); | 166 stencilInfo->front.failOp = stencil_op_to_vk_stencil_op(stencilSettings.
failOp(face)); |
167 stencilInfo->front.passOp = stencil_op_to_vk_stencil_op(stencilSettings.
passOp(face)); | 167 stencilInfo->front.passOp = stencil_op_to_vk_stencil_op(stencilSettings.
passOp(face)); |
168 stencilInfo->front.depthFailOp = stencilInfo->front.failOp; | 168 stencilInfo->front.depthFailOp = stencilInfo->front.failOp; |
169 stencilInfo->front.compareOp = stencil_func_to_vk_compare_op(stencilSett
ings.func(face)); | 169 stencilInfo->front.compareOp = stencil_func_to_vk_compare_op(stencilSett
ings.func(face)); |
170 stencilInfo->front.compareMask = stencilSettings.funcMask(face); | 170 stencilInfo->front.compareMask = stencilSettings.funcMask(face); |
171 stencilInfo->front.writeMask = 0; | 171 stencilInfo->front.writeMask = stencilSettings.writeMask(face); |
172 stencilInfo->front.reference = 0; | 172 stencilInfo->front.reference = stencilSettings.funcRef(face); |
173 | 173 |
174 // Set back face | 174 // Set back face |
175 face = GrStencilSettings::kBack_Face; | 175 face = GrStencilSettings::kBack_Face; |
176 stencilInfo->back.failOp = stencil_op_to_vk_stencil_op(stencilSettings.f
ailOp(face)); | 176 stencilInfo->back.failOp = stencil_op_to_vk_stencil_op(stencilSettings.f
ailOp(face)); |
177 stencilInfo->back.passOp = stencil_op_to_vk_stencil_op(stencilSettings.p
assOp(face)); | 177 stencilInfo->back.passOp = stencil_op_to_vk_stencil_op(stencilSettings.p
assOp(face)); |
178 stencilInfo->back.depthFailOp = stencilInfo->front.failOp; | 178 stencilInfo->back.depthFailOp = stencilInfo->front.failOp; |
179 stencilInfo->back.compareOp = stencil_func_to_vk_compare_op(stencilSetti
ngs.func(face)); | 179 stencilInfo->back.compareOp = stencil_func_to_vk_compare_op(stencilSetti
ngs.func(face)); |
180 stencilInfo->back.compareMask = stencilSettings.funcMask(face); | 180 stencilInfo->back.compareMask = stencilSettings.funcMask(face); |
181 stencilInfo->back.writeMask = 0; | 181 stencilInfo->back.writeMask = stencilSettings.writeMask(face); |
182 stencilInfo->back.reference = 0; | 182 stencilInfo->back.reference = stencilSettings.funcRef(face); |
183 } | 183 } |
184 stencilInfo->minDepthBounds = 0.0f; | 184 stencilInfo->minDepthBounds = 0.0f; |
185 stencilInfo->maxDepthBounds = 1.0f; | 185 stencilInfo->maxDepthBounds = 1.0f; |
186 } | 186 } |
187 | 187 |
188 void setup_viewport_scissor_state(const GrVkGpu* gpu, | 188 void setup_viewport_scissor_state(const GrVkGpu* gpu, |
189 const GrPipeline& pipeline, | 189 const GrPipeline& pipeline, |
190 const GrVkRenderTarget* vkRT, | 190 const GrVkRenderTarget* vkRT, |
191 VkPipelineViewportStateCreateInfo* viewportInf
o, | 191 VkPipelineViewportStateCreateInfo* viewportInf
o, |
192 VkViewport* viewport, | 192 VkViewport* viewport, |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 memset(attachmentState, 0, sizeof(VkPipelineColorBlendAttachmentState)); | 359 memset(attachmentState, 0, sizeof(VkPipelineColorBlendAttachmentState)); |
360 attachmentState->blendEnable = !blendOff; | 360 attachmentState->blendEnable = !blendOff; |
361 if (!blendOff) { | 361 if (!blendOff) { |
362 attachmentState->srcColorBlendFactor = blend_coeff_to_vk_blend(srcCoeff)
; | 362 attachmentState->srcColorBlendFactor = blend_coeff_to_vk_blend(srcCoeff)
; |
363 attachmentState->dstColorBlendFactor = blend_coeff_to_vk_blend(dstCoeff)
; | 363 attachmentState->dstColorBlendFactor = blend_coeff_to_vk_blend(dstCoeff)
; |
364 attachmentState->colorBlendOp = blend_equation_to_vk_blend_op(equation); | 364 attachmentState->colorBlendOp = blend_equation_to_vk_blend_op(equation); |
365 attachmentState->srcAlphaBlendFactor = blend_coeff_to_vk_blend(srcCoeff)
; | 365 attachmentState->srcAlphaBlendFactor = blend_coeff_to_vk_blend(srcCoeff)
; |
366 attachmentState->dstAlphaBlendFactor = blend_coeff_to_vk_blend(dstCoeff)
; | 366 attachmentState->dstAlphaBlendFactor = blend_coeff_to_vk_blend(dstCoeff)
; |
367 attachmentState->alphaBlendOp = blend_equation_to_vk_blend_op(equation); | 367 attachmentState->alphaBlendOp = blend_equation_to_vk_blend_op(equation); |
368 } | 368 } |
369 attachmentState->colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPON
ENT_G_BIT | | 369 |
370 VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPON
ENT_A_BIT; | 370 if (!blendInfo.fWriteColor) { |
| 371 attachmentState->colorWriteMask = 0; |
| 372 } else { |
| 373 attachmentState->colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_CO
MPONENT_G_BIT | |
| 374 VK_COLOR_COMPONENT_B_BIT | VK_COLOR_CO
MPONENT_A_BIT; |
| 375 } |
371 | 376 |
372 memset(colorBlendInfo, 0, sizeof(VkPipelineColorBlendStateCreateInfo)); | 377 memset(colorBlendInfo, 0, sizeof(VkPipelineColorBlendStateCreateInfo)); |
373 colorBlendInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_
INFO; | 378 colorBlendInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_
INFO; |
374 colorBlendInfo->pNext = nullptr; | 379 colorBlendInfo->pNext = nullptr; |
375 colorBlendInfo->flags = 0; | 380 colorBlendInfo->flags = 0; |
376 colorBlendInfo->logicOpEnable = VK_FALSE; | 381 colorBlendInfo->logicOpEnable = VK_FALSE; |
377 colorBlendInfo->attachmentCount = 1; | 382 colorBlendInfo->attachmentCount = 1; |
378 colorBlendInfo->pAttachments = attachmentState; | 383 colorBlendInfo->pAttachments = attachmentState; |
379 if (blend_coeff_refs_constant(srcCoeff) || blend_coeff_refs_constant(dstCoef
f)) { | 384 if (blend_coeff_refs_constant(srcCoeff) || blend_coeff_refs_constant(dstCoef
f)) { |
380 GrColorToRGBAFloat(blendInfo.fBlendConstant, colorBlendInfo->blendConsta
nts); | 385 GrColorToRGBAFloat(blendInfo.fBlendConstant, colorBlendInfo->blendConsta
nts); |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 } | 503 } |
499 | 504 |
500 return new GrVkPipeline(vkPipeline); | 505 return new GrVkPipeline(vkPipeline); |
501 } | 506 } |
502 | 507 |
503 void GrVkPipeline::freeGPUData(const GrVkGpu* gpu) const { | 508 void GrVkPipeline::freeGPUData(const GrVkGpu* gpu) const { |
504 GR_VK_CALL(gpu->vkInterface(), DestroyPipeline(gpu->device(), fPipeline, nul
lptr)); | 509 GR_VK_CALL(gpu->vkInterface(), DestroyPipeline(gpu->device(), fPipeline, nul
lptr)); |
505 } | 510 } |
506 | 511 |
507 | 512 |
OLD | NEW |