Skip to content

Commit

Permalink
vk: Refactor some uber-headers
Browse files Browse the repository at this point in the history
- VKHelpers was the rug everything was swept under for a long time.
  This commit essentially deprecates its usage across most of the backend.
  • Loading branch information
kd-11 committed Jan 9, 2021
1 parent a36f25c commit ff52854
Show file tree
Hide file tree
Showing 74 changed files with 3,917 additions and 3,745 deletions.
17 changes: 10 additions & 7 deletions rpcs3/Emu/CMakeLists.txt
Expand Up @@ -435,14 +435,17 @@ target_sources(rpcs3_emu PRIVATE

if(TARGET 3rdparty_vulkan)
target_sources(rpcs3_emu PRIVATE
RSX/VK/vkutils/buffer_view.cpp
RSX/VK/vkutils/barriers.cpp
RSX/VK/vkutils/buffer_object.cpp
RSX/VK/vkutils/chip_class.cpp
RSX/VK/vkutils/command_pool.cpp
RSX/VK/vkutils/fence.cpp
RSX/VK/vkutils/mem_allocator.cpp
RSX/VK/vkutils/memory_block.cpp
RSX/VK/vkutils/physical_device.cpp
RSX/VK/vkutils/render_device.cpp
RSX/VK/vkutils/commands.cpp
RSX/VK/vkutils/data_heap.cpp
RSX/VK/vkutils/image.cpp
RSX/VK/vkutils/image_helpers.cpp
RSX/VK/vkutils/scratch.cpp
RSX/VK/vkutils/sync.cpp
RSX/VK/vkutils/memory.cpp
RSX/VK/vkutils/device.cpp
RSX/VK/vkutils/sampler.cpp
RSX/VK/vkutils/shared.cpp
RSX/VK/VKCommandStream.cpp
Expand Down
2 changes: 1 addition & 1 deletion rpcs3/Emu/RSX/VK/VKCommandStream.cpp
@@ -1,6 +1,6 @@
#include "stdafx.h"
#include "VKCommandStream.h"
#include "vkutils/fence.h"
#include "vkutils/sync.h"
#include "Emu/IdManager.h"
#include "Emu/system_config.h"
#include "Emu/RSX/RSXOffload.h"
Expand Down
24 changes: 14 additions & 10 deletions rpcs3/Emu/RSX/VK/VKCompute.h
@@ -1,10 +1,14 @@
#pragma once
#include "VKHelpers.h"
#include "VKPipelineCompiler.h"
#include "VKRenderPass.h"
#include "vkutils/descriptors.hpp"
#include "Utilities/StrUtil.h"
#include "Emu/IdManager.h"

#include "VKPipelineCompiler.h"
#include "VKRenderPass.h"
#include "VKHelpers.h"
#include "vkutils/buffer_object.h"
#include "vkutils/device.h"

#include "util/asm.hpp"
#include <unordered_map>

Expand Down Expand Up @@ -65,14 +69,14 @@ namespace vk
}

// Reserve descriptor pools
m_descriptor_pool.create(*get_current_renderer(), descriptor_pool_sizes.data(), ::size32(descriptor_pool_sizes), VK_MAX_COMPUTE_TASKS, 3);
m_descriptor_pool.create(*g_render_device, descriptor_pool_sizes.data(), ::size32(descriptor_pool_sizes), VK_MAX_COMPUTE_TASKS, 3);

VkDescriptorSetLayoutCreateInfo infos = {};
infos.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
infos.pBindings = bindings.data();
infos.bindingCount = ::size32(bindings);

CHECK_RESULT(vkCreateDescriptorSetLayout(*get_current_renderer(), &infos, nullptr, &m_descriptor_layout));
CHECK_RESULT(vkCreateDescriptorSetLayout(*g_render_device, &infos, nullptr, &m_descriptor_layout));

VkPipelineLayoutCreateInfo layout_info = {};
layout_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
Expand All @@ -89,7 +93,7 @@ namespace vk
layout_info.pPushConstantRanges = &push_constants;
}

CHECK_RESULT(vkCreatePipelineLayout(*get_current_renderer(), &layout_info, nullptr, &m_pipeline_layout));
CHECK_RESULT(vkCreatePipelineLayout(*g_render_device, &layout_info, nullptr, &m_pipeline_layout));
}

void create()
Expand Down Expand Up @@ -123,7 +127,7 @@ namespace vk
break;
}

const auto& gpu = vk::get_current_renderer()->gpu();
const auto& gpu = vk::g_render_device->gpu();
max_invocations_x = gpu.get_limits().maxComputeWorkGroupCount[0];

initialized = true;
Expand All @@ -138,8 +142,8 @@ namespace vk
m_program.reset();
m_param_buffer.reset();

vkDestroyDescriptorSetLayout(*get_current_renderer(), m_descriptor_layout, nullptr);
vkDestroyPipelineLayout(*get_current_renderer(), m_pipeline_layout, nullptr);
vkDestroyDescriptorSetLayout(*g_render_device, m_descriptor_layout, nullptr);
vkDestroyPipelineLayout(*g_render_device, m_pipeline_layout, nullptr);
m_descriptor_pool.destroy();

initialized = false;
Expand Down Expand Up @@ -194,7 +198,7 @@ namespace vk
alloc_info.pSetLayouts = &m_descriptor_layout;
alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;

CHECK_RESULT(vkAllocateDescriptorSets(*get_current_renderer(), &alloc_info, &m_descriptor_set));
CHECK_RESULT(vkAllocateDescriptorSets(*g_render_device, &alloc_info, &m_descriptor_set));
m_used_descriptors++;

bind_resources();
Expand Down
10 changes: 6 additions & 4 deletions rpcs3/Emu/RSX/VK/VKDMA.cpp
@@ -1,7 +1,9 @@
#include "stdafx.h"
#include "VKHelpers.h"
#include "VKResourceManager.h"
#include "VKDMA.h"
#include "vkutils/device.h"

#include "Emu/Memory/vm.h"

#include "util/asm.hpp"
#include <unordered_map>
Expand Down Expand Up @@ -257,7 +259,7 @@ namespace vk
}

auto &block_info = g_dma_pool[first_block];
block_info.init(*vk::get_current_renderer(), first_block, s_dma_block_length);
block_info.init(*g_render_device, first_block, s_dma_block_length);
return block_info.get(map_range);
}

Expand Down Expand Up @@ -291,13 +293,13 @@ namespace vk
if (entry->end() < limit)
{
auto new_length = block_end - block_head->start();
block_head->extend(cmd, *vk::get_current_renderer(), new_length);
block_head->extend(cmd, *g_render_device, new_length);
}
}
else
{
auto required_size = (block_end - block);
block_head->init(*vk::get_current_renderer(), block, required_size);
block_head->init(*g_render_device, block, required_size);
}
}
else
Expand Down
11 changes: 2 additions & 9 deletions rpcs3/Emu/RSX/VK/VKDMA.h
@@ -1,16 +1,9 @@
#pragma once

namespace utils
{
class address_range;
}
#include "vkutils/buffer_object.h"
#include "vkutils/commands.h"

namespace vk
{
struct buffer;
class command_buffer;
class render_device;

std::pair<u32, vk::buffer*> map_dma(command_buffer& cmd, u32 local_address, u32 length);
void load_dma(u32 local_address, u32 length);
void flush_dma(u32 local_address, u32 length);
Expand Down
2 changes: 1 addition & 1 deletion rpcs3/Emu/RSX/VK/VKDraw.cpp
Expand Up @@ -2,7 +2,7 @@
#include "../Common/BufferUtils.h"
#include "../rsx_methods.h"
#include "VKGSRender.h"
#include "vkutils/buffer_view.h"
#include "vkutils/buffer_object.h"

namespace vk
{
Expand Down
3 changes: 2 additions & 1 deletion rpcs3/Emu/RSX/VK/VKFormats.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "VKFormats.h"
#include "VKHelpers.h"
#include "vkutils/device.h"
#include "vkutils/image.h"

namespace vk
{
Expand Down
4 changes: 3 additions & 1 deletion rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp
Expand Up @@ -2,6 +2,8 @@
#include "VKFragmentProgram.h"
#include "VKCommonDecompiler.h"
#include "VKHelpers.h"
#include "vkutils/device.h"
#include "Emu/system_config.h"
#include "../Common/GLSLCommon.h"
#include "../GCM.h"

Expand Down Expand Up @@ -369,7 +371,7 @@ void VKFragmentDecompilerThread::insertMainEnd(std::stringstream & OS)

void VKFragmentDecompilerThread::Task()
{
m_binding_table = vk::get_current_renderer()->get_pipeline_binding_table();
m_binding_table = vk::g_render_device->get_pipeline_binding_table();
m_shader = Decompile();
vk_prog->SetInputs(inputs);
}
Expand Down
7 changes: 5 additions & 2 deletions rpcs3/Emu/RSX/VK/VKFramebuffer.cpp
@@ -1,6 +1,9 @@
#include "stdafx.h"

#include "VKFramebuffer.h"
#include "vkutils/image.h"
#include "vkutils/image_helpers.h"

#include <unordered_map>

namespace vk
Expand All @@ -26,7 +29,7 @@ namespace vk
for (auto &e : image_list)
{
const VkImageSubresourceRange subres = { e->aspect(), 0, 1, 0, 1 };
image_views.push_back(std::make_unique<vk::image_view>(dev, e, VK_IMAGE_VIEW_TYPE_2D, vk::default_component_map(), subres));
image_views.push_back(std::make_unique<vk::image_view>(dev, e, VK_IMAGE_VIEW_TYPE_2D, vk::default_component_map, subres));
}

auto value = std::make_unique<vk::framebuffer_holder>(dev, renderpass, width, height, std::move(image_views));
Expand All @@ -52,7 +55,7 @@ namespace vk
VkImageSubresourceRange range = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 };
std::vector<std::unique_ptr<vk::image_view>> views;

views.push_back(std::make_unique<vk::image_view>(dev, attachment, VK_IMAGE_VIEW_TYPE_2D, format, vk::default_component_map(), range));
views.push_back(std::make_unique<vk::image_view>(dev, attachment, VK_IMAGE_VIEW_TYPE_2D, format, vk::default_component_map, range));
auto value = std::make_unique<vk::framebuffer_holder>(dev, renderpass, width, height, std::move(views));
auto ret = value.get();

Expand Down
2 changes: 1 addition & 1 deletion rpcs3/Emu/RSX/VK/VKFramebuffer.h
@@ -1,6 +1,6 @@
#pragma once

#include "VKHelpers.h"
#include "vkutils/framebuffer_object.hpp"

namespace vk
{
Expand Down
52 changes: 27 additions & 25 deletions rpcs3/Emu/RSX/VK/VKGSRender.cpp
Expand Up @@ -2,12 +2,16 @@
#include "../Overlays/overlay_shader_compile_notification.h"
#include "../Overlays/Shaders/shader_loading_dialog_native.h"
#include "VKGSRender.h"
#include "VKHelpers.h"
#include "VKCommonDecompiler.h"
#include "VKCompute.h"
#include "VKRenderPass.h"
#include "VKResourceManager.h"
#include "VKCommandStream.h"
#include "vkutils/buffer_view.h"

#include "vkutils/buffer_object.h"
#include "vkutils/scratch.h"

#include "Emu/RSX/rsx_methods.h"
#include "Emu/Memory/vm_locking.h"

Expand All @@ -27,13 +31,13 @@ namespace vk
switch (color_format)
{
case rsx::surface_color_format::r5g6b5:
return std::make_pair(VK_FORMAT_R5G6B5_UNORM_PACK16, vk::default_component_map());
return std::make_pair(VK_FORMAT_R5G6B5_UNORM_PACK16, vk::default_component_map);

case rsx::surface_color_format::a8r8g8b8:
return std::make_pair(VK_FORMAT_B8G8R8A8_UNORM, vk::default_component_map());
return std::make_pair(VK_FORMAT_B8G8R8A8_UNORM, vk::default_component_map);

case rsx::surface_color_format::a8b8g8r8:
return std::make_pair(VK_FORMAT_R8G8B8A8_UNORM, vk::default_component_map());
return std::make_pair(VK_FORMAT_R8G8B8A8_UNORM, vk::default_component_map);

case rsx::surface_color_format::x8b8g8r8_o8b8g8r8:
return std::make_pair(VK_FORMAT_R8G8B8A8_UNORM, o_rgb);
Expand All @@ -48,10 +52,10 @@ namespace vk
return std::make_pair(VK_FORMAT_B8G8R8A8_UNORM, o_rgb);

case rsx::surface_color_format::w16z16y16x16:
return std::make_pair(VK_FORMAT_R16G16B16A16_SFLOAT, vk::default_component_map());
return std::make_pair(VK_FORMAT_R16G16B16A16_SFLOAT, vk::default_component_map);

case rsx::surface_color_format::w32z32y32x32:
return std::make_pair(VK_FORMAT_R32G32B32A32_SFLOAT, vk::default_component_map());
return std::make_pair(VK_FORMAT_R32G32B32A32_SFLOAT, vk::default_component_map);

case rsx::surface_color_format::x1r5g5b5_o1r5g5b5:
return std::make_pair(VK_FORMAT_A1R5G5B5_UNORM_PACK16, o_rgb);
Expand Down Expand Up @@ -79,7 +83,7 @@ namespace vk

default:
rsx_log.error("Surface color buffer: Unsupported surface color format (0x%x)", static_cast<u32>(color_format));
return std::make_pair(VK_FORMAT_B8G8R8A8_UNORM, vk::default_component_map());
return std::make_pair(VK_FORMAT_B8G8R8A8_UNORM, vk::default_component_map);
}
}

Expand Down Expand Up @@ -323,9 +327,9 @@ u64 VKGSRender::get_cycles()

VKGSRender::VKGSRender() : GSRender()
{
if (m_thread_context.createInstance("RPCS3"))
if (m_instance.create("RPCS3"))
{
m_thread_context.makeCurrentInstance();
m_instance.bind();
}
else
{
Expand All @@ -334,7 +338,7 @@ VKGSRender::VKGSRender() : GSRender()
return;
}

std::vector<vk::physical_device>& gpus = m_thread_context.enumerateDevices();
std::vector<vk::physical_device>& gpus = m_instance.enumerate_devices();

//Actually confirm that the loader found at least one compatible device
//This should not happen unless something is wrong with the driver setup on the target system
Expand Down Expand Up @@ -365,15 +369,15 @@ VKGSRender::VKGSRender() : GSRender()
{
if (gpu.get_name() == adapter_name)
{
m_swapchain.reset(m_thread_context.createSwapChain(display, gpu));
m_swapchain.reset(m_instance.create_swapchain(display, gpu));
gpu_found = true;
break;
}
}

if (!gpu_found || adapter_name.empty())
{
m_swapchain.reset(m_thread_context.createSwapChain(display, gpus[0]));
m_swapchain.reset(m_instance.create_swapchain(display, gpus[0]));
}

if (!m_swapchain)
Expand All @@ -384,8 +388,6 @@ VKGSRender::VKGSRender() : GSRender()
}

m_device = const_cast<vk::render_device*>(&m_swapchain->get_device());

vk::set_current_thread_ctx(m_thread_context);
vk::set_current_renderer(m_swapchain->get_device());

m_swapchain_dims.width = m_frame->client_width();
Expand Down Expand Up @@ -640,7 +642,7 @@ VKGSRender::~VKGSRender()

//Device handles/contexts
m_swapchain->destroy();
m_thread_context.close();
m_instance.destroy();

#if defined(HAVE_X11) && defined(HAVE_VULKAN)
if (m_display_handle)
Expand Down Expand Up @@ -1923,16 +1925,16 @@ void VKGSRender::close_and_submit_command_buffer(vk::fence* pFence, VkSemaphore

if (vk::test_status_interrupt(vk::heap_dirty))
{
if (m_attrib_ring_info.dirty() ||
m_fragment_env_ring_info.dirty() ||
m_vertex_env_ring_info.dirty() ||
m_fragment_texture_params_ring_info.dirty() ||
m_vertex_layout_ring_info.dirty() ||
m_fragment_constants_ring_info.dirty() ||
m_index_buffer_ring_info.dirty() ||
m_transform_constants_ring_info.dirty() ||
m_texture_upload_buffer_ring_info.dirty() ||
m_raster_env_ring_info.dirty())
if (m_attrib_ring_info.is_dirty() ||
m_fragment_env_ring_info.is_dirty() ||
m_vertex_env_ring_info.is_dirty() ||
m_fragment_texture_params_ring_info.is_dirty() ||
m_vertex_layout_ring_info.is_dirty() ||
m_fragment_constants_ring_info.is_dirty() ||
m_index_buffer_ring_info.is_dirty() ||
m_transform_constants_ring_info.is_dirty() ||
m_texture_upload_buffer_ring_info.is_dirty() ||
m_raster_env_ring_info.is_dirty())
{
std::lock_guard lock(m_secondary_cb_guard);
m_secondary_command_buffer.begin();
Expand Down

0 comments on commit ff52854

Please sign in to comment.