renderer_vulkan: Drop vk_pipeline.h/cpp
This commit is contained in:
@@ -81,8 +81,6 @@ add_library(video_core STATIC
|
||||
renderer_vulkan/vk_rasterizer_cache.h
|
||||
renderer_vulkan/vk_rasterizer.cpp
|
||||
renderer_vulkan/vk_rasterizer.h
|
||||
renderer_vulkan/vk_pipeline.cpp
|
||||
renderer_vulkan/vk_pipeline.h
|
||||
renderer_vulkan/vk_shader_state.h
|
||||
renderer_vulkan/vk_state.cpp
|
||||
renderer_vulkan/vk_state.h
|
||||
|
@@ -1,61 +0,0 @@
|
||||
// Copyright 2022 Citra Emulator Project
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "common/assert.h"
|
||||
#include "common/logging/log.h"
|
||||
#include "common/common_types.h"
|
||||
#include "video_core/renderer_vulkan/vk_pipeline.h"
|
||||
#include "video_core/renderer_vulkan/vk_instance.h"
|
||||
#include <shaderc/shaderc.hpp>
|
||||
|
||||
namespace Vulkan {
|
||||
|
||||
shaderc::Compiler compiler;
|
||||
|
||||
void VKPipeline::Info::AddShaderModule(const vk::ShaderModule& source, vk::ShaderStageFlagBits stage)
|
||||
{
|
||||
shaderc_shader_kind shader_stage;
|
||||
std::string name;
|
||||
switch (stage)
|
||||
{
|
||||
case vk::ShaderStageFlagBits::eVertex:
|
||||
shader_stage = shaderc_glsl_vertex_shader;
|
||||
name = "Vertex shader";
|
||||
break;
|
||||
case vk::ShaderStageFlagBits::eCompute:
|
||||
shader_stage = shaderc_glsl_compute_shader;
|
||||
name = "Compute shader";
|
||||
break;
|
||||
case vk::ShaderStageFlagBits::eFragment:
|
||||
shader_stage = shaderc_glsl_fragment_shader;
|
||||
name = "Fragment shader";
|
||||
break;
|
||||
default:
|
||||
LOG_CRITICAL(Render_Vulkan, "Unknown vulkan shader stage {}", stage);
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
shaderc::CompileOptions options;
|
||||
options.SetOptimizationLevel(shaderc_optimization_level_performance);
|
||||
options.SetAutoBindUniforms(true);
|
||||
options.SetAutoMapLocations(true);
|
||||
options.SetTargetEnvironment(shaderc_target_env_vulkan, shaderc_env_version_vulkan_1_2);
|
||||
|
||||
auto result = compiler.CompileGlslToSpv(source.c_str(), shader_stage, name.c_str(), options);
|
||||
if (result.GetCompilationStatus() != shaderc_compilation_status_success) {
|
||||
LOG_CRITICAL(Render_Vulkan, "Failed to compile GLSL shader with error: {}", result.GetErrorMessage());
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
auto shader_code = std::vector<uint32_t>{ result.cbegin(), result.cend() };
|
||||
|
||||
vk::ShaderModuleCreateInfo module_info({}, shader_code);
|
||||
auto module = g_vk_instace->GetDevice().createShaderModuleUnique(module_info);
|
||||
shader_stages.emplace_back(vk::PipelineShaderStageCreateFlags(), stage, module.get(), "main");
|
||||
|
||||
return std::move(module);
|
||||
}
|
||||
|
||||
|
||||
} // namespace Vulkan
|
@@ -1,48 +0,0 @@
|
||||
// Copyright 2022 Citra Emulator Project
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <utility>
|
||||
#include <variant>
|
||||
#include "video_core/renderer_vulkan/vk_texture.h"
|
||||
|
||||
namespace Vulkan {
|
||||
|
||||
using Resource = std::variant<VKBuffer, VKTexture>;
|
||||
|
||||
/// Vulkan pipeline objects represent a collection of shader modules
|
||||
class VKPipeline final : private NonCopyable {
|
||||
public:
|
||||
/// Includes all required information to build a Vulkan pipeline object
|
||||
class Info : private NonCopyable {
|
||||
Info() = default;
|
||||
~Info() = default;
|
||||
|
||||
/// Assign a shader module to a specific stage
|
||||
void AddShaderModule(const vk::ShaderModule& module, vk::ShaderStageFlagBits stage);
|
||||
|
||||
/// Add a texture or a buffer to the target descriptor set
|
||||
void AddResource(const Resource& resource, vk::DescriptorType type, vk::ShaderStageFlags stages, int set = 0);
|
||||
|
||||
private:
|
||||
using ResourceInfo = std::pair<std::reference_wrapper<Resource>, vk::DescriptorSetLayoutBinding>;
|
||||
|
||||
std::unordered_map<int, std::vector<ResourceInfo>> descriptor_sets;
|
||||
std::vector<vk::PipelineShaderStageCreateInfo> shader_stages;
|
||||
};
|
||||
|
||||
VKPipeline() = default;
|
||||
~VKPipeline() = default;
|
||||
|
||||
/// Create a new Vulkan pipeline object
|
||||
void Create(const Info& info);
|
||||
void Create(vk::PipelineLayoutCreateInfo layout_info);
|
||||
|
||||
private:
|
||||
vk::UniquePipeline pipeline;
|
||||
vk::UniquePipelineLayout pipeline_layout;
|
||||
};
|
||||
|
||||
} // namespace OpenGL
|
Reference in New Issue
Block a user