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 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 // TODO: mask out any state we might want to set dynamically | 423 // TODO: mask out any state we might want to set dynamically |
424 dynamicInfo->dynamicStateCount = 0; | 424 dynamicInfo->dynamicStateCount = 0; |
425 } | 425 } |
426 | 426 |
427 GrVkPipeline* GrVkPipeline::Create(GrVkGpu* gpu, const GrPipeline& pipeline, | 427 GrVkPipeline* GrVkPipeline::Create(GrVkGpu* gpu, const GrPipeline& pipeline, |
428 const GrPrimitiveProcessor& primProc, | 428 const GrPrimitiveProcessor& primProc, |
429 VkPipelineShaderStageCreateInfo* shaderStageI
nfo, | 429 VkPipelineShaderStageCreateInfo* shaderStageI
nfo, |
430 int shaderStageCount, | 430 int shaderStageCount, |
431 GrPrimitiveType primitiveType, | 431 GrPrimitiveType primitiveType, |
432 const GrVkRenderPass& renderPass, | 432 const GrVkRenderPass& renderPass, |
433 VkPipelineLayout layout) { | 433 VkPipelineLayout layout, |
| 434 VkPipelineCache cache) { |
434 VkPipelineVertexInputStateCreateInfo vertexInputInfo; | 435 VkPipelineVertexInputStateCreateInfo vertexInputInfo; |
435 VkVertexInputBindingDescription bindingDesc; | 436 VkVertexInputBindingDescription bindingDesc; |
436 // TODO: allocate this based on VkPhysicalDeviceLimits::maxVertexInputAttrib
utes | 437 // TODO: allocate this based on VkPhysicalDeviceLimits::maxVertexInputAttrib
utes |
437 static const int kMaxVertexAttributes = 16; | 438 static const int kMaxVertexAttributes = 16; |
438 static VkVertexInputAttributeDescription attributeDesc[kMaxVertexAttributes]
; | 439 static VkVertexInputAttributeDescription attributeDesc[kMaxVertexAttributes]
; |
439 setup_vertex_input_state(primProc, &vertexInputInfo, &bindingDesc, 1, | 440 setup_vertex_input_state(primProc, &vertexInputInfo, &bindingDesc, 1, |
440 attributeDesc, kMaxVertexAttributes); | 441 attributeDesc, kMaxVertexAttributes); |
441 | 442 |
442 VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo; | 443 VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo; |
443 setup_input_assembly_state(primitiveType, &inputAssemblyInfo); | 444 setup_input_assembly_state(primitiveType, &inputAssemblyInfo); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 pipelineCreateInfo.pColorBlendState = &colorBlendInfo; | 484 pipelineCreateInfo.pColorBlendState = &colorBlendInfo; |
484 pipelineCreateInfo.pDynamicState = &dynamicInfo; | 485 pipelineCreateInfo.pDynamicState = &dynamicInfo; |
485 pipelineCreateInfo.layout = layout; | 486 pipelineCreateInfo.layout = layout; |
486 pipelineCreateInfo.renderPass = renderPass.vkRenderPass(); | 487 pipelineCreateInfo.renderPass = renderPass.vkRenderPass(); |
487 pipelineCreateInfo.subpass = 0; | 488 pipelineCreateInfo.subpass = 0; |
488 pipelineCreateInfo.basePipelineHandle = VK_NULL_HANDLE; | 489 pipelineCreateInfo.basePipelineHandle = VK_NULL_HANDLE; |
489 pipelineCreateInfo.basePipelineIndex = -1; | 490 pipelineCreateInfo.basePipelineIndex = -1; |
490 | 491 |
491 VkPipeline vkPipeline; | 492 VkPipeline vkPipeline; |
492 VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateGraphicsPipelines(gpu->d
evice(), | 493 VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateGraphicsPipelines(gpu->d
evice(), |
493 nullpt
r, 1, | 494 cache,
1, |
494 &pipel
ineCreateInfo, | 495 &pipel
ineCreateInfo, |
495 nullpt
r, &vkPipeline)); | 496 nullpt
r, &vkPipeline)); |
496 if (err) { | 497 if (err) { |
497 return nullptr; | 498 return nullptr; |
498 } | 499 } |
499 | 500 |
500 return new GrVkPipeline(vkPipeline); | 501 return new GrVkPipeline(vkPipeline); |
501 } | 502 } |
502 | 503 |
503 void GrVkPipeline::freeGPUData(const GrVkGpu* gpu) const { | 504 void GrVkPipeline::freeGPUData(const GrVkGpu* gpu) const { |
504 GR_VK_CALL(gpu->vkInterface(), DestroyPipeline(gpu->device(), fPipeline, nul
lptr)); | 505 GR_VK_CALL(gpu->vkInterface(), DestroyPipeline(gpu->device(), fPipeline, nul
lptr)); |
505 } | 506 } |
506 | 507 |
507 | 508 |
OLD | NEW |