Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
2855c5414c | ||
|
a17ada2b2a | ||
|
69e758d738 | ||
|
f4768cd26c | ||
|
e0d2c1308e |
17
.github/workflows/build.yml
vendored
17
.github/workflows/build.yml
vendored
@@ -81,7 +81,7 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-${{ matrix.target }}-
|
${{ runner.os }}-${{ matrix.target }}-
|
||||||
- name: Install tools
|
- name: Install tools
|
||||||
run: brew install ccache glslang ninja
|
run: brew install ccache ninja
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./.ci/macos.sh
|
run: ./.ci/macos.sh
|
||||||
- name: Prepare outputs for caching
|
- name: Prepare outputs for caching
|
||||||
@@ -153,13 +153,6 @@ jobs:
|
|||||||
- name: Install extra tools (MSVC)
|
- name: Install extra tools (MSVC)
|
||||||
run: choco install ccache ninja wget
|
run: choco install ccache ninja wget
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
- name: Set up Vulkan SDK (MSVC)
|
|
||||||
uses: humbletim/setup-vulkan-sdk@v1.2.0
|
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
|
||||||
with:
|
|
||||||
vulkan-query-version: latest
|
|
||||||
vulkan-components: SPIRV-Tools, Glslang
|
|
||||||
vulkan-use-cache: true
|
|
||||||
- name: Set up MSYS2
|
- name: Set up MSYS2
|
||||||
uses: msys2/setup-msys2@v2
|
uses: msys2/setup-msys2@v2
|
||||||
if: ${{ matrix.target == 'msys2' }}
|
if: ${{ matrix.target == 'msys2' }}
|
||||||
@@ -168,10 +161,8 @@ jobs:
|
|||||||
update: true
|
update: true
|
||||||
install: git make p7zip
|
install: git make p7zip
|
||||||
pacboy: >-
|
pacboy: >-
|
||||||
toolchain:p ccache:p cmake:p ninja:p glslang:p
|
toolchain:p ccache:p cmake:p ninja:p
|
||||||
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
|
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
|
||||||
- name: Test glslang
|
|
||||||
run: glslang --version || glslangValidator --version
|
|
||||||
- name: Disable line ending translation
|
- name: Disable line ending translation
|
||||||
run: git config --global core.autocrlf input
|
run: git config --global core.autocrlf input
|
||||||
- name: Build
|
- name: Build
|
||||||
@@ -215,7 +206,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
sudo add-apt-repository -y ppa:theofficialgman/gpu-tools
|
sudo add-apt-repository -y ppa:theofficialgman/gpu-tools
|
||||||
sudo apt-get update -y
|
sudo apt-get update -y
|
||||||
sudo apt-get install ccache glslang-dev glslang-tools apksigner -y
|
sudo apt-get install ccache apksigner -y
|
||||||
- name: Build
|
- name: Build
|
||||||
run: JAVA_HOME=$JAVA_HOME_17_X64 ./.ci/android.sh
|
run: JAVA_HOME=$JAVA_HOME_17_X64 ./.ci/android.sh
|
||||||
env:
|
env:
|
||||||
@@ -253,7 +244,7 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-ios-
|
${{ runner.os }}-ios-
|
||||||
- name: Install tools
|
- name: Install tools
|
||||||
run: brew install ccache glslang ninja
|
run: brew install ccache ninja
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./.ci/ios.sh
|
run: ./.ci/ios.sh
|
||||||
release:
|
release:
|
||||||
|
@@ -451,7 +451,7 @@ void SetColorConsoleBackendEnabled(bool enabled) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FmtLogMessageImpl(Class log_class, Level log_level, const char* filename,
|
void FmtLogMessageImpl(Class log_class, Level log_level, const char* filename,
|
||||||
unsigned int line_num, const char* function, const char* format,
|
unsigned int line_num, const char* function, fmt::string_view format,
|
||||||
const fmt::format_args& args) {
|
const fmt::format_args& args) {
|
||||||
if (!initialization_in_progress_suppress_logging) {
|
if (!initialization_in_progress_suppress_logging) {
|
||||||
Impl::Instance().PushEntry(log_class, log_level, filename, line_num, function,
|
Impl::Instance().PushEntry(log_class, log_level, filename, line_num, function,
|
||||||
|
@@ -24,12 +24,12 @@ constexpr const char* TrimSourcePath(std::string_view source) {
|
|||||||
|
|
||||||
/// Logs a message to the global logger, using fmt
|
/// Logs a message to the global logger, using fmt
|
||||||
void FmtLogMessageImpl(Class log_class, Level log_level, const char* filename,
|
void FmtLogMessageImpl(Class log_class, Level log_level, const char* filename,
|
||||||
unsigned int line_num, const char* function, const char* format,
|
unsigned int line_num, const char* function, fmt::string_view format,
|
||||||
const fmt::format_args& args);
|
const fmt::format_args& args);
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
void FmtLogMessage(Class log_class, Level log_level, const char* filename, unsigned int line_num,
|
void FmtLogMessage(Class log_class, Level log_level, const char* filename, unsigned int line_num,
|
||||||
const char* function, const char* format, const Args&... args) {
|
const char* function, fmt::format_string<Args...> format, const Args&... args) {
|
||||||
FmtLogMessageImpl(log_class, log_level, filename, line_num, function, format,
|
FmtLogMessageImpl(log_class, log_level, filename, line_num, function, format,
|
||||||
fmt::make_format_args(args...));
|
fmt::make_format_args(args...));
|
||||||
}
|
}
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#include "common/archives.h"
|
#include "common/archives.h"
|
||||||
#include "common/common_funcs.h"
|
#include "common/common_funcs.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
#include "common/scope_exit.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "core/hle/ipc_helpers.h"
|
#include "core/hle/ipc_helpers.h"
|
||||||
#include "core/hle/kernel/event.h"
|
#include "core/hle/kernel/event.h"
|
||||||
@@ -522,7 +523,13 @@ void Y2R_U::StartConversion(Kernel::HLERequestContext& ctx) {
|
|||||||
|
|
||||||
HW::Y2R::PerformConversion(system.Memory(), conversion);
|
HW::Y2R::PerformConversion(system.Memory(), conversion);
|
||||||
|
|
||||||
completion_event->Signal();
|
if (is_busy_conversion) {
|
||||||
|
system.CoreTiming().RemoveEvent(completion_signal_event);
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr s64 MinY2RDelay = 50000;
|
||||||
|
system.CoreTiming().ScheduleEvent(MinY2RDelay, completion_signal_event);
|
||||||
|
is_busy_conversion = true;
|
||||||
|
|
||||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
@@ -533,6 +540,10 @@ void Y2R_U::StartConversion(Kernel::HLERequestContext& ctx) {
|
|||||||
void Y2R_U::StopConversion(Kernel::HLERequestContext& ctx) {
|
void Y2R_U::StopConversion(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp(ctx);
|
IPC::RequestParser rp(ctx);
|
||||||
|
|
||||||
|
if (is_busy_conversion) {
|
||||||
|
system.CoreTiming().RemoveEvent(completion_signal_event);
|
||||||
|
}
|
||||||
|
|
||||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
|
|
||||||
@@ -544,7 +555,7 @@ void Y2R_U::IsBusyConversion(Kernel::HLERequestContext& ctx) {
|
|||||||
|
|
||||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
rb.Push<u8>(0); // StartConversion always finishes immediately
|
rb.Push(is_busy_conversion);
|
||||||
|
|
||||||
LOG_DEBUG(Service_Y2R, "called");
|
LOG_DEBUG(Service_Y2R, "called");
|
||||||
}
|
}
|
||||||
@@ -558,34 +569,38 @@ void Y2R_U::SetPackageParameter(Kernel::HLERequestContext& ctx) {
|
|||||||
conversion.rotation = params.rotation;
|
conversion.rotation = params.rotation;
|
||||||
conversion.block_alignment = params.block_alignment;
|
conversion.block_alignment = params.block_alignment;
|
||||||
|
|
||||||
Result result = conversion.SetInputLineWidth(params.input_line_width);
|
|
||||||
|
|
||||||
if (result.IsError())
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
result = conversion.SetInputLines(params.input_lines);
|
|
||||||
|
|
||||||
if (result.IsError())
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
result = conversion.SetStandardCoefficient(params.standard_coefficient);
|
|
||||||
|
|
||||||
if (result.IsError())
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
conversion.padding = params.padding;
|
|
||||||
conversion.alpha = params.alpha;
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
|
||||||
rb.Push(result);
|
|
||||||
|
|
||||||
LOG_DEBUG(Service_Y2R,
|
LOG_DEBUG(Service_Y2R,
|
||||||
"called input_format={} output_format={} rotation={} block_alignment={} "
|
"called input_format={} output_format={} rotation={} block_alignment={} "
|
||||||
"input_line_width={} input_lines={} standard_coefficient={} reserved={} alpha={:X}",
|
"input_line_width={} input_lines={} standard_coefficient={} reserved={} alpha={:X}",
|
||||||
params.input_format, params.output_format, params.rotation, params.block_alignment,
|
params.input_format, params.output_format, params.rotation, params.block_alignment,
|
||||||
params.input_line_width, params.input_lines, params.standard_coefficient,
|
params.input_line_width, params.input_lines, params.standard_coefficient,
|
||||||
params.padding, params.alpha);
|
params.padding, params.alpha);
|
||||||
|
|
||||||
|
auto result = conversion.SetInputLineWidth(params.input_line_width);
|
||||||
|
|
||||||
|
SCOPE_EXIT({
|
||||||
|
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||||
|
rb.Push(result);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result.IsError()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = conversion.SetInputLines(params.input_lines);
|
||||||
|
|
||||||
|
if (result.IsError()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = conversion.SetStandardCoefficient(params.standard_coefficient);
|
||||||
|
|
||||||
|
if (result.IsError()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
conversion.padding = params.padding;
|
||||||
|
conversion.alpha = params.alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Y2R_U::PingProcess(Kernel::HLERequestContext& ctx) {
|
void Y2R_U::PingProcess(Kernel::HLERequestContext& ctx) {
|
||||||
@@ -697,6 +712,11 @@ Y2R_U::Y2R_U(Core::System& system) : ServiceFramework("y2r:u", 1), system(system
|
|||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
completion_event = system.Kernel().CreateEvent(Kernel::ResetType::OneShot, "Y2R:Completed");
|
completion_event = system.Kernel().CreateEvent(Kernel::ResetType::OneShot, "Y2R:Completed");
|
||||||
|
completion_signal_event =
|
||||||
|
system.CoreTiming().RegisterEvent("Y2R Completion Signal Event", [this](uintptr_t, s64) {
|
||||||
|
completion_event->Signal();
|
||||||
|
is_busy_conversion = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Y2R_U::~Y2R_U() = default;
|
Y2R_U::~Y2R_U() = default;
|
||||||
|
@@ -349,11 +349,13 @@ private:
|
|||||||
Core::System& system;
|
Core::System& system;
|
||||||
|
|
||||||
std::shared_ptr<Kernel::Event> completion_event;
|
std::shared_ptr<Kernel::Event> completion_event;
|
||||||
|
Core::TimingEventType* completion_signal_event;
|
||||||
ConversionConfiguration conversion{};
|
ConversionConfiguration conversion{};
|
||||||
DitheringWeightParams dithering_weight_params{};
|
DitheringWeightParams dithering_weight_params{};
|
||||||
bool temporal_dithering_enabled = false;
|
bool temporal_dithering_enabled = false;
|
||||||
bool transfer_end_interrupt_enabled = false;
|
bool transfer_end_interrupt_enabled = false;
|
||||||
bool spacial_dithering_enabled = false;
|
bool spacial_dithering_enabled = false;
|
||||||
|
bool is_busy_conversion = false;
|
||||||
|
|
||||||
template <class Archive>
|
template <class Archive>
|
||||||
void serialize(Archive& ar, const unsigned int);
|
void serialize(Archive& ar, const unsigned int);
|
||||||
|
@@ -1014,8 +1014,8 @@ void SOC_U::Accept(Kernel::HLERequestContext& ctx) {
|
|||||||
ctr_addr_buf.resize(async_data->max_addr_len);
|
ctr_addr_buf.resize(async_data->max_addr_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG(Service_SOC, "called, pid={}, fd={}, ret={}", async_data->socket_handle,
|
LOG_DEBUG(Service_SOC, "called, pid={}, fd={}, ret={}", async_data->pid,
|
||||||
static_cast<s32>(async_data->ret));
|
async_data->socket_handle, static_cast<s32>(async_data->ret));
|
||||||
|
|
||||||
IPC::RequestBuilder rb(ctx, 0x04, 2, 2);
|
IPC::RequestBuilder rb(ctx, 0x04, 2, 2);
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
|
@@ -152,6 +152,7 @@ static void SaveBanList(const Network::Room::BanList& ban_list, const std::strin
|
|||||||
static void InitializeLogging(const std::string& log_file) {
|
static void InitializeLogging(const std::string& log_file) {
|
||||||
Common::Log::Initialize(log_file);
|
Common::Log::Initialize(log_file);
|
||||||
Common::Log::SetColorConsoleBackendEnabled(true);
|
Common::Log::SetColorConsoleBackendEnabled(true);
|
||||||
|
Common::Log::Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Application entry point
|
/// Application entry point
|
||||||
|
@@ -26,17 +26,6 @@ set(SHADER_FILES
|
|||||||
vulkan_blit_depth_stencil.frag
|
vulkan_blit_depth_stencil.frag
|
||||||
)
|
)
|
||||||
|
|
||||||
find_program(GLSLANG "glslang")
|
|
||||||
if ("${GLSLANG}" STREQUAL "GLSLANG-NOTFOUND")
|
|
||||||
find_program(GLSLANG "glslangValidator")
|
|
||||||
if ("${GLSLANG}" STREQUAL "GLSLANG-NOTFOUND")
|
|
||||||
message(FATAL_ERROR "Required program `glslang` (or `glslangValidator`) not found.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(MACROS "-Dgl_VertexID=gl_VertexIndex")
|
|
||||||
set(QUIET_FLAG "--quiet")
|
|
||||||
|
|
||||||
set(SHADER_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/include)
|
set(SHADER_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/include)
|
||||||
set(SHADER_DIR ${SHADER_INCLUDE}/video_core/host_shaders)
|
set(SHADER_DIR ${SHADER_INCLUDE}/video_core/host_shaders)
|
||||||
set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE)
|
set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE)
|
||||||
@@ -44,57 +33,22 @@ set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE)
|
|||||||
set(INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/source_shader.h.in)
|
set(INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/source_shader.h.in)
|
||||||
set(HEADER_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/StringShaderHeader.cmake)
|
set(HEADER_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/StringShaderHeader.cmake)
|
||||||
|
|
||||||
# Check if `--quiet` is available on host's glslang version
|
|
||||||
# glslang prints to STDERR iff an unrecognized flag is passed to it
|
|
||||||
execute_process(
|
|
||||||
COMMAND
|
|
||||||
${GLSLANG} ${QUIET_FLAG}
|
|
||||||
ERROR_VARIABLE
|
|
||||||
GLSLANG_ERROR
|
|
||||||
# STDOUT variable defined to silence unnecessary output during CMake configuration
|
|
||||||
OUTPUT_VARIABLE
|
|
||||||
GLSLANG_OUTPUT
|
|
||||||
)
|
|
||||||
|
|
||||||
if (NOT GLSLANG_ERROR STREQUAL "")
|
|
||||||
message(WARNING "Refusing to use unavailable flag `${QUIET_FLAG}` on `${GLSLANG}`")
|
|
||||||
set(QUIET_FLAG "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
foreach(FILENAME IN ITEMS ${SHADER_FILES})
|
foreach(FILENAME IN ITEMS ${SHADER_FILES})
|
||||||
string(REPLACE "." "_" SHADER_NAME ${FILENAME})
|
string(REPLACE "." "_" SHADER_NAME ${FILENAME})
|
||||||
set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME})
|
set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME})
|
||||||
# Skip generating source headers on Vulkan exclusive files
|
set(SOURCE_HEADER_FILE ${SHADER_DIR}/${SHADER_NAME}.h)
|
||||||
if (NOT ${FILENAME} MATCHES "vulkan.*")
|
add_custom_command(
|
||||||
set(SOURCE_HEADER_FILE ${SHADER_DIR}/${SHADER_NAME}.h)
|
OUTPUT
|
||||||
add_custom_command(
|
${SOURCE_HEADER_FILE}
|
||||||
OUTPUT
|
COMMAND
|
||||||
${SOURCE_HEADER_FILE}
|
${CMAKE_COMMAND} -P ${HEADER_GENERATOR} ${SOURCE_FILE} ${SOURCE_HEADER_FILE} ${INPUT_FILE}
|
||||||
COMMAND
|
MAIN_DEPENDENCY
|
||||||
${CMAKE_COMMAND} -P ${HEADER_GENERATOR} ${SOURCE_FILE} ${SOURCE_HEADER_FILE} ${INPUT_FILE}
|
${SOURCE_FILE}
|
||||||
MAIN_DEPENDENCY
|
DEPENDS
|
||||||
${SOURCE_FILE}
|
${INPUT_FILE}
|
||||||
DEPENDS
|
# HEADER_GENERATOR should be included here but msbuild seems to assume it's always modified
|
||||||
${INPUT_FILE}
|
)
|
||||||
# HEADER_GENERATOR should be included here but msbuild seems to assume it's always modified
|
set(SHADER_HEADERS ${SHADER_HEADERS} ${SOURCE_HEADER_FILE})
|
||||||
)
|
|
||||||
set(SHADER_HEADERS ${SHADER_HEADERS} ${SOURCE_HEADER_FILE})
|
|
||||||
endif()
|
|
||||||
# Skip compiling to SPIR-V OpenGL exclusive files
|
|
||||||
if (NOT ${FILENAME} MATCHES "opengl.*")
|
|
||||||
get_filename_component(FILE_NAME ${SHADER_NAME} NAME)
|
|
||||||
string(TOUPPER ${FILE_NAME}_SPV SPIRV_VARIABLE_NAME)
|
|
||||||
set(SPIRV_HEADER_FILE ${SHADER_DIR}/${SHADER_NAME}_spv.h)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT
|
|
||||||
${SPIRV_HEADER_FILE}
|
|
||||||
COMMAND
|
|
||||||
${GLSLANG} --target-env vulkan1.1 --glsl-version 450 ${QUIET_FLAG} ${MACROS} --variable-name ${SPIRV_VARIABLE_NAME} -o ${SPIRV_HEADER_FILE} ${SOURCE_FILE}
|
|
||||||
MAIN_DEPENDENCY
|
|
||||||
${SOURCE_FILE}
|
|
||||||
)
|
|
||||||
set(SHADER_HEADERS ${SHADER_HEADERS} ${SPIRV_HEADER_FILE})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
set(SHADER_SOURCES ${SHADER_FILES})
|
set(SHADER_SOURCES ${SHADER_FILES})
|
||||||
|
@@ -8,6 +8,10 @@ layout(location = 0) out vec2 dst_coord;
|
|||||||
|
|
||||||
layout(location = 0) uniform mediump ivec2 dst_size;
|
layout(location = 0) uniform mediump ivec2 dst_size;
|
||||||
|
|
||||||
|
#ifdef VULKAN
|
||||||
|
#define gl_VertexID gl_VertexIndex
|
||||||
|
#endif
|
||||||
|
|
||||||
const vec2 vertices[4] =
|
const vec2 vertices[4] =
|
||||||
vec2[4](vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0), vec2(1.0, 1.0));
|
vec2[4](vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0), vec2(1.0, 1.0));
|
||||||
|
|
||||||
|
@@ -10,6 +10,7 @@ out gl_PerVertex {
|
|||||||
layout(location = 0) out vec2 texcoord;
|
layout(location = 0) out vec2 texcoord;
|
||||||
|
|
||||||
#ifdef VULKAN
|
#ifdef VULKAN
|
||||||
|
#define gl_VertexID gl_VertexIndex
|
||||||
#define BEGIN_PUSH_CONSTANTS layout(push_constant) uniform PushConstants {
|
#define BEGIN_PUSH_CONSTANTS layout(push_constant) uniform PushConstants {
|
||||||
#define END_PUSH_CONSTANTS };
|
#define END_PUSH_CONSTANTS };
|
||||||
#define UNIFORM(n)
|
#define UNIFORM(n)
|
||||||
|
@@ -5,6 +5,10 @@
|
|||||||
//? #version 430 core
|
//? #version 430 core
|
||||||
layout(location = 0) out vec2 tex_coord;
|
layout(location = 0) out vec2 tex_coord;
|
||||||
|
|
||||||
|
#ifdef VULKAN
|
||||||
|
#define gl_VertexID gl_VertexIndex
|
||||||
|
#endif
|
||||||
|
|
||||||
const vec2 vertices[4] =
|
const vec2 vertices[4] =
|
||||||
vec2[4](vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0), vec2(1.0, 1.0));
|
vec2[4](vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0), vec2(1.0, 1.0));
|
||||||
|
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
#include "video_core/renderer_vulkan/vk_memory_util.h"
|
#include "video_core/renderer_vulkan/vk_memory_util.h"
|
||||||
#include "video_core/renderer_vulkan/vk_shader_util.h"
|
#include "video_core/renderer_vulkan/vk_shader_util.h"
|
||||||
|
|
||||||
#include "video_core/host_shaders/vulkan_present_anaglyph_frag_spv.h"
|
#include "video_core/host_shaders/vulkan_present_anaglyph_frag.h"
|
||||||
#include "video_core/host_shaders/vulkan_present_frag_spv.h"
|
#include "video_core/host_shaders/vulkan_present_frag.h"
|
||||||
#include "video_core/host_shaders/vulkan_present_interlaced_frag_spv.h"
|
#include "video_core/host_shaders/vulkan_present_interlaced_frag.h"
|
||||||
#include "video_core/host_shaders/vulkan_present_vert_spv.h"
|
#include "video_core/host_shaders/vulkan_present_vert.h"
|
||||||
|
|
||||||
#include <vk_mem_alloc.h>
|
#include <vk_mem_alloc.h>
|
||||||
|
|
||||||
@@ -225,10 +225,14 @@ void RendererVulkan::LoadFBToScreenInfo(const Pica::FramebufferConfig& framebuff
|
|||||||
|
|
||||||
void RendererVulkan::CompileShaders() {
|
void RendererVulkan::CompileShaders() {
|
||||||
vk::Device device = instance.GetDevice();
|
vk::Device device = instance.GetDevice();
|
||||||
present_vertex_shader = CompileSPV(VULKAN_PRESENT_VERT_SPV, device);
|
present_vertex_shader =
|
||||||
present_shaders[0] = CompileSPV(VULKAN_PRESENT_FRAG_SPV, device);
|
Compile(HostShaders::VULKAN_PRESENT_VERT, vk::ShaderStageFlagBits::eVertex, device);
|
||||||
present_shaders[1] = CompileSPV(VULKAN_PRESENT_ANAGLYPH_FRAG_SPV, device);
|
present_shaders[0] =
|
||||||
present_shaders[2] = CompileSPV(VULKAN_PRESENT_INTERLACED_FRAG_SPV, device);
|
Compile(HostShaders::VULKAN_PRESENT_FRAG, vk::ShaderStageFlagBits::eFragment, device);
|
||||||
|
present_shaders[1] = Compile(HostShaders::VULKAN_PRESENT_ANAGLYPH_FRAG,
|
||||||
|
vk::ShaderStageFlagBits::eFragment, device);
|
||||||
|
present_shaders[2] = Compile(HostShaders::VULKAN_PRESENT_INTERLACED_FRAG,
|
||||||
|
vk::ShaderStageFlagBits::eFragment, device);
|
||||||
|
|
||||||
auto properties = instance.GetPhysicalDevice().getProperties();
|
auto properties = instance.GetPhysicalDevice().getProperties();
|
||||||
for (std::size_t i = 0; i < present_samplers.size(); i++) {
|
for (std::size_t i = 0; i < present_samplers.size(); i++) {
|
||||||
|
@@ -10,10 +10,10 @@
|
|||||||
#include "video_core/renderer_vulkan/vk_shader_util.h"
|
#include "video_core/renderer_vulkan/vk_shader_util.h"
|
||||||
#include "video_core/renderer_vulkan/vk_texture_runtime.h"
|
#include "video_core/renderer_vulkan/vk_texture_runtime.h"
|
||||||
|
|
||||||
#include "video_core/host_shaders/format_reinterpreter/vulkan_d24s8_to_rgba8_comp_spv.h"
|
#include "video_core/host_shaders/format_reinterpreter/vulkan_d24s8_to_rgba8_comp.h"
|
||||||
#include "video_core/host_shaders/full_screen_triangle_vert_spv.h"
|
#include "video_core/host_shaders/full_screen_triangle_vert.h"
|
||||||
#include "video_core/host_shaders/vulkan_blit_depth_stencil_frag_spv.h"
|
#include "video_core/host_shaders/vulkan_blit_depth_stencil_frag.h"
|
||||||
#include "video_core/host_shaders/vulkan_depth_to_buffer_comp_spv.h"
|
#include "video_core/host_shaders/vulkan_depth_to_buffer_comp.h"
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
@@ -189,10 +189,14 @@ BlitHelper::BlitHelper(const Instance& instance_, Scheduler& scheduler_, Descrip
|
|||||||
PipelineLayoutCreateInfo(&compute_buffer_provider.Layout(), true))},
|
PipelineLayoutCreateInfo(&compute_buffer_provider.Layout(), true))},
|
||||||
two_textures_pipeline_layout{
|
two_textures_pipeline_layout{
|
||||||
device.createPipelineLayout(PipelineLayoutCreateInfo(&two_textures_provider.Layout()))},
|
device.createPipelineLayout(PipelineLayoutCreateInfo(&two_textures_provider.Layout()))},
|
||||||
full_screen_vert{CompileSPV(FULL_SCREEN_TRIANGLE_VERT_SPV, device)},
|
full_screen_vert{Compile(HostShaders::FULL_SCREEN_TRIANGLE_VERT,
|
||||||
d24s8_to_rgba8_comp{CompileSPV(VULKAN_D24S8_TO_RGBA8_COMP_SPV, device)},
|
vk::ShaderStageFlagBits::eVertex, device)},
|
||||||
depth_to_buffer_comp{CompileSPV(VULKAN_DEPTH_TO_BUFFER_COMP_SPV, device)},
|
d24s8_to_rgba8_comp{Compile(HostShaders::VULKAN_D24S8_TO_RGBA8_COMP,
|
||||||
blit_depth_stencil_frag{CompileSPV(VULKAN_BLIT_DEPTH_STENCIL_FRAG_SPV, device)},
|
vk::ShaderStageFlagBits::eCompute, device)},
|
||||||
|
depth_to_buffer_comp{Compile(HostShaders::VULKAN_DEPTH_TO_BUFFER_COMP,
|
||||||
|
vk::ShaderStageFlagBits::eCompute, device)},
|
||||||
|
blit_depth_stencil_frag{Compile(HostShaders::VULKAN_BLIT_DEPTH_STENCIL_FRAG,
|
||||||
|
vk::ShaderStageFlagBits::eFragment, device)},
|
||||||
d24s8_to_rgba8_pipeline{MakeComputePipeline(d24s8_to_rgba8_comp, compute_pipeline_layout)},
|
d24s8_to_rgba8_pipeline{MakeComputePipeline(d24s8_to_rgba8_comp, compute_pipeline_layout)},
|
||||||
depth_to_buffer_pipeline{
|
depth_to_buffer_pipeline{
|
||||||
MakeComputePipeline(depth_to_buffer_comp, compute_buffer_pipeline_layout)},
|
MakeComputePipeline(depth_to_buffer_comp, compute_buffer_pipeline_layout)},
|
||||||
|
Reference in New Issue
Block a user