diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 13 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_texture_cache.cpp | 11 |
3 files changed, 16 insertions, 10 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index b047e7b3d..d3eabd686 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp | |||
| @@ -112,13 +112,17 @@ GLenum ImageTarget(Shader::TextureType type, int num_samples = 1) { | |||
| 112 | return GL_NONE; | 112 | return GL_NONE; |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | GLenum TextureMode(PixelFormat format, bool is_first) { | 115 | GLenum TextureMode(PixelFormat format, std::array<SwizzleSource, 4> swizzle) { |
| 116 | bool any_r = | ||
| 117 | std::ranges::any_of(swizzle, [](SwizzleSource s) { return s == SwizzleSource::R; }); | ||
| 116 | switch (format) { | 118 | switch (format) { |
| 117 | case PixelFormat::D24_UNORM_S8_UINT: | 119 | case PixelFormat::D24_UNORM_S8_UINT: |
| 118 | case PixelFormat::D32_FLOAT_S8_UINT: | 120 | case PixelFormat::D32_FLOAT_S8_UINT: |
| 119 | return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX; | 121 | // R = depth, G = stencil |
| 122 | return any_r ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX; | ||
| 120 | case PixelFormat::S8_UINT_D24_UNORM: | 123 | case PixelFormat::S8_UINT_D24_UNORM: |
| 121 | return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT; | 124 | // R = stencil, G = depth |
| 125 | return any_r ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT; | ||
| 122 | default: | 126 | default: |
| 123 | ASSERT(false); | 127 | ASSERT(false); |
| 124 | return GL_DEPTH_COMPONENT; | 128 | return GL_DEPTH_COMPONENT; |
| @@ -208,8 +212,7 @@ void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4 | |||
| 208 | case PixelFormat::D32_FLOAT_S8_UINT: | 212 | case PixelFormat::D32_FLOAT_S8_UINT: |
| 209 | case PixelFormat::S8_UINT_D24_UNORM: | 213 | case PixelFormat::S8_UINT_D24_UNORM: |
| 210 | UNIMPLEMENTED_IF(swizzle[0] != SwizzleSource::R && swizzle[0] != SwizzleSource::G); | 214 | UNIMPLEMENTED_IF(swizzle[0] != SwizzleSource::R && swizzle[0] != SwizzleSource::G); |
| 211 | glTextureParameteri(handle, GL_DEPTH_STENCIL_TEXTURE_MODE, | 215 | glTextureParameteri(handle, GL_DEPTH_STENCIL_TEXTURE_MODE, TextureMode(format, swizzle)); |
| 212 | TextureMode(format, swizzle[0] == SwizzleSource::R)); | ||
| 213 | std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); | 216 | std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); |
| 214 | break; | 217 | break; |
| 215 | case PixelFormat::A5B5G5R1_UNORM: { | 218 | case PixelFormat::A5B5G5R1_UNORM: { |
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 719edbcfb..4ed0aebf7 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -1064,7 +1064,7 @@ void RasterizerVulkan::UpdateDepthBoundsTestEnable(Tegra::Engines::Maxwell3D::Re | |||
| 1064 | LOG_WARNING(Render_Vulkan, "Depth bounds is enabled but not supported"); | 1064 | LOG_WARNING(Render_Vulkan, "Depth bounds is enabled but not supported"); |
| 1065 | enabled = false; | 1065 | enabled = false; |
| 1066 | } | 1066 | } |
| 1067 | scheduler.Record([enable = regs.depth_bounds_enable](vk::CommandBuffer cmdbuf) { | 1067 | scheduler.Record([enable = enabled](vk::CommandBuffer cmdbuf) { |
| 1068 | cmdbuf.SetDepthBoundsTestEnableEXT(enable); | 1068 | cmdbuf.SetDepthBoundsTestEnableEXT(enable); |
| 1069 | }); | 1069 | }); |
| 1070 | } | 1070 | } |
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 80adb70eb..69b654994 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp | |||
| @@ -189,13 +189,16 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) { | |||
| 189 | if (info.IsRenderTarget()) { | 189 | if (info.IsRenderTarget()) { |
| 190 | return ImageAspectMask(info.format); | 190 | return ImageAspectMask(info.format); |
| 191 | } | 191 | } |
| 192 | const bool is_first = info.Swizzle()[0] == SwizzleSource::R; | 192 | bool any_r = |
| 193 | std::ranges::any_of(info.Swizzle(), [](SwizzleSource s) { return s == SwizzleSource::R; }); | ||
| 193 | switch (info.format) { | 194 | switch (info.format) { |
| 194 | case PixelFormat::D24_UNORM_S8_UINT: | 195 | case PixelFormat::D24_UNORM_S8_UINT: |
| 195 | case PixelFormat::D32_FLOAT_S8_UINT: | 196 | case PixelFormat::D32_FLOAT_S8_UINT: |
| 196 | return is_first ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT; | 197 | // R = depth, G = stencil |
| 198 | return any_r ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT; | ||
| 197 | case PixelFormat::S8_UINT_D24_UNORM: | 199 | case PixelFormat::S8_UINT_D24_UNORM: |
| 198 | return is_first ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT; | 200 | // R = stencil, G = depth |
| 201 | return any_r ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT; | ||
| 199 | case PixelFormat::D16_UNORM: | 202 | case PixelFormat::D16_UNORM: |
| 200 | case PixelFormat::D32_FLOAT: | 203 | case PixelFormat::D32_FLOAT: |
| 201 | return VK_IMAGE_ASPECT_DEPTH_BIT; | 204 | return VK_IMAGE_ASPECT_DEPTH_BIT; |
| @@ -1763,7 +1766,7 @@ Sampler::Sampler(TextureCacheRuntime& runtime, const Tegra::Texture::TSCEntry& t | |||
| 1763 | .minLod = tsc.mipmap_filter == TextureMipmapFilter::None ? 0.0f : tsc.MinLod(), | 1766 | .minLod = tsc.mipmap_filter == TextureMipmapFilter::None ? 0.0f : tsc.MinLod(), |
| 1764 | .maxLod = tsc.mipmap_filter == TextureMipmapFilter::None ? 0.25f : tsc.MaxLod(), | 1767 | .maxLod = tsc.mipmap_filter == TextureMipmapFilter::None ? 0.25f : tsc.MaxLod(), |
| 1765 | .borderColor = | 1768 | .borderColor = |
| 1766 | arbitrary_borders ? VK_BORDER_COLOR_INT_CUSTOM_EXT : ConvertBorderColor(color), | 1769 | arbitrary_borders ? VK_BORDER_COLOR_FLOAT_CUSTOM_EXT : ConvertBorderColor(color), |
| 1767 | .unnormalizedCoordinates = VK_FALSE, | 1770 | .unnormalizedCoordinates = VK_FALSE, |
| 1768 | }); | 1771 | }); |
| 1769 | } | 1772 | } |