Hash :
6d9f0aee
Author :
Date :
2023-11-30T00:00:00
Metal: Ensure helper invocations when derivatives are used
Set sample coverage mask to ensure that
fragment shader helper invocations are
performed when derivatives are used.
Fixed the following tests on Apple silicon:
dEQP-GLES2.functional.texture.mipmap
.2d.projected.nearest_linear_repeat
.2d.projected.linear_linear_repeat
.cube.projected.linear_nearest
.cube.projected.linear_linear
dEQP-GLES3.functional.texture.mipmap
.2d.projected.nearest_nearest_mirror
.2d.projected.linear_nearest_clamp
.2d.projected.linear_nearest_repeat
.2d.projected.linear_nearest_mirror
.2d.projected.nearest_linear_repeat
.2d.projected.linear_linear_clamp
.2d.projected.linear_linear_repeat
.3d.projected.nearest_nearest_mirror
.3d.projected.linear_nearest_clamp
.3d.projected.linear_nearest_repeat
.3d.projected.nearest_linear_clamp
.3d.projected.nearest_linear_mirror
.3d.projected.linear_linear_clamp
.3d.projected.linear_linear_repeat
Fixed: angleproject:8443
Fixed: angleproject:7023
Change-Id: I13fc52532b94de098dcf3e9f5f02d48a6c8913c7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5089131
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
//
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
#ifndef COMPILER_TRANSLATOR_MSL_PROGRAMPRELUDE_H_
#define COMPILER_TRANSLATOR_MSL_PROGRAMPRELUDE_H_
#include <unordered_set>
#include "common/angleutils.h"
namespace sh
{
class TInfoSinkBase;
class TIntermBlock;
enum class MetalShaderType
{
None,
Vertex,
Fragment,
Compute, // Unused currently
Count,
};
struct ProgramPreludeConfig
{
public:
ProgramPreludeConfig() {}
explicit ProgramPreludeConfig(MetalShaderType shaderType) : shaderType(shaderType) {}
bool hasStructEq = false;
bool usesDerivatives = false;
MetalShaderType shaderType = MetalShaderType::None;
};
// This emits fixed helper Metal code directly without adding code to the AST. This walks the AST to
// figure out the required what prelude MSL code is needed for various things in the AST. You can
// think of this as effectively inlining various portions of a helper library into the emitted
// Metal program.
[[nodiscard]] bool EmitProgramPrelude(TIntermBlock &root,
TInfoSinkBase &out,
const ProgramPreludeConfig &ppc);
} // namespace sh
#endif // COMPILER_TRANSLATOR_MSL_PROGRAMPRELUDE_H_