mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-07-01 17:55:23 +02:00
wip
This commit is contained in:
parent
58e2ebcffa
commit
6c63ef641d
4 changed files with 46 additions and 8 deletions
|
|
@ -61,6 +61,7 @@ set(SHADER_FILES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/smaa_neighborhood_blending.vert
|
${CMAKE_CURRENT_SOURCE_DIR}/smaa_neighborhood_blending.vert
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/smaa_neighborhood_blending.frag
|
${CMAKE_CURRENT_SOURCE_DIR}/smaa_neighborhood_blending.frag
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/ssaa.frag
|
${CMAKE_CURRENT_SOURCE_DIR}/ssaa.frag
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/ssaa.vert
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_blit_depth_stencil.frag
|
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_blit_depth_stencil.frag
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_color_clear.frag
|
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_color_clear.frag
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_color_clear.vert
|
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_color_clear.vert
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@
|
||||||
#define BINDING_COLOR_TEXTURE 0
|
#define BINDING_COLOR_TEXTURE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
layout (location = 0) in vec2 texcoord;
|
|
||||||
layout (location = 0) out vec4 frag_color;
|
layout (location = 0) out vec4 frag_color;
|
||||||
layout (binding = BINDING_COLOR_TEXTURE) uniform sampler2DMS input_texture;
|
layout (binding = BINDING_COLOR_TEXTURE) uniform sampler2DMS input_texture;
|
||||||
|
|
||||||
|
|
|
||||||
21
src/video_core/host_shaders/ssaa.vert
Normal file
21
src/video_core/host_shaders/ssaa.vert
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
#ifdef VULKAN
|
||||||
|
#define VERTEX_ID gl_VertexIndex
|
||||||
|
#define FLIPY 1
|
||||||
|
#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv
|
||||||
|
#define VERTEX_ID gl_VertexID
|
||||||
|
#define FLIPY -1
|
||||||
|
out gl_PerVertex {
|
||||||
|
vec4 gl_Position;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
float x = float((VERTEX_ID & 1) << 2);
|
||||||
|
float y = float((VERTEX_ID & 2) << 1);
|
||||||
|
gl_Position = vec4(x - 1.0, FLIPY * (y - 1.0), 0.0, 1.0);
|
||||||
|
}
|
||||||
|
|
@ -4,12 +4,13 @@
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
|
|
||||||
#include "video_core/host_shaders/ssaa_frag_spv.h"
|
#include "video_core/host_shaders/ssaa_frag_spv.h"
|
||||||
#include "video_core/host_shaders/full_screen_triangle_vert_spv.h"
|
#include "video_core/host_shaders/ssaa_vert_spv.h"
|
||||||
#include "video_core/renderer_vulkan/present/ssaa.h"
|
#include "video_core/renderer_vulkan/present/ssaa.h"
|
||||||
#include "video_core/renderer_vulkan/present/util.h"
|
#include "video_core/renderer_vulkan/present/util.h"
|
||||||
#include "video_core/renderer_vulkan/vk_scheduler.h"
|
#include "video_core/renderer_vulkan/vk_scheduler.h"
|
||||||
#include "video_core/renderer_vulkan/vk_shader_util.h"
|
#include "video_core/renderer_vulkan/vk_shader_util.h"
|
||||||
#include "video_core/vulkan_common/vulkan_device.h"
|
#include "video_core/vulkan_common/vulkan_device.h"
|
||||||
|
#include "vulkan/vulkan_core.h"
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
|
|
@ -33,16 +34,32 @@ SSAA::~SSAA() = default;
|
||||||
void SSAA::CreateImages() {
|
void SSAA::CreateImages() {
|
||||||
for (u32 i = 0; i < m_image_count; i++) {
|
for (u32 i = 0; i < m_image_count; i++) {
|
||||||
Image& image = m_dynamic_images.emplace_back();
|
Image& image = m_dynamic_images.emplace_back();
|
||||||
image.image = CreateWrappedImage(m_allocator, m_extent, VK_FORMAT_R16G16B16A16_SFLOAT);
|
image.image = m_allocator.CreateImage(VkImageCreateInfo{
|
||||||
image.image_view = CreateWrappedImageView(m_device, image.image, VK_FORMAT_R16G16B16A16_SFLOAT);
|
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
|
||||||
|
.pNext = nullptr,
|
||||||
|
.flags = 0,
|
||||||
|
.imageType = VK_IMAGE_TYPE_2D,
|
||||||
|
.format = VK_FORMAT_R8G8B8A8_UNORM,
|
||||||
|
.extent = {.width = m_extent.width, .height = m_extent.height, .depth = 1},
|
||||||
|
.mipLevels = 1,
|
||||||
|
.arrayLayers = 1,
|
||||||
|
.samples = VK_SAMPLE_COUNT_2_BIT,
|
||||||
|
.tiling = VK_IMAGE_TILING_OPTIMAL,
|
||||||
|
.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
|
||||||
|
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
||||||
|
.queueFamilyIndexCount = 0,
|
||||||
|
.pQueueFamilyIndices = nullptr,
|
||||||
|
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
|
||||||
|
});
|
||||||
|
image.image_view = CreateWrappedImageView(m_device, image.image, VK_FORMAT_R8G8B8A8_UNORM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSAA::CreateRenderPasses() {
|
void SSAA::CreateRenderPasses() {
|
||||||
const VkAttachmentDescription attachment{
|
const VkAttachmentDescription attachment{
|
||||||
.flags = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,
|
.flags = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,
|
||||||
.format = VK_FORMAT_R16G16B16A16_SFLOAT,
|
.format = VK_FORMAT_R8G8B8A8_UNORM,
|
||||||
.samples = VK_SAMPLE_COUNT_4_BIT,
|
.samples = VK_SAMPLE_COUNT_2_BIT,
|
||||||
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||||
.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||||
|
|
@ -96,7 +113,7 @@ void SSAA::CreateSampler() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSAA::CreateShaders() {
|
void SSAA::CreateShaders() {
|
||||||
m_vertex_shader = CreateWrappedShaderModule(m_device, FULL_SCREEN_TRIANGLE_VERT_SPV);
|
m_vertex_shader = CreateWrappedShaderModule(m_device, SSAA_VERT_SPV);
|
||||||
m_fragment_shader = CreateWrappedShaderModule(m_device, SSAA_FRAG_SPV);
|
m_fragment_shader = CreateWrappedShaderModule(m_device, SSAA_FRAG_SPV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -194,7 +211,7 @@ void SSAA::CreatePipelines() {
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
|
||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.rasterizationSamples = VK_SAMPLE_COUNT_4_BIT,
|
.rasterizationSamples = VK_SAMPLE_COUNT_2_BIT,
|
||||||
.sampleShadingEnable = Settings::values.sample_shading.GetValue() > 0 ? VK_TRUE : VK_FALSE,
|
.sampleShadingEnable = Settings::values.sample_shading.GetValue() > 0 ? VK_TRUE : VK_FALSE,
|
||||||
.minSampleShading = f32(Settings::values.sample_shading.GetValue()) / 100.0f,
|
.minSampleShading = f32(Settings::values.sample_shading.GetValue()) / 100.0f,
|
||||||
.pSampleMask = nullptr,
|
.pSampleMask = nullptr,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue