mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-22 02:41:49 -05:00
Merge pull request #11349 from vonchenplus/buffer_cache_crash
video_core: Fix moltenvk crash on macos
This commit is contained in:
commit
b577d7a55f
4 changed files with 25 additions and 8 deletions
|
@ -62,7 +62,11 @@ using BufferId = SlotId;
|
||||||
using VideoCore::Surface::PixelFormat;
|
using VideoCore::Surface::PixelFormat;
|
||||||
using namespace Common::Literals;
|
using namespace Common::Literals;
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
constexpr u32 NUM_VERTEX_BUFFERS = 16;
|
||||||
|
#else
|
||||||
constexpr u32 NUM_VERTEX_BUFFERS = 32;
|
constexpr u32 NUM_VERTEX_BUFFERS = 32;
|
||||||
|
#endif
|
||||||
constexpr u32 NUM_TRANSFORM_FEEDBACK_BUFFERS = 4;
|
constexpr u32 NUM_TRANSFORM_FEEDBACK_BUFFERS = 4;
|
||||||
constexpr u32 NUM_GRAPHICS_UNIFORM_BUFFERS = 18;
|
constexpr u32 NUM_GRAPHICS_UNIFORM_BUFFERS = 18;
|
||||||
constexpr u32 NUM_COMPUTE_UNIFORM_BUFFERS = 8;
|
constexpr u32 NUM_COMPUTE_UNIFORM_BUFFERS = 8;
|
||||||
|
|
|
@ -3,16 +3,16 @@
|
||||||
|
|
||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
|
precision mediump int;
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
layout(binding = 0) uniform sampler2D depth_tex;
|
layout(binding = 0) uniform sampler2D depth_tex;
|
||||||
layout(binding = 1) uniform isampler2D stencil_tex;
|
layout(binding = 1) uniform usampler2D stencil_tex;
|
||||||
|
|
||||||
layout(location = 0) out vec4 color;
|
layout(location = 0) out vec4 color;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
ivec2 coord = ivec2(gl_FragCoord.xy);
|
ivec2 coord = ivec2(gl_FragCoord.xy);
|
||||||
uint depth = uint(textureLod(depth_tex, coord, 0).r * (exp2(24.0) - 1.0f));
|
|
||||||
uint stencil = uint(textureLod(stencil_tex, coord, 0).r);
|
|
||||||
|
|
||||||
highp uint depth_val =
|
highp uint depth_val =
|
||||||
uint(textureLod(depth_tex, coord, 0).r * (exp2(32.0) - 1.0));
|
uint(textureLod(depth_tex, coord, 0).r * (exp2(32.0) - 1.0));
|
||||||
lowp uint stencil_val = textureLod(stencil_tex, coord, 0).r;
|
lowp uint stencil_val = textureLod(stencil_tex, coord, 0).r;
|
||||||
|
|
|
@ -3,16 +3,16 @@
|
||||||
|
|
||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
|
precision mediump int;
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
layout(binding = 0) uniform sampler2D depth_tex;
|
layout(binding = 0) uniform sampler2D depth_tex;
|
||||||
layout(binding = 1) uniform isampler2D stencil_tex;
|
layout(binding = 1) uniform usampler2D stencil_tex;
|
||||||
|
|
||||||
layout(location = 0) out vec4 color;
|
layout(location = 0) out vec4 color;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
ivec2 coord = ivec2(gl_FragCoord.xy);
|
ivec2 coord = ivec2(gl_FragCoord.xy);
|
||||||
uint depth = uint(textureLod(depth_tex, coord, 0).r * (exp2(24.0) - 1.0f));
|
|
||||||
uint stencil = uint(textureLod(stencil_tex, coord, 0).r);
|
|
||||||
|
|
||||||
highp uint depth_val =
|
highp uint depth_val =
|
||||||
uint(textureLod(depth_tex, coord, 0).r * (exp2(32.0) - 1.0));
|
uint(textureLod(depth_tex, coord, 0).r * (exp2(32.0) - 1.0));
|
||||||
lowp uint stencil_val = textureLod(stencil_tex, coord, 0).r;
|
lowp uint stencil_val = textureLod(stencil_tex, coord, 0).r;
|
||||||
|
|
|
@ -975,6 +975,19 @@ void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D::Regs& regs
|
||||||
if (!state_tracker.TouchScissors()) {
|
if (!state_tracker.TouchScissors()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!regs.viewport_scale_offset_enabled) {
|
||||||
|
const auto x = static_cast<float>(regs.surface_clip.x);
|
||||||
|
const auto y = static_cast<float>(regs.surface_clip.y);
|
||||||
|
const auto width = static_cast<float>(regs.surface_clip.width);
|
||||||
|
const auto height = static_cast<float>(regs.surface_clip.height);
|
||||||
|
VkRect2D scissor;
|
||||||
|
scissor.offset.x = static_cast<u32>(x);
|
||||||
|
scissor.offset.y = static_cast<u32>(y);
|
||||||
|
scissor.extent.width = static_cast<u32>(width != 0.0f ? width : 1.0f);
|
||||||
|
scissor.extent.height = static_cast<u32>(height != 0.0f ? height : 1.0f);
|
||||||
|
scheduler.Record([scissor](vk::CommandBuffer cmdbuf) { cmdbuf.SetScissor(0, scissor); });
|
||||||
|
return;
|
||||||
|
}
|
||||||
u32 up_scale = 1;
|
u32 up_scale = 1;
|
||||||
u32 down_shift = 0;
|
u32 down_shift = 0;
|
||||||
if (texture_cache.IsRescaling()) {
|
if (texture_cache.IsRescaling()) {
|
||||||
|
|
Loading…
Reference in a new issue