Merge pull request #11349 from vonchenplus/buffer_cache_crash
video_core: Fix moltenvk crash on macos
This commit is contained in:
		@@ -62,7 +62,11 @@ using BufferId = SlotId;
 | 
			
		||||
using VideoCore::Surface::PixelFormat;
 | 
			
		||||
using namespace Common::Literals;
 | 
			
		||||
 | 
			
		||||
#ifdef __APPLE__
 | 
			
		||||
constexpr u32 NUM_VERTEX_BUFFERS = 16;
 | 
			
		||||
#else
 | 
			
		||||
constexpr u32 NUM_VERTEX_BUFFERS = 32;
 | 
			
		||||
#endif
 | 
			
		||||
constexpr u32 NUM_TRANSFORM_FEEDBACK_BUFFERS = 4;
 | 
			
		||||
constexpr u32 NUM_GRAPHICS_UNIFORM_BUFFERS = 18;
 | 
			
		||||
constexpr u32 NUM_COMPUTE_UNIFORM_BUFFERS = 8;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,16 +3,16 @@
 | 
			
		||||
 | 
			
		||||
#version 450
 | 
			
		||||
 | 
			
		||||
precision mediump int;
 | 
			
		||||
precision highp float;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
    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 =
 | 
			
		||||
        uint(textureLod(depth_tex, coord, 0).r * (exp2(32.0) - 1.0));
 | 
			
		||||
    lowp uint stencil_val = textureLod(stencil_tex, coord, 0).r;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,16 +3,16 @@
 | 
			
		||||
 | 
			
		||||
#version 450
 | 
			
		||||
 | 
			
		||||
precision mediump int;
 | 
			
		||||
precision highp float;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
    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 =
 | 
			
		||||
        uint(textureLod(depth_tex, coord, 0).r * (exp2(32.0) - 1.0));
 | 
			
		||||
    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()) {
 | 
			
		||||
        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 down_shift = 0;
 | 
			
		||||
    if (texture_cache.IsRescaling()) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user