mirror of
				https://github.com/yuzu-emu/yuzu-android.git
				synced 2025-11-04 16:15:01 +00:00 
			
		
		
		
	Merge pull request #12083 from liamwhite/viewport
renderer_vulkan: ignore viewport stores on non-supporting drivers
This commit is contained in:
		
						commit
						12fba361bd
					
				| 
						 | 
				
			
			@ -407,7 +407,7 @@ void SetupCapabilities(const Profile& profile, const Info& info, EmitContext& ct
 | 
			
		|||
        }
 | 
			
		||||
        ctx.AddCapability(spv::Capability::DemoteToHelperInvocation);
 | 
			
		||||
    }
 | 
			
		||||
    if (info.stores[IR::Attribute::ViewportIndex]) {
 | 
			
		||||
    if (info.stores[IR::Attribute::ViewportIndex] && profile.support_multi_viewport) {
 | 
			
		||||
        ctx.AddCapability(spv::Capability::MultiViewport);
 | 
			
		||||
    }
 | 
			
		||||
    if (info.stores[IR::Attribute::ViewportMask] && profile.support_viewport_mask) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,6 +84,10 @@ std::optional<OutAttr> OutputAttrPointer(EmitContext& ctx, IR::Attribute attr) {
 | 
			
		|||
        }
 | 
			
		||||
        return std::nullopt;
 | 
			
		||||
    case IR::Attribute::ViewportIndex:
 | 
			
		||||
        if (!ctx.profile.support_multi_viewport) {
 | 
			
		||||
            LOG_WARNING(Shader, "Ignoring viewport index store on non-supporting driver");
 | 
			
		||||
            return std::nullopt;
 | 
			
		||||
        }
 | 
			
		||||
        if (ctx.profile.support_viewport_index_layer_non_geometry ||
 | 
			
		||||
            ctx.stage == Shader::Stage::Geometry) {
 | 
			
		||||
            return OutAttr{ctx.viewport_index, ctx.U32[1]};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@ struct Profile {
 | 
			
		|||
    bool support_gl_sparse_textures{};
 | 
			
		||||
    bool support_gl_derivative_control{};
 | 
			
		||||
    bool support_scaled_attributes{};
 | 
			
		||||
    bool support_multi_viewport{};
 | 
			
		||||
 | 
			
		||||
    bool warp_size_potentially_larger_than_guest{};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -351,6 +351,7 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, const Device& device
 | 
			
		|||
        .support_geometry_shader_passthrough = device.IsNvGeometryShaderPassthroughSupported(),
 | 
			
		||||
        .support_native_ndc = device.IsExtDepthClipControlSupported(),
 | 
			
		||||
        .support_scaled_attributes = !device.MustEmulateScaledFormats(),
 | 
			
		||||
        .support_multi_viewport = device.SupportsMultiViewport(),
 | 
			
		||||
 | 
			
		||||
        .warp_size_potentially_larger_than_guest = device.IsWarpSizePotentiallyBiggerThanGuest(),
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -669,6 +669,10 @@ public:
 | 
			
		|||
        return supports_conditional_barriers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool SupportsMultiViewport() const {
 | 
			
		||||
        return features2.features.multiViewport;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [[nodiscard]] static constexpr bool CheckBrokenCompute(VkDriverId driver_id,
 | 
			
		||||
                                                           u32 driver_version) {
 | 
			
		||||
        if (driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue