(shader_vulkan.cpp) Move more C code to vulkan_common.c
This commit is contained in:
parent
bcf8ff3d0a
commit
90874b434e
|
@ -3385,3 +3385,81 @@ void vulkan_framebuffer_generate_mips(
|
|||
* the dependency chain will ensure we don't start
|
||||
* next pass until the mipchain is complete. */
|
||||
}
|
||||
|
||||
void vulkan_framebuffer_copy(VkImage image,
|
||||
struct Size2D size,
|
||||
VkCommandBuffer cmd,
|
||||
VkImage src_image, VkImageLayout src_layout)
|
||||
{
|
||||
VkImageCopy region;
|
||||
|
||||
vulkan_image_layout_transition_levels(cmd, image,VK_REMAINING_MIP_LEVELS,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
0, VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||
|
||||
memset(®ion, 0, sizeof(region));
|
||||
|
||||
region.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
region.srcSubresource.layerCount = 1;
|
||||
region.dstSubresource = region.srcSubresource;
|
||||
region.extent.width = size.width;
|
||||
region.extent.height = size.height;
|
||||
region.extent.depth = 1;
|
||||
|
||||
vkCmdCopyImage(cmd,
|
||||
src_image, src_layout,
|
||||
image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
1, ®ion);
|
||||
|
||||
vulkan_image_layout_transition_levels(cmd,
|
||||
image,
|
||||
VK_REMAINING_MIP_LEVELS,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_ACCESS_SHADER_READ_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
||||
}
|
||||
|
||||
void vulkan_framebuffer_clear(VkImage image, VkCommandBuffer cmd)
|
||||
{
|
||||
VkClearColorValue color;
|
||||
VkImageSubresourceRange range;
|
||||
|
||||
vulkan_image_layout_transition_levels(cmd,
|
||||
image,
|
||||
VK_REMAINING_MIP_LEVELS,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
0,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||
|
||||
memset(&color, 0, sizeof(color));
|
||||
memset(&range, 0, sizeof(range));
|
||||
|
||||
range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
range.levelCount = 1;
|
||||
range.layerCount = 1;
|
||||
|
||||
vkCmdClearColorImage(cmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
&color,
|
||||
1,
|
||||
&range);
|
||||
|
||||
vulkan_image_layout_transition_levels(cmd,
|
||||
image,
|
||||
VK_REMAINING_MIP_LEVELS,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_ACCESS_SHADER_READ_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
||||
}
|
||||
|
|
|
@ -609,6 +609,13 @@ void vulkan_framebuffer_generate_mips(
|
|||
unsigned levels
|
||||
);
|
||||
|
||||
void vulkan_framebuffer_copy(VkImage image,
|
||||
struct Size2D size,
|
||||
VkCommandBuffer cmd,
|
||||
VkImage src_image, VkImageLayout src_layout);
|
||||
|
||||
void vulkan_framebuffer_clear(VkImage image, VkCommandBuffer cmd);
|
||||
|
||||
void vulkan_initialize_render_pass(VkDevice device,
|
||||
VkFormat format, VkRenderPass *render_pass);
|
||||
|
||||
|
|
|
@ -231,9 +231,6 @@ class Framebuffer
|
|||
VkFramebuffer get_framebuffer() const { return framebuffer; }
|
||||
VkRenderPass get_render_pass() const { return render_pass; }
|
||||
|
||||
void clear(VkCommandBuffer cmd);
|
||||
void copy(VkCommandBuffer cmd, VkImage image, VkImageLayout layout);
|
||||
|
||||
unsigned get_levels() const { return levels; }
|
||||
|
||||
private:
|
||||
|
@ -769,7 +766,8 @@ void vulkan_filter_chain::update_history(DeferredDisposer &disposer,
|
|||
&& input_texture.format != tmp->get_format()))
|
||||
tmp->set_size(disposer, { input_texture.width, input_texture.height }, input_texture.format);
|
||||
|
||||
tmp->copy(cmd, input_texture.image, src_layout);
|
||||
vulkan_framebuffer_copy(tmp->get_image(), tmp->get_size(),
|
||||
cmd, input_texture.image, src_layout);
|
||||
|
||||
/* Transition input texture back. */
|
||||
if (input_texture.layout != VK_IMAGE_LAYOUT_GENERAL)
|
||||
|
@ -1096,12 +1094,12 @@ void vulkan_filter_chain::clear_history_and_feedback(VkCommandBuffer cmd)
|
|||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < original_history.size(); i++)
|
||||
original_history[i]->clear(cmd);
|
||||
vulkan_framebuffer_clear(original_history[i]->get_image(), cmd);
|
||||
for (i = 0; i < passes.size(); i++)
|
||||
{
|
||||
Framebuffer *fb = passes[i]->get_feedback_framebuffer();
|
||||
if (fb)
|
||||
fb->clear(cmd);
|
||||
vulkan_framebuffer_clear(fb->get_image(), cmd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2401,78 +2399,6 @@ Framebuffer::Framebuffer(
|
|||
init(nullptr);
|
||||
}
|
||||
|
||||
void Framebuffer::clear(VkCommandBuffer cmd)
|
||||
{
|
||||
VkClearColorValue color;
|
||||
VkImageSubresourceRange range;
|
||||
|
||||
vulkan_image_layout_transition_levels(cmd,
|
||||
image,
|
||||
VK_REMAINING_MIP_LEVELS,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
0,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||
|
||||
memset(&color, 0, sizeof(color));
|
||||
memset(&range, 0, sizeof(range));
|
||||
|
||||
range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
range.levelCount = 1;
|
||||
range.layerCount = 1;
|
||||
|
||||
vkCmdClearColorImage(cmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
&color,
|
||||
1,
|
||||
&range);
|
||||
|
||||
vulkan_image_layout_transition_levels(cmd,
|
||||
image,
|
||||
VK_REMAINING_MIP_LEVELS,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_ACCESS_SHADER_READ_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
||||
}
|
||||
|
||||
void Framebuffer::copy(VkCommandBuffer cmd,
|
||||
VkImage src_image, VkImageLayout src_layout)
|
||||
{
|
||||
VkImageCopy region;
|
||||
|
||||
vulkan_image_layout_transition_levels(cmd, image,VK_REMAINING_MIP_LEVELS,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
0, VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||
|
||||
memset(®ion, 0, sizeof(region));
|
||||
|
||||
region.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
region.srcSubresource.layerCount = 1;
|
||||
region.dstSubresource = region.srcSubresource;
|
||||
region.extent.width = size.width;
|
||||
region.extent.height = size.height;
|
||||
region.extent.depth = 1;
|
||||
|
||||
vkCmdCopyImage(cmd,
|
||||
src_image, src_layout,
|
||||
image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
1, ®ion);
|
||||
|
||||
vulkan_image_layout_transition_levels(cmd, image,VK_REMAINING_MIP_LEVELS,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
||||
}
|
||||
|
||||
void Framebuffer::init(DeferredDisposer *disposer)
|
||||
{
|
||||
VkMemoryRequirements mem_reqs;
|
||||
|
|
Loading…
Reference in New Issue