mirror of
https://github.com/RPCS3/rpcs3
synced 2024-11-02 10:51:44 +00:00
Merge pull request #1569 from vlj/vulkan
vulkan: Zero initialize as much structure info as possible.
This commit is contained in:
commit
bbe00f6505
5 changed files with 49 additions and 124 deletions
|
@ -176,20 +176,11 @@ VKGSRender::VKGSRender() : GSRender(frame_type::Vulkan)
|
|||
m_command_buffer_pool.create((*m_device));
|
||||
m_command_buffer.create(m_command_buffer_pool);
|
||||
|
||||
VkCommandBufferInheritanceInfo inheritance_info;
|
||||
VkCommandBufferInheritanceInfo inheritance_info = {};
|
||||
inheritance_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
|
||||
inheritance_info.pNext = nullptr;
|
||||
inheritance_info.renderPass = VK_NULL_HANDLE;
|
||||
inheritance_info.subpass = 0;
|
||||
inheritance_info.framebuffer = VK_NULL_HANDLE;
|
||||
inheritance_info.occlusionQueryEnable = VK_FALSE;
|
||||
inheritance_info.queryFlags = 0;
|
||||
inheritance_info.pipelineStatistics = 0;
|
||||
|
||||
VkCommandBufferBeginInfo begin_infos;
|
||||
begin_infos.flags = 0;
|
||||
VkCommandBufferBeginInfo begin_infos = {};
|
||||
begin_infos.pInheritanceInfo = &inheritance_info;
|
||||
begin_infos.pNext = nullptr;
|
||||
begin_infos.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||
|
||||
CHECK_RESULT(vkBeginCommandBuffer(m_command_buffer, &begin_infos));
|
||||
|
@ -375,17 +366,14 @@ namespace
|
|||
|
||||
void VKGSRender::end()
|
||||
{
|
||||
VkRenderPassBeginInfo rp_begin;
|
||||
VkRenderPassBeginInfo rp_begin = {};
|
||||
rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
rp_begin.pNext = NULL;
|
||||
rp_begin.renderPass = m_render_pass;
|
||||
rp_begin.framebuffer = m_framebuffer;
|
||||
rp_begin.renderArea.offset.x = 0;
|
||||
rp_begin.renderArea.offset.y = 0;
|
||||
rp_begin.renderArea.extent.width = m_frame->client_size().width;
|
||||
rp_begin.renderArea.extent.height = m_frame->client_size().height;
|
||||
rp_begin.clearValueCount = 0;
|
||||
rp_begin.pClearValues = nullptr;
|
||||
|
||||
vkCmdBeginRenderPass(m_command_buffer, &rp_begin, VK_SUBPASS_CONTENTS_INLINE);
|
||||
|
||||
|
@ -452,7 +440,7 @@ void VKGSRender::set_viewport()
|
|||
// u32 shader_window = rsx::method_registers[NV4097_SET_SHADER_WINDOW];
|
||||
// rsx::window_origin shader_window_origin = rsx::to_window_origin((shader_window >> 12) & 0xf);
|
||||
|
||||
VkViewport viewport;
|
||||
VkViewport viewport = {};
|
||||
viewport.x = viewport_x;
|
||||
viewport.y = viewport_y;
|
||||
viewport.width = viewport_w;
|
||||
|
@ -462,7 +450,7 @@ void VKGSRender::set_viewport()
|
|||
|
||||
vkCmdSetViewport(m_command_buffer, 0, 1, &viewport);
|
||||
|
||||
VkRect2D scissor;
|
||||
VkRect2D scissor = {};
|
||||
scissor.extent.height = scissor_h;
|
||||
scissor.extent.width = scissor_w;
|
||||
scissor.offset.x = scissor_x;
|
||||
|
@ -607,8 +595,7 @@ void VKGSRender::init_render_pass(VkFormat surface_format, VkFormat depth_format
|
|||
{
|
||||
//TODO: Create buffers as requested by the game. Render to swapchain for now..
|
||||
/* Describe a render pass and framebuffer attachments */
|
||||
VkAttachmentDescription attachments[2];
|
||||
memset(&attachments, 0, sizeof attachments);
|
||||
std::array<VkAttachmentDescription, 2> attachments;
|
||||
|
||||
attachments[0].format = surface_format;
|
||||
attachments[0].samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
|
@ -628,17 +615,17 @@ void VKGSRender::init_render_pass(VkFormat surface_format, VkFormat depth_format
|
|||
attachments[1].initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
attachments[1].finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
|
||||
VkAttachmentReference template_color_reference;
|
||||
VkAttachmentReference template_color_reference = {};
|
||||
template_color_reference.attachment = VK_ATTACHMENT_UNUSED;
|
||||
template_color_reference.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
|
||||
VkAttachmentReference depth_reference;
|
||||
VkAttachmentReference depth_reference = {};
|
||||
depth_reference.attachment = num_draw_buffers;
|
||||
depth_reference.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
|
||||
//Fill in draw_buffers information...
|
||||
VkAttachmentDescription real_attachments[4];
|
||||
VkAttachmentReference color_references[4];
|
||||
std::array<VkAttachmentDescription, 4> real_attachments;
|
||||
std::array<VkAttachmentReference, 4> color_references;
|
||||
|
||||
for (int i = 0; i < num_draw_buffers; ++i)
|
||||
{
|
||||
|
@ -650,28 +637,18 @@ void VKGSRender::init_render_pass(VkFormat surface_format, VkFormat depth_format
|
|||
|
||||
real_attachments[num_draw_buffers] = attachments[1];
|
||||
|
||||
VkSubpassDescription subpass;
|
||||
VkSubpassDescription subpass = {};
|
||||
subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
||||
subpass.flags = 0;
|
||||
subpass.inputAttachmentCount = 0;
|
||||
subpass.pInputAttachments = nullptr;
|
||||
subpass.colorAttachmentCount = num_draw_buffers;
|
||||
subpass.pColorAttachments = num_draw_buffers? color_references: nullptr;
|
||||
subpass.pResolveAttachments = nullptr;
|
||||
subpass.pColorAttachments = num_draw_buffers? color_references.data() : nullptr;
|
||||
subpass.pDepthStencilAttachment = &depth_reference;
|
||||
subpass.preserveAttachmentCount = 0;
|
||||
subpass.pPreserveAttachments = nullptr;
|
||||
|
||||
VkRenderPassCreateInfo rp_info;
|
||||
VkRenderPassCreateInfo rp_info = {};
|
||||
rp_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
rp_info.pNext = NULL;
|
||||
rp_info.attachmentCount = num_draw_buffers+1;
|
||||
rp_info.pAttachments = real_attachments;
|
||||
rp_info.attachmentCount = num_draw_buffers + 1;
|
||||
rp_info.pAttachments = real_attachments.data();
|
||||
rp_info.subpassCount = 1;
|
||||
rp_info.pSubpasses = &subpass;
|
||||
rp_info.dependencyCount = 0;
|
||||
rp_info.pDependencies = NULL;
|
||||
rp_info.flags = 0;
|
||||
|
||||
CHECK_RESULT(vkCreateRenderPass((*m_device), &rp_info, NULL, &m_render_pass));
|
||||
}
|
||||
|
@ -775,9 +752,7 @@ void VKGSRender::init_buffers(bool skip_reading)
|
|||
if (dirty_frame)
|
||||
{
|
||||
//Prepare surface for new frame
|
||||
VkSemaphoreCreateInfo semaphore_info;
|
||||
semaphore_info.flags = 0;
|
||||
semaphore_info.pNext = nullptr;
|
||||
VkSemaphoreCreateInfo semaphore_info = {};
|
||||
semaphore_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
||||
|
||||
vkCreateSemaphore((*m_device), &semaphore_info, nullptr, &m_present_semaphore);
|
||||
|
@ -808,20 +783,11 @@ void VKGSRender::write_buffers()
|
|||
|
||||
void VKGSRender::begin_command_buffer_recording()
|
||||
{
|
||||
VkCommandBufferInheritanceInfo inheritance_info;
|
||||
VkCommandBufferInheritanceInfo inheritance_info = {};
|
||||
inheritance_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
|
||||
inheritance_info.pNext = nullptr;
|
||||
inheritance_info.renderPass = VK_NULL_HANDLE;
|
||||
inheritance_info.subpass = 0;
|
||||
inheritance_info.framebuffer = VK_NULL_HANDLE;
|
||||
inheritance_info.occlusionQueryEnable = VK_FALSE;
|
||||
inheritance_info.queryFlags = 0;
|
||||
inheritance_info.pipelineStatistics = 0;
|
||||
|
||||
VkCommandBufferBeginInfo begin_infos;
|
||||
begin_infos.flags = 0;
|
||||
VkCommandBufferBeginInfo begin_infos = {};
|
||||
begin_infos.pInheritanceInfo = &inheritance_info;
|
||||
begin_infos.pNext = nullptr;
|
||||
begin_infos.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||
|
||||
if (m_submit_fence)
|
||||
|
@ -922,25 +888,18 @@ void VKGSRender::execute_command_buffer(bool wait)
|
|||
if (m_submit_fence)
|
||||
throw EXCEPTION("Synchronization deadlock!");
|
||||
|
||||
VkFenceCreateInfo fence_info;
|
||||
VkFenceCreateInfo fence_info = {};
|
||||
fence_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
||||
fence_info.flags = 0;
|
||||
fence_info.pNext = nullptr;
|
||||
|
||||
CHECK_RESULT(vkCreateFence(*m_device, &fence_info, nullptr, &m_submit_fence));
|
||||
|
||||
VkPipelineStageFlags pipe_stage_flags = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
|
||||
VkCommandBuffer cmd = m_command_buffer;
|
||||
|
||||
VkSubmitInfo infos;
|
||||
VkSubmitInfo infos = {};
|
||||
infos.commandBufferCount = 1;
|
||||
infos.pCommandBuffers = &cmd;
|
||||
infos.pNext = nullptr;
|
||||
infos.pSignalSemaphores = nullptr;
|
||||
infos.pWaitDstStageMask = &pipe_stage_flags;
|
||||
infos.signalSemaphoreCount = 0;
|
||||
infos.waitSemaphoreCount = 0;
|
||||
infos.pWaitSemaphores = nullptr;
|
||||
infos.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
||||
|
||||
CHECK_RESULT(vkQueueSubmit(m_swap_chain->get_present_queue(), 1, &infos, m_submit_fence));
|
||||
|
@ -989,7 +948,7 @@ void VKGSRender::flip(int buffer)
|
|||
VkSwapchainKHR swap_chain = (VkSwapchainKHR)(*m_swap_chain);
|
||||
uint32_t next_image_temp = 0;
|
||||
|
||||
VkPresentInfoKHR present;
|
||||
VkPresentInfoKHR present = {};
|
||||
present.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||
present.pNext = nullptr;
|
||||
present.swapchainCount = 1;
|
||||
|
|
|
@ -136,8 +136,7 @@ namespace vk
|
|||
if (g_null_sampler)
|
||||
return g_null_sampler;
|
||||
|
||||
VkSamplerCreateInfo sampler_info;
|
||||
memset(&sampler_info, 0, sizeof(sampler_info));
|
||||
VkSamplerCreateInfo sampler_info = {};
|
||||
|
||||
sampler_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
sampler_info.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
|
||||
|
@ -146,7 +145,6 @@ namespace vk
|
|||
sampler_info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST;
|
||||
sampler_info.anisotropyEnable = VK_FALSE;
|
||||
sampler_info.compareEnable = VK_FALSE;
|
||||
sampler_info.pNext = nullptr;
|
||||
sampler_info.unnormalizedCoordinates = VK_FALSE;
|
||||
sampler_info.mipLodBias = 0;
|
||||
sampler_info.maxAnisotropy = 0;
|
||||
|
@ -216,9 +214,8 @@ namespace vk
|
|||
VkImageSubresourceRange range = default_image_subresource_range();
|
||||
range.aspectMask = aspect_flags;
|
||||
|
||||
VkImageMemoryBarrier barrier;
|
||||
VkImageMemoryBarrier barrier = {};
|
||||
barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
||||
barrier.pNext = nullptr;
|
||||
barrier.newLayout = new_layout;
|
||||
barrier.oldLayout = current_layout;
|
||||
barrier.image = image;
|
||||
|
|
|
@ -384,15 +384,12 @@ namespace vk
|
|||
|
||||
owner = &dev;
|
||||
|
||||
VkBufferCreateInfo infos;
|
||||
infos.pNext = nullptr;
|
||||
VkBufferCreateInfo infos = {};
|
||||
infos.size = size;
|
||||
infos.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
||||
infos.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
infos.flags = flags;
|
||||
infos.usage = usage;
|
||||
infos.pQueueFamilyIndices = nullptr;
|
||||
infos.queueFamilyIndexCount = 0;
|
||||
|
||||
CHECK_RESULT(vkCreateBuffer(dev, &infos, nullptr, &m_buffer));
|
||||
|
||||
|
@ -503,12 +500,9 @@ namespace vk
|
|||
if (!(format_properties.bufferFeatures & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT))
|
||||
throw EXCEPTION("Can't map view to requested format");
|
||||
|
||||
VkBufferViewCreateInfo view_info;
|
||||
VkBufferViewCreateInfo view_info = {};
|
||||
view_info.buffer = m_buffer;
|
||||
view_info.flags = 0;
|
||||
view_info.format = format;
|
||||
view_info.offset = 0;
|
||||
view_info.pNext = nullptr;
|
||||
view_info.range = m_size;
|
||||
view_info.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
|
||||
|
||||
|
@ -552,12 +546,10 @@ namespace vk
|
|||
|
||||
void create(vk::render_device &dev, VkRenderPass pass, VkImageView *attachments, u32 nb_attachments, u32 width, u32 height)
|
||||
{
|
||||
VkFramebufferCreateInfo infos;
|
||||
VkFramebufferCreateInfo infos = {};
|
||||
infos.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
||||
infos.flags = 0;
|
||||
infos.width = width;
|
||||
infos.height = height;
|
||||
infos.pNext = nullptr;
|
||||
infos.attachmentCount = nb_attachments;
|
||||
infos.pAttachments = attachments;
|
||||
infos.renderPass = pass;
|
||||
|
@ -593,10 +585,9 @@ namespace vk
|
|||
|
||||
void create(vk::render_device &dev, VkImage &swap_image, VkFormat format)
|
||||
{
|
||||
VkImageViewCreateInfo color_image_view;
|
||||
VkImageViewCreateInfo color_image_view = {};
|
||||
|
||||
color_image_view.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
color_image_view.pNext = nullptr;
|
||||
color_image_view.format = format;
|
||||
|
||||
color_image_view.components.r = VK_COMPONENT_SWIZZLE_R;
|
||||
|
@ -611,7 +602,6 @@ namespace vk
|
|||
color_image_view.subresourceRange.layerCount = 1;
|
||||
|
||||
color_image_view.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
color_image_view.flags = 0;
|
||||
|
||||
color_image_view.image = swap_image;
|
||||
vkCreateImageView(dev, &color_image_view, nullptr, &view);
|
||||
|
@ -774,9 +764,8 @@ namespace vk
|
|||
if (surface_descriptors.supportedTransforms & VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR)
|
||||
pre_transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
|
||||
VkSwapchainCreateInfoKHR swap_info;
|
||||
VkSwapchainCreateInfoKHR swap_info = {};
|
||||
swap_info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
|
||||
swap_info.pNext = nullptr;
|
||||
swap_info.surface = m_surface;
|
||||
swap_info.minImageCount = nb_swap_images;
|
||||
swap_info.imageFormat = m_surface_format;
|
||||
|
@ -787,8 +776,6 @@ namespace vk
|
|||
swap_info.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
||||
swap_info.imageArrayLayers = 1;
|
||||
swap_info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
swap_info.queueFamilyIndexCount = 0;
|
||||
swap_info.pQueueFamilyIndices = nullptr;
|
||||
swap_info.presentMode = swapchain_present_mode;
|
||||
swap_info.oldSwapchain = old_swapchain;
|
||||
swap_info.clipped = true;
|
||||
|
@ -860,10 +847,8 @@ namespace vk
|
|||
void create(vk::render_device &dev)
|
||||
{
|
||||
owner = &dev;
|
||||
VkCommandPoolCreateInfo infos;
|
||||
VkCommandPoolCreateInfo infos = {};
|
||||
infos.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
|
||||
infos.pNext = nullptr;
|
||||
infos.queueFamilyIndex = 0;
|
||||
infos.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||
|
||||
CHECK_RESULT(vkCreateCommandPool(dev, &infos, nullptr, &pool));
|
||||
|
@ -900,12 +885,11 @@ namespace vk
|
|||
|
||||
void create(vk::command_pool &cmd_pool)
|
||||
{
|
||||
VkCommandBufferAllocateInfo infos;
|
||||
VkCommandBufferAllocateInfo infos = {};
|
||||
infos.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
||||
infos.commandBufferCount = 1;
|
||||
infos.commandPool = (VkCommandPool)cmd_pool;
|
||||
infos.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
|
||||
infos.pNext = nullptr;
|
||||
|
||||
CHECK_RESULT(vkAllocateCommandBuffers(cmd_pool.get_owner(), &infos, &commands));
|
||||
pool = &cmd_pool;
|
||||
|
@ -973,11 +957,9 @@ namespace vk
|
|||
createDebugReportCallback = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(m_instance, "vkCreateDebugReportCallbackEXT");
|
||||
destroyDebugReportCallback = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(m_instance, "vkDestroyDebugReportCallbackEXT");
|
||||
|
||||
VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
|
||||
VkDebugReportCallbackCreateInfoEXT dbgCreateInfo = {};
|
||||
dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
|
||||
dbgCreateInfo.pNext = NULL;
|
||||
dbgCreateInfo.pfnCallback = callback;
|
||||
dbgCreateInfo.pUserData = NULL;
|
||||
dbgCreateInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT;
|
||||
|
||||
CHECK_RESULT(createDebugReportCallback(m_instance, &dbgCreateInfo, NULL, &m_debugger));
|
||||
|
@ -986,10 +968,9 @@ namespace vk
|
|||
uint32_t createInstance(const char *app_name)
|
||||
{
|
||||
//Initialize a vulkan instance
|
||||
VkApplicationInfo app;
|
||||
VkApplicationInfo app = {};
|
||||
|
||||
app.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
|
||||
app.pNext = nullptr;
|
||||
app.pApplicationName = app_name;
|
||||
app.applicationVersion = 0;
|
||||
app.pEngineName = app_name;
|
||||
|
@ -1009,9 +990,8 @@ namespace vk
|
|||
if (rpcs3::config.rsx.d3d12.debug_output.value())
|
||||
layers.push_back("VK_LAYER_LUNARG_standard_validation");
|
||||
|
||||
VkInstanceCreateInfo instance_info;
|
||||
VkInstanceCreateInfo instance_info = {};
|
||||
instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||
instance_info.pNext = nullptr;
|
||||
instance_info.pApplicationInfo = &app;
|
||||
instance_info.enabledLayerCount = layers.size();
|
||||
instance_info.ppEnabledLayerNames = layers.data();
|
||||
|
@ -1078,10 +1058,8 @@ namespace vk
|
|||
#ifdef _WIN32
|
||||
vk::swap_chain* createSwapChain(HINSTANCE hInstance, HWND hWnd, vk::physical_device &dev)
|
||||
{
|
||||
VkWin32SurfaceCreateInfoKHR createInfo;
|
||||
VkWin32SurfaceCreateInfoKHR createInfo = {};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
|
||||
createInfo.pNext = NULL;
|
||||
createInfo.flags = 0;
|
||||
createInfo.hinstance = hInstance;
|
||||
createInfo.hwnd = hWnd;
|
||||
|
||||
|
@ -1180,10 +1158,9 @@ namespace vk
|
|||
|
||||
void create(vk::render_device &dev, VkDescriptorPoolSize *sizes, u32 size_descriptors_count)
|
||||
{
|
||||
VkDescriptorPoolCreateInfo infos;
|
||||
VkDescriptorPoolCreateInfo infos = {};
|
||||
infos.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT;
|
||||
infos.maxSets = 2;
|
||||
infos.pNext = nullptr;
|
||||
infos.poolSizeCount = size_descriptors_count;
|
||||
infos.pPoolSizes = sizes;
|
||||
infos.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
|
|
|
@ -47,8 +47,8 @@ namespace rsx
|
|||
rtt.change_layout(*cmd, VK_IMAGE_LAYOUT_GENERAL);
|
||||
|
||||
//Clear new surface..
|
||||
VkClearDepthStencilValue clear_depth;
|
||||
VkImageSubresourceRange range;
|
||||
VkClearDepthStencilValue clear_depth = {};
|
||||
VkImageSubresourceRange range = {};
|
||||
range.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
|
||||
range.baseArrayLayer = 0;
|
||||
range.baseMipLevel = 0;
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace vk
|
|||
{
|
||||
VkComponentMapping default_component_map()
|
||||
{
|
||||
VkComponentMapping result;
|
||||
VkComponentMapping result = {};
|
||||
result.a = VK_COMPONENT_SWIZZLE_A;
|
||||
result.r = VK_COMPONENT_SWIZZLE_R;
|
||||
result.g = VK_COMPONENT_SWIZZLE_G;
|
||||
|
@ -21,7 +21,7 @@ namespace vk
|
|||
|
||||
VkImageSubresource default_image_subresource()
|
||||
{
|
||||
VkImageSubresource subres;
|
||||
VkImageSubresource subres = {};
|
||||
subres.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subres.mipLevel = 0;
|
||||
subres.arrayLayer = 0;
|
||||
|
@ -31,7 +31,7 @@ namespace vk
|
|||
|
||||
VkImageSubresourceRange default_image_subresource_range()
|
||||
{
|
||||
VkImageSubresourceRange subres;
|
||||
VkImageSubresourceRange subres = {};
|
||||
subres.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subres.baseArrayLayer = 0;
|
||||
subres.baseMipLevel = 0;
|
||||
|
@ -43,7 +43,7 @@ namespace vk
|
|||
|
||||
void copy_image(VkCommandBuffer cmd, VkImage &src, VkImage &dst, VkImageLayout srcLayout, VkImageLayout dstLayout, u32 width, u32 height, u32 mipmaps, VkImageAspectFlagBits aspect)
|
||||
{
|
||||
VkImageSubresourceLayers a_src, a_dst;
|
||||
VkImageSubresourceLayers a_src = {}, a_dst = {};
|
||||
a_src.aspectMask = aspect;
|
||||
a_src.baseArrayLayer = 0;
|
||||
a_src.layerCount = 1;
|
||||
|
@ -51,7 +51,7 @@ namespace vk
|
|||
|
||||
a_dst = a_src;
|
||||
|
||||
VkImageCopy rgn;
|
||||
VkImageCopy rgn = {};
|
||||
rgn.extent.depth = 1;
|
||||
rgn.extent.width = width;
|
||||
rgn.extent.height = height;
|
||||
|
@ -83,7 +83,7 @@ namespace vk
|
|||
|
||||
void copy_scaled_image(VkCommandBuffer cmd, VkImage & src, VkImage & dst, VkImageLayout srcLayout, VkImageLayout dstLayout, u32 src_width, u32 src_height, u32 dst_width, u32 dst_height, u32 mipmaps, VkImageAspectFlagBits aspect)
|
||||
{
|
||||
VkImageSubresourceLayers a_src, a_dst;
|
||||
VkImageSubresourceLayers a_src = {}, a_dst = {};
|
||||
a_src.aspectMask = aspect;
|
||||
a_src.baseArrayLayer = 0;
|
||||
a_src.layerCount = 1;
|
||||
|
@ -91,7 +91,7 @@ namespace vk
|
|||
|
||||
a_dst = a_src;
|
||||
|
||||
VkImageBlit rgn;
|
||||
VkImageBlit rgn = {};
|
||||
rgn.srcOffsets[0] = { 0, 0, 0 };
|
||||
rgn.srcOffsets[1] = { (int32_t)src_width, (int32_t)src_height, 1 };
|
||||
rgn.dstOffsets[0] = { 0, 0, 0 };
|
||||
|
@ -143,11 +143,9 @@ namespace vk
|
|||
owner = &device;
|
||||
|
||||
//First create the image
|
||||
VkImageCreateInfo image_info;
|
||||
memset(&image_info, 0, sizeof(image_info));
|
||||
VkImageCreateInfo image_info = {};
|
||||
|
||||
image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
|
||||
image_info.pNext = nullptr;
|
||||
image_info.imageType = image_type;
|
||||
image_info.format = format;
|
||||
image_info.extent = { width, height, 1 };
|
||||
|
@ -166,15 +164,13 @@ namespace vk
|
|||
|
||||
CHECK_RESULT(vkBindImageMemory(device, m_image_contents, vram_allocation, 0));
|
||||
|
||||
VkImageViewCreateInfo view_info;
|
||||
VkImageViewCreateInfo view_info = {};
|
||||
view_info.format = format;
|
||||
view_info.image = m_image_contents;
|
||||
view_info.pNext = nullptr;
|
||||
view_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
view_info.viewType = view_type;
|
||||
view_info.components = swizzle;
|
||||
view_info.subresourceRange = default_image_subresource_range();
|
||||
view_info.flags = 0;
|
||||
|
||||
if (usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
|
||||
{
|
||||
|
@ -200,18 +196,16 @@ namespace vk
|
|||
VkSamplerAddressMode clamp_t = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
VkSamplerAddressMode clamp_r = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
|
||||
VkSamplerCreateInfo sampler_info;
|
||||
VkSamplerCreateInfo sampler_info = {};
|
||||
sampler_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
sampler_info.addressModeU = clamp_s;
|
||||
sampler_info.addressModeV = clamp_t;
|
||||
sampler_info.addressModeW = clamp_r;
|
||||
sampler_info.anisotropyEnable = VK_FALSE;
|
||||
sampler_info.compareEnable = VK_FALSE;
|
||||
sampler_info.pNext = nullptr;
|
||||
sampler_info.unnormalizedCoordinates = VK_FALSE;
|
||||
sampler_info.mipLodBias = 0;
|
||||
sampler_info.maxAnisotropy = 0;
|
||||
sampler_info.flags = 0;
|
||||
sampler_info.magFilter = VK_FILTER_LINEAR;
|
||||
sampler_info.minFilter = VK_FILTER_LINEAR;
|
||||
sampler_info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST;
|
||||
|
@ -325,18 +319,16 @@ namespace vk
|
|||
VkSamplerAddressMode clamp_t = vk_wrap_mode(tex.wrap_t());
|
||||
VkSamplerAddressMode clamp_r = vk_wrap_mode(tex.wrap_r());
|
||||
|
||||
VkSamplerCreateInfo sampler_info;
|
||||
VkSamplerCreateInfo sampler_info = {};
|
||||
sampler_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
sampler_info.addressModeU = clamp_s;
|
||||
sampler_info.addressModeV = clamp_t;
|
||||
sampler_info.addressModeW = clamp_r;
|
||||
sampler_info.anisotropyEnable = VK_TRUE;
|
||||
sampler_info.compareEnable = VK_FALSE;
|
||||
sampler_info.pNext = nullptr;
|
||||
sampler_info.unnormalizedCoordinates = !!(tex.format() & CELL_GCM_TEXTURE_UN);
|
||||
sampler_info.mipLodBias = tex.bias();
|
||||
sampler_info.maxAnisotropy = max_aniso(tex.max_aniso());
|
||||
sampler_info.flags = 0;
|
||||
sampler_info.maxLod = tex.max_lod();
|
||||
sampler_info.minLod = tex.min_lod();
|
||||
sampler_info.magFilter = VK_FILTER_LINEAR;
|
||||
|
@ -379,7 +371,7 @@ namespace vk
|
|||
if (!m_sampler)
|
||||
sampler_setup(tex, best_type, default_component_map());
|
||||
|
||||
VkImageSubresource subres;
|
||||
VkImageSubresource subres = {};
|
||||
subres.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subres.mipLevel = 0;
|
||||
subres.arrayLayer = 0;
|
||||
|
|
Loading…
Reference in a new issue