From acf7deea957565937af43de66c7b86104553bc89 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 31 Jan 2026 20:33:35 +0100 Subject: [PATCH] [vk] remove unused vk_texture_manager.cpp and unused shader conversions (#3432) - Trivial dead code removal, also these shaders are useless TODO: maybe in a future do YUV280 or whatever in shader for vic :) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3432 Reviewed-by: CamilleLaVey Reviewed-by: DraVee Co-authored-by: lizzie Co-committed-by: lizzie --- src/video_core/host_shaders/CMakeLists.txt | 11 +- .../convert_abgr8_srgb_to_d24s8.frag | 46 ------ .../convert_astc_hdr_to_rgba16f.comp | 28 ---- .../host_shaders/convert_bc7_to_rgba8.comp | 29 ---- .../host_shaders/convert_rgb_to_yuv420.comp | 29 ---- .../convert_rgba16f_to_rgba8.frag | 31 ---- .../host_shaders/convert_rgba8_to_bgra8.frag | 11 -- .../host_shaders/convert_yuv420_to_rgb.comp | 30 ---- .../host_shaders/dither_temporal.frag | 29 ---- .../dynamic_resolution_scale.comp | 68 --------- src/video_core/renderer_vulkan/blit_image.cpp | 99 +----------- src/video_core/renderer_vulkan/blit_image.h | 32 +--- .../renderer_vulkan/vk_texture_cache.cpp | 20 +-- .../renderer_vulkan/vk_texture_manager.cpp | 144 ------------------ 14 files changed, 7 insertions(+), 600 deletions(-) delete mode 100644 src/video_core/host_shaders/convert_abgr8_srgb_to_d24s8.frag delete mode 100644 src/video_core/host_shaders/convert_astc_hdr_to_rgba16f.comp delete mode 100644 src/video_core/host_shaders/convert_bc7_to_rgba8.comp delete mode 100644 src/video_core/host_shaders/convert_rgb_to_yuv420.comp delete mode 100644 src/video_core/host_shaders/convert_rgba16f_to_rgba8.frag delete mode 100644 src/video_core/host_shaders/convert_rgba8_to_bgra8.frag delete mode 100644 src/video_core/host_shaders/convert_yuv420_to_rgb.comp delete mode 100644 src/video_core/host_shaders/dither_temporal.frag delete mode 100644 src/video_core/host_shaders/dynamic_resolution_scale.comp delete mode 100644 src/video_core/renderer_vulkan/vk_texture_manager.cpp diff --git a/src/video_core/host_shaders/CMakeLists.txt b/src/video_core/host_shaders/CMakeLists.txt index 9ce2ac44bf..40fa4968a8 100644 --- a/src/video_core/host_shaders/CMakeLists.txt +++ b/src/video_core/host_shaders/CMakeLists.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project # SPDX-License-Identifier: GPL-3.0-or-later set(FIDELITYFX_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/externals/FidelityFX-FSR/ffx-fsr) @@ -19,7 +19,6 @@ set(SHADER_FILES block_linear_unswizzle_2d.comp block_linear_unswizzle_3d.comp block_linear_unswizzle_3d_bcn.comp - convert_abgr8_srgb_to_d24s8.frag convert_abgr8_to_d24s8.frag convert_abgr8_to_d32f.frag convert_d32f_to_abgr8.frag @@ -77,14 +76,6 @@ set(SHADER_FILES vulkan_quad_indexed.comp vulkan_turbo_mode.comp vulkan_uint8.comp - convert_rgba8_to_bgra8.frag - convert_yuv420_to_rgb.comp - convert_rgb_to_yuv420.comp - convert_bc7_to_rgba8.comp - convert_astc_hdr_to_rgba16f.comp - convert_rgba16f_to_rgba8.frag - dither_temporal.frag - dynamic_resolution_scale.comp ) if (PLATFORM_HAIKU) diff --git a/src/video_core/host_shaders/convert_abgr8_srgb_to_d24s8.frag b/src/video_core/host_shaders/convert_abgr8_srgb_to_d24s8.frag deleted file mode 100644 index 2e464fffa6..0000000000 --- a/src/video_core/host_shaders/convert_abgr8_srgb_to_d24s8.frag +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -#version 450 -#extension GL_ARB_shader_stencil_export : require - -layout(binding = 0) uniform sampler2D color_texture; - -// Even more accurate sRGB to linear conversion -// https://entropymine.com/imageworsener/srgbformula/ -float srgbToLinear(float srgb) { - if (srgb <= 0.0404482362771082f) { //assumes it's >= 0 - return srgb / 12.92; - } else { - return pow((srgb + 0.055) / 1.055, 2.4); - } -} - -void main() { - ivec2 coord = ivec2(gl_FragCoord.xy); - vec4 srgbColor = texelFetch(color_texture, coord, 0); - - // Convert sRGB to linear space with proper gamma correction - vec3 linearColor = vec3( - srgbToLinear(srgbColor.r), - srgbToLinear(srgbColor.g), - srgbToLinear(srgbColor.b) - ); - - // Use standard luminance coefficients - float luminance = dot(linearColor, vec3(0.2126, 0.7152, 0.0722)); - - // Ensure proper depth range - luminance = clamp(luminance, 0.0, 1.0); - - // Convert to 24-bit depth value - uint depth_val = uint(luminance * float(0xFFFFFF)); - - // Extract 8-bit stencil from alpha - uint stencil_val = uint(srgbColor.a * 255.0); - - // Pack values efficiently - uint depth_stencil = (stencil_val << 24) | (depth_val & 0x00FFFFFF); - - gl_FragDepth = float(depth_val) / float(0xFFFFFF); - gl_FragStencilRefARB = int(stencil_val); -} \ No newline at end of file diff --git a/src/video_core/host_shaders/convert_astc_hdr_to_rgba16f.comp b/src/video_core/host_shaders/convert_astc_hdr_to_rgba16f.comp deleted file mode 100644 index 8d4b1825b1..0000000000 --- a/src/video_core/host_shaders/convert_astc_hdr_to_rgba16f.comp +++ /dev/null @@ -1,28 +0,0 @@ -#version 450 - -layout(local_size_x = 8, local_size_y = 8) in; - -layout(binding = 0) uniform samplerBuffer astc_data; -layout(binding = 1, rgba16f) uniform writeonly image2D output_image; - -// Note: This is a simplified version. Real ASTC HDR decompression is more complex -void main() { - ivec2 pos = ivec2(gl_GlobalInvocationID.xy); - ivec2 size = imageSize(output_image); - - if (pos.x >= size.x || pos.y >= size.y) { - return; - } - - // Calculate block and pixel within block - ivec2 block = pos / 8; // Assuming 8x8 ASTC blocks - ivec2 pixel = pos % 8; - - // Each ASTC block is 16 bytes - int block_index = block.y * (size.x / 8) + block.x; - - // Simplified ASTC HDR decoding - you'll need to implement full ASTC decoding - vec4 color = texelFetch(astc_data, block_index * 8 + pixel.y * 8 + pixel.x); - - imageStore(output_image, pos, color); -} \ No newline at end of file diff --git a/src/video_core/host_shaders/convert_bc7_to_rgba8.comp b/src/video_core/host_shaders/convert_bc7_to_rgba8.comp deleted file mode 100644 index a0842e175a..0000000000 --- a/src/video_core/host_shaders/convert_bc7_to_rgba8.comp +++ /dev/null @@ -1,29 +0,0 @@ -#version 450 -#extension GL_ARB_shader_ballot : require - -layout(local_size_x = 8, local_size_y = 8) in; - -layout(binding = 0) uniform samplerBuffer bc7_data; -layout(binding = 1, rgba8) uniform writeonly image2D output_image; - -// Note: This is a simplified version. Real BC7 decompression is more complex -void main() { - ivec2 pos = ivec2(gl_GlobalInvocationID.xy); - ivec2 size = imageSize(output_image); - - if (pos.x >= size.x || pos.y >= size.y) { - return; - } - - // Calculate block and pixel within block - ivec2 block = pos / 4; - ivec2 pixel = pos % 4; - - // Each BC7 block is 16 bytes - int block_index = block.y * (size.x / 4) + block.x; - - // Simplified BC7 decoding - you'll need to implement full BC7 decoding - vec4 color = texelFetch(bc7_data, block_index * 4 + pixel.y * 4 + pixel.x); - - imageStore(output_image, pos, color); -} \ No newline at end of file diff --git a/src/video_core/host_shaders/convert_rgb_to_yuv420.comp b/src/video_core/host_shaders/convert_rgb_to_yuv420.comp deleted file mode 100644 index 0a5cfab390..0000000000 --- a/src/video_core/host_shaders/convert_rgb_to_yuv420.comp +++ /dev/null @@ -1,29 +0,0 @@ -#version 450 - -layout(local_size_x = 8, local_size_y = 8) in; - -layout(binding = 0) uniform sampler2D input_texture; -layout(binding = 1, r8) uniform writeonly image2D y_output; -layout(binding = 2, r8) uniform writeonly image2D u_output; -layout(binding = 3, r8) uniform writeonly image2D v_output; - -void main() { - ivec2 pos = ivec2(gl_GlobalInvocationID.xy); - ivec2 size = imageSize(y_output); - - if (pos.x >= size.x || pos.y >= size.y) { - return; - } - - vec2 tex_coord = vec2(pos) / vec2(size); - vec3 rgb = texture(input_texture, tex_coord).rgb; - - // RGB to YUV conversion - float y = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b; - float u = -0.147 * rgb.r - 0.289 * rgb.g + 0.436 * rgb.b + 0.5; - float v = 0.615 * rgb.r - 0.515 * rgb.g - 0.100 * rgb.b + 0.5; - - imageStore(y_output, pos, vec4(y)); - imageStore(u_output, pos / 2, vec4(u)); - imageStore(v_output, pos / 2, vec4(v)); -} \ No newline at end of file diff --git a/src/video_core/host_shaders/convert_rgba16f_to_rgba8.frag b/src/video_core/host_shaders/convert_rgba16f_to_rgba8.frag deleted file mode 100644 index 9e430f5047..0000000000 --- a/src/video_core/host_shaders/convert_rgba16f_to_rgba8.frag +++ /dev/null @@ -1,31 +0,0 @@ -#version 450 - -layout(location = 0) in vec2 texcoord; -layout(location = 0) out vec4 color; - -layout(binding = 0) uniform sampler2D input_texture; - -layout(push_constant) uniform PushConstants { - float exposure; - float gamma; -} constants; - -vec3 tonemap(vec3 hdr) { - // Reinhard tonemapping - return hdr / (hdr + vec3(1.0)); -} - -void main() { - vec4 hdr = texture(input_texture, texcoord); - - // Apply exposure - vec3 exposed = hdr.rgb * constants.exposure; - - // Tonemap - vec3 tonemapped = tonemap(exposed); - - // Gamma correction - vec3 gamma_corrected = pow(tonemapped, vec3(1.0 / constants.gamma)); - - color = vec4(gamma_corrected, hdr.a); -} \ No newline at end of file diff --git a/src/video_core/host_shaders/convert_rgba8_to_bgra8.frag b/src/video_core/host_shaders/convert_rgba8_to_bgra8.frag deleted file mode 100644 index 6f7d247985..0000000000 --- a/src/video_core/host_shaders/convert_rgba8_to_bgra8.frag +++ /dev/null @@ -1,11 +0,0 @@ -#version 450 - -layout(location = 0) in vec2 texcoord; -layout(location = 0) out vec4 color; - -layout(binding = 0) uniform sampler2D input_texture; - -void main() { - vec4 rgba = texture(input_texture, texcoord); - color = rgba.bgra; // Swap red and blue channels -} \ No newline at end of file diff --git a/src/video_core/host_shaders/convert_yuv420_to_rgb.comp b/src/video_core/host_shaders/convert_yuv420_to_rgb.comp deleted file mode 100644 index b1f1536f80..0000000000 --- a/src/video_core/host_shaders/convert_yuv420_to_rgb.comp +++ /dev/null @@ -1,30 +0,0 @@ -#version 450 - -layout(local_size_x = 8, local_size_y = 8) in; - -layout(binding = 0) uniform sampler2D y_texture; -layout(binding = 1) uniform sampler2D u_texture; -layout(binding = 2) uniform sampler2D v_texture; -layout(binding = 3, rgba8) uniform writeonly image2D output_image; - -void main() { - ivec2 pos = ivec2(gl_GlobalInvocationID.xy); - ivec2 size = imageSize(output_image); - - if (pos.x >= size.x || pos.y >= size.y) { - return; - } - - vec2 tex_coord = vec2(pos) / vec2(size); - float y = texture(y_texture, tex_coord).r; - float u = texture(u_texture, tex_coord).r - 0.5; - float v = texture(v_texture, tex_coord).r - 0.5; - - // YUV to RGB conversion - vec3 rgb; - rgb.r = y + 1.402 * v; - rgb.g = y - 0.344 * u - 0.714 * v; - rgb.b = y + 1.772 * u; - - imageStore(output_image, pos, vec4(rgb, 1.0)); -} \ No newline at end of file diff --git a/src/video_core/host_shaders/dither_temporal.frag b/src/video_core/host_shaders/dither_temporal.frag deleted file mode 100644 index feaddc9aaf..0000000000 --- a/src/video_core/host_shaders/dither_temporal.frag +++ /dev/null @@ -1,29 +0,0 @@ -#version 450 - -layout(location = 0) in vec2 texcoord; -layout(location = 0) out vec4 color; - -layout(binding = 0) uniform sampler2D input_texture; - -layout(push_constant) uniform PushConstants { - float frame_count; - float dither_strength; -} constants; - -// Pseudo-random number generator -float rand(vec2 co) { - return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); -} - -void main() { - vec4 input_color = texture(input_texture, texcoord); - - // Generate temporal noise based on frame count - vec2 noise_coord = gl_FragCoord.xy + vec2(constants.frame_count); - float noise = rand(noise_coord) * 2.0 - 1.0; - - // Apply dithering - vec3 dithered = input_color.rgb + noise * constants.dither_strength; - - color = vec4(dithered, input_color.a); -} \ No newline at end of file diff --git a/src/video_core/host_shaders/dynamic_resolution_scale.comp b/src/video_core/host_shaders/dynamic_resolution_scale.comp deleted file mode 100644 index 88f0a41c1c..0000000000 --- a/src/video_core/host_shaders/dynamic_resolution_scale.comp +++ /dev/null @@ -1,68 +0,0 @@ -#version 450 - -layout(local_size_x = 8, local_size_y = 8) in; - -layout(binding = 0) uniform sampler2D input_texture; -layout(binding = 1, rgba8) uniform writeonly image2D output_image; - -layout(push_constant) uniform PushConstants { - vec2 scale_factor; - vec2 input_size; -} constants; - -vec4 cubic(float v) { - vec4 n = vec4(1.0, 2.0, 3.0, 4.0) - v; - vec4 s = n * n * n; - float x = s.x; - float y = s.y - 4.0 * s.x; - float z = s.z - 4.0 * s.y + 6.0 * s.x; - float w = s.w - 4.0 * s.z + 6.0 * s.y - 4.0 * s.x; - return vec4(x, y, z, w) * (1.0/6.0); -} - -vec4 bicubic_sample(sampler2D tex, vec2 tex_coord) { - vec2 tex_size = constants.input_size; - vec2 inv_tex_size = 1.0 / tex_size; - - tex_coord = tex_coord * tex_size - 0.5; - - vec2 fxy = fract(tex_coord); - tex_coord -= fxy; - - vec4 xcubic = cubic(fxy.x); - vec4 ycubic = cubic(fxy.y); - - vec4 c = tex_coord.xxyy + vec2(-0.5, +1.5).xyxy; - vec4 s = vec4(xcubic.xz + xcubic.yw, ycubic.xz + ycubic.yw); - vec4 offset = c + vec4(xcubic.yw, ycubic.yw) / s; - - offset *= inv_tex_size.xxyy; - - vec4 sample0 = texture(tex, offset.xz); - vec4 sample1 = texture(tex, offset.yz); - vec4 sample2 = texture(tex, offset.xw); - vec4 sample3 = texture(tex, offset.yw); - - float sx = s.x / (s.x + s.y); - float sy = s.z / (s.z + s.w); - - return mix( - mix(sample3, sample2, sx), - mix(sample1, sample0, sx), - sy - ); -} - -void main() { - ivec2 pos = ivec2(gl_GlobalInvocationID.xy); - ivec2 size = imageSize(output_image); - - if (pos.x >= size.x || pos.y >= size.y) { - return; - } - - vec2 tex_coord = vec2(pos) / vec2(size); - vec4 color = bicubic_sample(input_texture, tex_coord); - - imageStore(output_image, pos, color); -} \ No newline at end of file diff --git a/src/video_core/renderer_vulkan/blit_image.cpp b/src/video_core/renderer_vulkan/blit_image.cpp index 5b4b44db53..07611ef98c 100644 --- a/src/video_core/renderer_vulkan/blit_image.cpp +++ b/src/video_core/renderer_vulkan/blit_image.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project @@ -31,15 +31,6 @@ #include "video_core/surface.h" #include "video_core/vulkan_common/vulkan_device.h" #include "video_core/vulkan_common/vulkan_wrapper.h" -#include "video_core/host_shaders/convert_abgr8_srgb_to_d24s8_frag_spv.h" -#include "video_core/host_shaders/convert_rgba8_to_bgra8_frag_spv.h" -#include "video_core/host_shaders/convert_yuv420_to_rgb_comp_spv.h" -#include "video_core/host_shaders/convert_rgb_to_yuv420_comp_spv.h" -#include "video_core/host_shaders/convert_bc7_to_rgba8_comp_spv.h" -#include "video_core/host_shaders/convert_astc_hdr_to_rgba16f_comp_spv.h" -#include "video_core/host_shaders/convert_rgba16f_to_rgba8_frag_spv.h" -#include "video_core/host_shaders/dither_temporal_frag_spv.h" -#include "video_core/host_shaders/dynamic_resolution_scale_comp_spv.h" namespace Vulkan { @@ -540,17 +531,6 @@ BlitImageHelper::BlitImageHelper(const Device& device_, Scheduler& scheduler_, convert_d32f_to_abgr8_frag(BuildShader(device, CONVERT_D32F_TO_ABGR8_FRAG_SPV)), convert_d24s8_to_abgr8_frag(BuildShader(device, CONVERT_D24S8_TO_ABGR8_FRAG_SPV)), convert_s8d24_to_abgr8_frag(BuildShader(device, CONVERT_S8D24_TO_ABGR8_FRAG_SPV)), - convert_abgr8_srgb_to_d24s8_frag(device.IsExtShaderStencilExportSupported() - ? BuildShader(device, CONVERT_ABGR8_SRGB_TO_D24S8_FRAG_SPV) - : vk::ShaderModule{}), - convert_rgba_to_bgra_frag(BuildShader(device, CONVERT_RGBA8_TO_BGRA8_FRAG_SPV)), - convert_yuv420_to_rgb_comp(BuildShader(device, CONVERT_YUV420_TO_RGB_COMP_SPV)), - convert_rgb_to_yuv420_comp(BuildShader(device, CONVERT_RGB_TO_YUV420_COMP_SPV)), - convert_bc7_to_rgba8_comp(BuildShader(device, CONVERT_BC7_TO_RGBA8_COMP_SPV)), - convert_astc_hdr_to_rgba16f_comp(BuildShader(device, CONVERT_ASTC_HDR_TO_RGBA16F_COMP_SPV)), - convert_rgba16f_to_rgba8_frag(BuildShader(device, CONVERT_RGBA16F_TO_RGBA8_FRAG_SPV)), - dither_temporal_frag(BuildShader(device, DITHER_TEMPORAL_FRAG_SPV)), - dynamic_resolution_scale_comp(BuildShader(device, DYNAMIC_RESOLUTION_SCALE_COMP_SPV)), linear_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO)), nearest_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO)) {} @@ -711,19 +691,6 @@ void BlitImageHelper::ConvertS8D24ToABGR8(const Framebuffer* dst_framebuffer, ConvertDepthStencil(*convert_s8d24_to_abgr8_pipeline, dst_framebuffer, src_image_view); } -void BlitImageHelper::ConvertABGR8SRGBToD24S8(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - if (!device.IsExtShaderStencilExportSupported()) { - // Shader requires VK_EXT_shader_stencil_export which is not available - LOG_WARNING(Render_Vulkan, "ConvertABGR8SRGBToD24S8 requires shader_stencil_export, skipping"); - return; - } - ConvertPipelineDepthTargetEx(convert_abgr8_srgb_to_d24s8_pipeline, - dst_framebuffer->RenderPass(), - convert_abgr8_srgb_to_d24s8_frag); - Convert(*convert_abgr8_srgb_to_d24s8_pipeline, dst_framebuffer, src_image_view); -} - void BlitImageHelper::ClearColor(const Framebuffer* dst_framebuffer, u8 color_mask, const std::array& clear_color, const Region2D& dst_region) { @@ -1192,68 +1159,4 @@ void BlitImageHelper::ConvertPipeline(vk::Pipeline& pipeline, VkRenderPass rende }); } -void BlitImageHelper::ConvertRGBAtoGBRA(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - ConvertPipeline(convert_rgba_to_bgra_pipeline, - dst_framebuffer->RenderPass(), - false); - Convert(*convert_rgba_to_bgra_pipeline, dst_framebuffer, src_image_view); -} - -void BlitImageHelper::ConvertYUV420toRGB(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - ConvertPipeline(convert_yuv420_to_rgb_pipeline, - dst_framebuffer->RenderPass(), - false); - Convert(*convert_yuv420_to_rgb_pipeline, dst_framebuffer, src_image_view); -} - -void BlitImageHelper::ConvertRGBtoYUV420(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - ConvertPipeline(convert_rgb_to_yuv420_pipeline, - dst_framebuffer->RenderPass(), - false); - Convert(*convert_rgb_to_yuv420_pipeline, dst_framebuffer, src_image_view); -} - -void BlitImageHelper::ConvertBC7toRGBA8(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - ConvertPipeline(convert_bc7_to_rgba8_pipeline, - dst_framebuffer->RenderPass(), - false); - Convert(*convert_bc7_to_rgba8_pipeline, dst_framebuffer, src_image_view); -} - -void BlitImageHelper::ConvertASTCHDRtoRGBA16F(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - ConvertPipeline(convert_astc_hdr_to_rgba16f_pipeline, - dst_framebuffer->RenderPass(), - false); - Convert(*convert_astc_hdr_to_rgba16f_pipeline, dst_framebuffer, src_image_view); -} - -void BlitImageHelper::ConvertRGBA16FtoRGBA8(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - ConvertPipeline(convert_rgba16f_to_rgba8_pipeline, - dst_framebuffer->RenderPass(), - false); - Convert(*convert_rgba16f_to_rgba8_pipeline, dst_framebuffer, src_image_view); -} - -void BlitImageHelper::ApplyDitherTemporal(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - ConvertPipeline(dither_temporal_pipeline, - dst_framebuffer->RenderPass(), - false); - Convert(*dither_temporal_pipeline, dst_framebuffer, src_image_view); -} - -void BlitImageHelper::ApplyDynamicResolutionScale(const Framebuffer* dst_framebuffer, - const ImageView& src_image_view) { - ConvertPipeline(dynamic_resolution_scale_pipeline, - dst_framebuffer->RenderPass(), - false); - Convert(*dynamic_resolution_scale_pipeline, dst_framebuffer, src_image_view); -} - } // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/blit_image.h b/src/video_core/renderer_vulkan/blit_image.h index bdb8cce883..34f1b25f0f 100644 --- a/src/video_core/renderer_vulkan/blit_image.h +++ b/src/video_core/renderer_vulkan/blit_image.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project @@ -70,8 +70,6 @@ public: void ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ConvertABGR8SRGBToD24S8(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ConvertABGR8ToD32F(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); void ConvertD32FToABGR8(const Framebuffer* dst_framebuffer, ImageView& src_image_view); @@ -86,16 +84,6 @@ public: void ClearDepthStencil(const Framebuffer* dst_framebuffer, bool depth_clear, f32 clear_depth, u8 stencil_mask, u32 stencil_ref, u32 stencil_compare_mask, const Region2D& dst_region); - - void ConvertRGBAtoGBRA(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ConvertYUV420toRGB(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ConvertRGBtoYUV420(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ConvertBC7toRGBA8(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ConvertASTCHDRtoRGBA16F(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ConvertRGBA16FtoRGBA8(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ApplyDitherTemporal(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - void ApplyDynamicResolutionScale(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); - private: void Convert(VkPipeline pipeline, const Framebuffer* dst_framebuffer, const ImageView& src_image_view); @@ -150,15 +138,6 @@ private: vk::ShaderModule convert_d32f_to_abgr8_frag; vk::ShaderModule convert_d24s8_to_abgr8_frag; vk::ShaderModule convert_s8d24_to_abgr8_frag; - vk::ShaderModule convert_abgr8_srgb_to_d24s8_frag; - vk::ShaderModule convert_rgba_to_bgra_frag; - vk::ShaderModule convert_yuv420_to_rgb_comp; - vk::ShaderModule convert_rgb_to_yuv420_comp; - vk::ShaderModule convert_bc7_to_rgba8_comp; - vk::ShaderModule convert_astc_hdr_to_rgba16f_comp; - vk::ShaderModule convert_rgba16f_to_rgba8_frag; - vk::ShaderModule dither_temporal_frag; - vk::ShaderModule dynamic_resolution_scale_comp; vk::Sampler linear_sampler; vk::Sampler nearest_sampler; @@ -179,15 +158,6 @@ private: vk::Pipeline convert_d32f_to_abgr8_pipeline; vk::Pipeline convert_d24s8_to_abgr8_pipeline; vk::Pipeline convert_s8d24_to_abgr8_pipeline; - vk::Pipeline convert_abgr8_srgb_to_d24s8_pipeline; - vk::Pipeline convert_rgba_to_bgra_pipeline; - vk::Pipeline convert_yuv420_to_rgb_pipeline; - vk::Pipeline convert_rgb_to_yuv420_pipeline; - vk::Pipeline convert_bc7_to_rgba8_pipeline; - vk::Pipeline convert_astc_hdr_to_rgba16f_pipeline; - vk::Pipeline convert_rgba16f_to_rgba8_pipeline; - vk::Pipeline dither_temporal_pipeline; - vk::Pipeline dynamic_resolution_scale_pipeline; }; } // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index eb50f36d25..6ce7433240 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -1254,25 +1254,13 @@ void TextureCacheRuntime::ConvertImage(Framebuffer* dst, ImageView& dst_view, Im switch (dst_view.format) { case PixelFormat::D24_UNORM_S8_UINT: - // Handle sRGB source formats - if (src_view.format == PixelFormat::A8B8G8R8_SRGB || - src_view.format == PixelFormat::B8G8R8A8_SRGB) { - // Verify format support before conversion - if (device.IsFormatSupported(VK_FORMAT_D24_UNORM_S8_UINT, - VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, - FormatType::Optimal)) { - return blit_image_helper.ConvertABGR8SRGBToD24S8(dst, src_view); - } else { - // Fallback to regular ABGR8 conversion if sRGB not supported - return blit_image_helper.ConvertABGR8ToD24S8(dst, src_view); - } - } - if (src_view.format == PixelFormat::A8B8G8R8_UNORM || - src_view.format == PixelFormat::B8G8R8A8_UNORM) { + if (src_view.format == PixelFormat::A8B8G8R8_UNORM + || src_view.format == PixelFormat::B8G8R8A8_UNORM + || src_view.format == PixelFormat::A8B8G8R8_SRGB + || src_view.format == PixelFormat::B8G8R8A8_SRGB) { return blit_image_helper.ConvertABGR8ToD24S8(dst, src_view); } break; - case PixelFormat::A8B8G8R8_UNORM: case PixelFormat::A8B8G8R8_SNORM: case PixelFormat::A8B8G8R8_SINT: diff --git a/src/video_core/renderer_vulkan/vk_texture_manager.cpp b/src/video_core/renderer_vulkan/vk_texture_manager.cpp deleted file mode 100644 index 003af9e6fb..0000000000 --- a/src/video_core/renderer_vulkan/vk_texture_manager.cpp +++ /dev/null @@ -1,144 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#include - -#include "common/assert.h" -#include "common/logging/log.h" -#include "video_core/renderer_vulkan/vk_texture_manager.h" -#include "video_core/vulkan_common/vulkan_device.h" -#include "video_core/vulkan_common/vulkan_memory_allocator.h" -#include "video_core/vulkan_common/vulkan_wrapper.h" - -namespace Vulkan { - -TextureManager::TextureManager(const Device& device_, MemoryAllocator& memory_allocator_) - : device(device_), memory_allocator(memory_allocator_) { - - // Create a default texture for fallback in case of errors - default_texture = CreateDefaultTexture(); -} - -TextureManager::~TextureManager() { - std::lock_guard lock(texture_mutex); - // Clear all cached textures - texture_cache.clear(); - - // Default texture will be cleaned up automatically by vk::Image's destructor -} - -VkImage TextureManager::GetTexture(const std::string& texture_path) { - std::lock_guard lock(texture_mutex); - - // Check if the texture is already in the cache - auto it = texture_cache.find(texture_path); - if (it != texture_cache.end()) { - return *it->second; - } - - // Load the texture and add it to the cache - vk::Image new_texture = LoadTexture(texture_path); - if (new_texture) { - VkImage raw_handle = *new_texture; - texture_cache.emplace(texture_path, std::move(new_texture)); - return raw_handle; - } - - // If loading fails, return the default texture if it exists - LOG_WARNING(Render_Vulkan, "Failed to load texture: {}, using default", texture_path); - if (default_texture.has_value()) { - return *(*default_texture); - } - return VK_NULL_HANDLE; -} - -void TextureManager::ReloadTexture(const std::string& texture_path) { - std::lock_guard lock(texture_mutex); - - // Remove the texture from cache if it exists - auto it = texture_cache.find(texture_path); - if (it != texture_cache.end()) { - LOG_INFO(Render_Vulkan, "Reloading texture: {}", texture_path); - texture_cache.erase(it); - } - - // The texture will be reloaded on next GetTexture call -} - -bool TextureManager::IsTextureLoadedCorrectly(VkImage texture) { - // Check if the texture handle is valid - static const VkImage null_handle = VK_NULL_HANDLE; - return texture != null_handle; -} - -void TextureManager::CleanupTextureCache() { - std::lock_guard lock(texture_mutex); - - // TODO: track usage and remove unused textures [ZEP] - - LOG_INFO(Render_Vulkan, "Handling texture cache cleanup, current size: {}", texture_cache.size()); -} - -void TextureManager::HandleTextureRendering(const std::string& texture_path, - std::function render_callback) { - VkImage texture = GetTexture(texture_path); - - if (!IsTextureLoadedCorrectly(texture)) { - LOG_ERROR(Render_Vulkan, "Texture failed to load correctly: {}, attempting reload", texture_path); - ReloadTexture(texture_path); - texture = GetTexture(texture_path); - } - - // Execute the rendering callback with the texture - render_callback(texture); -} - -vk::Image TextureManager::LoadTexture(const std::string& texture_path) { - // TODO: load image data from disk - // and create a proper Vulkan texture [ZEP] - - if (!std::filesystem::exists(texture_path)) { - LOG_ERROR(Render_Vulkan, "Texture file not found: {}", texture_path); - return {}; - } - - try { - - LOG_INFO(Render_Vulkan, "Loaded texture: {}", texture_path); - - // TODO: create an actual VkImage [ZEP] - return CreateDefaultTexture(); - } catch (const std::exception& e) { - LOG_ERROR(Render_Vulkan, "Error loading texture {}: {}", texture_path, e.what()); - return {}; - } -} - -vk::Image TextureManager::CreateDefaultTexture() { - // Create a small default texture (1x1 pixel) to use as a fallback -// const VkExtent2D extent{1, 1}; - -/* // Create image - const VkImageCreateInfo image_ci{ - .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .imageType = VK_IMAGE_TYPE_2D, - .format = texture_format, - .extent = {extent.width, extent.height, 1}, - .mipLevels = 1, - .arrayLayers = 1, - .samples = VK_SAMPLE_COUNT_1_BIT, - .tiling = VK_IMAGE_TILING_OPTIMAL, - .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = nullptr, - .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, - }; */ - - // TODO: create an actual VkImage [ZEP] - LOG_INFO(Render_Vulkan, "Created default fallback texture"); - return {}; -} - -} // namespace Vulkan \ No newline at end of file