| 431 | } |
| 432 | |
| 433 | void vkRenderer::createGraphicsPipeline() { |
| 434 | auto vertShaderCode = readFile("../shaders/vk/shader.vert.spv"); |
| 435 | auto fragShaderCode = readFile("../shaders/vk/shader.frag.spv"); |
| 436 | |
| 437 | VkShaderModule vertShaderModule = createShaderModule(vertShaderCode); |
| 438 | VkShaderModule fragShaderModule = createShaderModule(fragShaderCode); |
| 439 | |
| 440 | VkPipelineShaderStageCreateInfo vertShaderStageInfo = {}; |
| 441 | vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; |
| 442 | vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; |
| 443 | vertShaderStageInfo.module = vertShaderModule; |
| 444 | vertShaderStageInfo.pName = "main"; |
| 445 | |
| 446 | VkPipelineShaderStageCreateInfo fragShaderStageInfo = {}; |
| 447 | fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; |
| 448 | fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT; |
| 449 | fragShaderStageInfo.module = fragShaderModule; |
| 450 | fragShaderStageInfo.pName = "main"; |
| 451 | |
| 452 | VkPipelineShaderStageCreateInfo shaderStages[] = {vertShaderStageInfo, fragShaderStageInfo}; |
| 453 | |
| 454 | VkPipelineVertexInputStateCreateInfo vertexInputInfo = {}; |
| 455 | vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; |
| 456 | |
| 457 | auto bindingDescription = Vertex::getBindingDescription(); |
| 458 | auto attributeDescriptions = Vertex::getAttributeDescriptions(); |
| 459 | |
| 460 | vertexInputInfo.vertexBindingDescriptionCount = 1; |
| 461 | vertexInputInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(attributeDescriptions.size()); |
| 462 | vertexInputInfo.pVertexBindingDescriptions = &bindingDescription; |
| 463 | vertexInputInfo.pVertexAttributeDescriptions = attributeDescriptions.data(); |
| 464 | |
| 465 | VkPipelineInputAssemblyStateCreateInfo inputAssembly = {}; |
| 466 | inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; |
| 467 | inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; |
| 468 | inputAssembly.primitiveRestartEnable = VK_FALSE; |
| 469 | |
| 470 | VkViewport viewport = {}; |
| 471 | viewport.x = 0.0f; |
| 472 | viewport.y = 0.0f; |
| 473 | viewport.width = (float) swapChainExtent.width; |
| 474 | viewport.height = (float) swapChainExtent.height; |
| 475 | viewport.minDepth = 0.0f; |
| 476 | viewport.maxDepth = 1.0f; |
| 477 | |
| 478 | VkRect2D scissor = {}; |
| 479 | scissor.offset = {0, 0}; |
| 480 | scissor.extent = swapChainExtent; |
| 481 | |
| 482 | VkPipelineViewportStateCreateInfo viewportState = {}; |
| 483 | viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; |
| 484 | viewportState.viewportCount = 1; |
| 485 | viewportState.pViewports = &viewport; |
| 486 | viewportState.scissorCount = 1; |
| 487 | viewportState.pScissors = &scissor; |
| 488 | |
| 489 | VkPipelineRasterizationStateCreateInfo rasterizer = {}; |
| 490 | rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; |
nothing calls this directly
no test coverage detected