renderer_vulkan: 2D shapes demo fully functional now
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
// Licensed under GPLv2 or any later version
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
//#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
@@ -520,7 +521,7 @@ void RendererVulkan::DrawScreens(const Layout::FramebufferLayout& layout, bool f
|
|||||||
// Set projection matrix
|
// Set projection matrix
|
||||||
draw_info.modelview = glm::transpose(glm::ortho(0.f, static_cast<float>(layout.width),
|
draw_info.modelview = glm::transpose(glm::ortho(0.f, static_cast<float>(layout.width),
|
||||||
static_cast<float>(layout.height), 0.0f,
|
static_cast<float>(layout.height), 0.0f,
|
||||||
0.f, 1.f));
|
-1.f, 1.f));
|
||||||
const bool stereo_single_screen = false
|
const bool stereo_single_screen = false
|
||||||
/* Settings::values.render_3d == Settings::StereoRenderOption::Anaglyph ||
|
/* Settings::values.render_3d == Settings::StereoRenderOption::Anaglyph ||
|
||||||
Settings::values.render_3d == Settings::StereoRenderOption::Interlaced ||
|
Settings::values.render_3d == Settings::StereoRenderOption::Interlaced ||
|
||||||
@@ -722,14 +723,11 @@ VideoCore::ResultStatus RendererVulkan::Init() {
|
|||||||
auto instance = vk::createInstance(instance_info);
|
auto instance = vk::createInstance(instance_info);
|
||||||
auto physical_devices = instance.enumeratePhysicalDevices();
|
auto physical_devices = instance.enumeratePhysicalDevices();
|
||||||
|
|
||||||
auto props = physical_devices[1].getProperties();
|
|
||||||
std::cout << props.deviceName << '\n';
|
|
||||||
|
|
||||||
// Create global instance
|
// Create global instance
|
||||||
auto surface = CreateSurface(instance, render_window);
|
auto surface = CreateSurface(instance, render_window);
|
||||||
g_vk_instace = std::make_unique<VKInstance>();
|
g_vk_instace = std::make_unique<VKInstance>();
|
||||||
g_vk_task_scheduler = std::make_unique<VKTaskScheduler>();
|
g_vk_task_scheduler = std::make_unique<VKTaskScheduler>();
|
||||||
g_vk_instace->Create(instance, physical_devices[1], surface, true);
|
g_vk_instace->Create(instance, physical_devices[0], surface, true);
|
||||||
g_vk_task_scheduler->Create();
|
g_vk_task_scheduler->Create();
|
||||||
|
|
||||||
//auto& layout = render_window.GetFramebufferLayout();
|
//auto& layout = render_window.GetFramebufferLayout();
|
||||||
|
@@ -188,7 +188,7 @@ void PipelineBuilder::SetBlendConstants(float r, float g, float b, float a) {
|
|||||||
|
|
||||||
void PipelineBuilder::SetBlendLogicOp(vk::LogicOp logic_op) {
|
void PipelineBuilder::SetBlendLogicOp(vk::LogicOp logic_op) {
|
||||||
blend_state.logicOp = logic_op;
|
blend_state.logicOp = logic_op;
|
||||||
blend_state.logicOpEnable = true;
|
blend_state.logicOpEnable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PipelineBuilder::SetBlendAttachment(bool blend_enable, vk::BlendFactor src_factor, vk::BlendFactor dst_factor,
|
void PipelineBuilder::SetBlendAttachment(bool blend_enable, vk::BlendFactor src_factor, vk::BlendFactor dst_factor,
|
||||||
|
@@ -70,7 +70,6 @@ layout (set = 0, binding = 0) uniform sampler2D screen_textures[3];
|
|||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
color = texture(screen_textures[int(frag_tex_coord.z)], frag_tex_coord.xy);
|
color = texture(screen_textures[int(frag_tex_coord.z)], frag_tex_coord.xy);
|
||||||
//color = vec4(0.5, 0.0, 0.5, 1.0);
|
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
|
|
||||||
@@ -1656,10 +1655,10 @@ void main() {
|
|||||||
texcoord0_w = vert_texcoord0_w;
|
texcoord0_w = vert_texcoord0_w;
|
||||||
normquat = vert_normquat;
|
normquat = vert_normquat;
|
||||||
view = vert_view;
|
view = vert_view;
|
||||||
gl_Position = vert_position;
|
gl_Position = vert_position + vec4(0.0, 0.0, 1.0, 0.0);
|
||||||
#if !defined(CITRA_GLES) || defined(GL_EXT_clip_cull_distance)
|
#if !defined(CITRA_GLES) || defined(GL_EXT_clip_cull_distance)
|
||||||
gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0
|
//gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0
|
||||||
gl_ClipDistance[1] = dot(clip_coef, vert_position);
|
//gl_ClipDistance[1] = dot(clip_coef, vert_position);
|
||||||
#endif // !defined(CITRA_GLES) || defined(GL_EXT_clip_cull_distance)
|
#endif // !defined(CITRA_GLES) || defined(GL_EXT_clip_cull_distance)
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
@@ -1670,7 +1669,7 @@ void main() {
|
|||||||
vk::ShaderModule CompileShader(const std::string& source, vk::ShaderStageFlagBits stage) {
|
vk::ShaderModule CompileShader(const std::string& source, vk::ShaderStageFlagBits stage) {
|
||||||
shaderc::Compiler compiler;
|
shaderc::Compiler compiler;
|
||||||
shaderc::CompileOptions options;
|
shaderc::CompileOptions options;
|
||||||
options.SetOptimizationLevel(shaderc_optimization_level_performance);
|
options.SetOptimizationLevel(shaderc_optimization_level_zero);
|
||||||
options.SetTargetEnvironment(shaderc_target_env_vulkan, shaderc_env_version_vulkan_1_1);
|
options.SetTargetEnvironment(shaderc_target_env_vulkan, shaderc_env_version_vulkan_1_1);
|
||||||
options.SetWarningsAsErrors();
|
options.SetWarningsAsErrors();
|
||||||
options.SetSourceLanguage(shaderc_source_language_glsl);
|
options.SetSourceLanguage(shaderc_source_language_glsl);
|
||||||
|
@@ -461,7 +461,7 @@ void VulkanState::ApplyRenderState(const Pica::Regs& regs) {
|
|||||||
render_pipeline_builder.SetBlendAttachment(att.blendEnable, att.srcColorBlendFactor, att.dstColorBlendFactor,
|
render_pipeline_builder.SetBlendAttachment(att.blendEnable, att.srcColorBlendFactor, att.dstColorBlendFactor,
|
||||||
att.colorBlendOp, att.srcAlphaBlendFactor, att.dstAlphaBlendFactor,
|
att.colorBlendOp, att.srcAlphaBlendFactor, att.dstAlphaBlendFactor,
|
||||||
att.alphaBlendOp, att.colorWriteMask);
|
att.alphaBlendOp, att.colorWriteMask);
|
||||||
|
std::cout << "New pipeline!\n";
|
||||||
// Cache the resulted pipeline
|
// Cache the resulted pipeline
|
||||||
pipeline = render_pipeline_builder.Build();
|
pipeline = render_pipeline_builder.Build();
|
||||||
render_pipelines.emplace(render_pipeline_key, vk::UniquePipeline{pipeline});
|
render_pipelines.emplace(render_pipeline_key, vk::UniquePipeline{pipeline});
|
||||||
|
@@ -40,7 +40,7 @@ bool VKSwapChain::Create(u32 width, u32 height, bool vsync_enabled) {
|
|||||||
vk::SwapchainCreateInfoKHR swapchain_info{{}, surface, details.image_count, details.format.format,
|
vk::SwapchainCreateInfoKHR swapchain_info{{}, surface, details.image_count, details.format.format,
|
||||||
details.format.colorSpace, details.extent, 1, vk::ImageUsageFlagBits::eColorAttachment,
|
details.format.colorSpace, details.extent, 1, vk::ImageUsageFlagBits::eColorAttachment,
|
||||||
vk::SharingMode::eExclusive, 1, indices.data(), details.transform,
|
vk::SharingMode::eExclusive, 1, indices.data(), details.transform,
|
||||||
vk::CompositeAlphaFlagBitsKHR::eOpaque, details.present_mode, true, VK_NULL_HANDLE};
|
vk::CompositeAlphaFlagBitsKHR::eOpaque, details.present_mode, true, swapchain};
|
||||||
|
|
||||||
// For dedicated present queues, select concurrent sharing mode
|
// For dedicated present queues, select concurrent sharing mode
|
||||||
if (indices[0] != indices[1]) {
|
if (indices[0] != indices[1]) {
|
||||||
|
Reference in New Issue
Block a user