|
@@ -455,7 +455,7 @@ void BlitImageHelper::ConvertR16ToD16(const Framebuffer* dst_framebuffer,
|
|
|
void BlitImageHelper::ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer,
|
|
void BlitImageHelper::ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer,
|
|
|
ImageView& src_image_view, u32 up_scale, u32 down_shift) {
|
|
ImageView& src_image_view, u32 up_scale, u32 down_shift) {
|
|
|
ConvertPipelineDepthTargetEx(convert_abgr8_to_d24s8_pipeline, dst_framebuffer->RenderPass(),
|
|
ConvertPipelineDepthTargetEx(convert_abgr8_to_d24s8_pipeline, dst_framebuffer->RenderPass(),
|
|
|
- convert_abgr8_to_d24s8_frag, true);
|
|
|
|
|
|
|
+ convert_abgr8_to_d24s8_frag);
|
|
|
ConvertColor(*convert_abgr8_to_d24s8_pipeline, dst_framebuffer, src_image_view, up_scale,
|
|
ConvertColor(*convert_abgr8_to_d24s8_pipeline, dst_framebuffer, src_image_view, up_scale,
|
|
|
down_shift);
|
|
down_shift);
|
|
|
}
|
|
}
|
|
@@ -463,7 +463,7 @@ void BlitImageHelper::ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer,
|
|
|
void BlitImageHelper::ConvertD24S8ToABGR8(const Framebuffer* dst_framebuffer,
|
|
void BlitImageHelper::ConvertD24S8ToABGR8(const Framebuffer* dst_framebuffer,
|
|
|
ImageView& src_image_view, u32 up_scale, u32 down_shift) {
|
|
ImageView& src_image_view, u32 up_scale, u32 down_shift) {
|
|
|
ConvertPipelineColorTargetEx(convert_d24s8_to_abgr8_pipeline, dst_framebuffer->RenderPass(),
|
|
ConvertPipelineColorTargetEx(convert_d24s8_to_abgr8_pipeline, dst_framebuffer->RenderPass(),
|
|
|
- convert_d24s8_to_abgr8_frag, false);
|
|
|
|
|
|
|
+ convert_d24s8_to_abgr8_frag);
|
|
|
ConvertDepthStencil(*convert_d24s8_to_abgr8_pipeline, dst_framebuffer, src_image_view, up_scale,
|
|
ConvertDepthStencil(*convert_d24s8_to_abgr8_pipeline, dst_framebuffer, src_image_view, up_scale,
|
|
|
down_shift);
|
|
down_shift);
|
|
|
}
|
|
}
|
|
@@ -751,8 +751,9 @@ void BlitImageHelper::ConvertColorToDepthPipeline(vk::Pipeline& pipeline, VkRend
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void BlitImageHelper::ConvertPipelineColorTargetEx(vk::Pipeline& pipeline, VkRenderPass renderpass,
|
|
|
|
|
- vk::ShaderModule& module, bool single_texture) {
|
|
|
|
|
|
|
+void BlitImageHelper::ConvertPipelineEx(vk::Pipeline& pipeline, VkRenderPass renderpass,
|
|
|
|
|
+ vk::ShaderModule& module, bool single_texture,
|
|
|
|
|
+ bool is_target_depth) {
|
|
|
if (pipeline) {
|
|
if (pipeline) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -769,7 +770,7 @@ void BlitImageHelper::ConvertPipelineColorTargetEx(vk::Pipeline& pipeline, VkRen
|
|
|
.pViewportState = &PIPELINE_VIEWPORT_STATE_CREATE_INFO,
|
|
.pViewportState = &PIPELINE_VIEWPORT_STATE_CREATE_INFO,
|
|
|
.pRasterizationState = &PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
|
|
.pRasterizationState = &PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
|
|
|
.pMultisampleState = &PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
|
|
.pMultisampleState = &PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
|
|
|
- .pDepthStencilState = nullptr,
|
|
|
|
|
|
|
+ .pDepthStencilState = is_target_depth ? &PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO : nullptr,
|
|
|
.pColorBlendState = &PIPELINE_COLOR_BLEND_STATE_GENERIC_CREATE_INFO,
|
|
.pColorBlendState = &PIPELINE_COLOR_BLEND_STATE_GENERIC_CREATE_INFO,
|
|
|
.pDynamicState = &PIPELINE_DYNAMIC_STATE_CREATE_INFO,
|
|
.pDynamicState = &PIPELINE_DYNAMIC_STATE_CREATE_INFO,
|
|
|
.layout = single_texture ? *one_texture_pipeline_layout : *two_textures_pipeline_layout,
|
|
.layout = single_texture ? *one_texture_pipeline_layout : *two_textures_pipeline_layout,
|
|
@@ -780,33 +781,14 @@ void BlitImageHelper::ConvertPipelineColorTargetEx(vk::Pipeline& pipeline, VkRen
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void BlitImageHelper::ConvertPipelineColorTargetEx(vk::Pipeline& pipeline, VkRenderPass renderpass,
|
|
|
|
|
+ vk::ShaderModule& module) {
|
|
|
|
|
+ ConvertPipelineEx(pipeline, renderpass, module, false, false);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void BlitImageHelper::ConvertPipelineDepthTargetEx(vk::Pipeline& pipeline, VkRenderPass renderpass,
|
|
void BlitImageHelper::ConvertPipelineDepthTargetEx(vk::Pipeline& pipeline, VkRenderPass renderpass,
|
|
|
- vk::ShaderModule& module, bool single_texture) {
|
|
|
|
|
- if (pipeline) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- const std::array stages = MakeStages(*full_screen_vert, *module);
|
|
|
|
|
- pipeline = device.GetLogical().CreateGraphicsPipeline({
|
|
|
|
|
- .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
|
|
|
|
|
- .pNext = nullptr,
|
|
|
|
|
- .flags = 0,
|
|
|
|
|
- .stageCount = static_cast<u32>(stages.size()),
|
|
|
|
|
- .pStages = stages.data(),
|
|
|
|
|
- .pVertexInputState = &PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
|
|
|
|
|
- .pInputAssemblyState = &PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
|
|
|
|
|
- .pTessellationState = nullptr,
|
|
|
|
|
- .pViewportState = &PIPELINE_VIEWPORT_STATE_CREATE_INFO,
|
|
|
|
|
- .pRasterizationState = &PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
|
|
|
|
|
- .pMultisampleState = &PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
|
|
|
|
|
- .pDepthStencilState = &PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
|
|
|
|
|
- .pColorBlendState = &PIPELINE_COLOR_BLEND_STATE_EMPTY_CREATE_INFO,
|
|
|
|
|
- .pDynamicState = &PIPELINE_DYNAMIC_STATE_CREATE_INFO,
|
|
|
|
|
- .layout = single_texture ? *one_texture_pipeline_layout : *two_textures_pipeline_layout,
|
|
|
|
|
- .renderPass = renderpass,
|
|
|
|
|
- .subpass = 0,
|
|
|
|
|
- .basePipelineHandle = VK_NULL_HANDLE,
|
|
|
|
|
- .basePipelineIndex = 0,
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ vk::ShaderModule& module) {
|
|
|
|
|
+ ConvertPipelineEx(pipeline, renderpass, module, true, true);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} // namespace Vulkan
|
|
} // namespace Vulkan
|