| // |
| // Copyright 2023 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. |
| // |
| // Multiple GPU vendors have issues with transforming explicit cubemap |
| // derivatives onto the appropriate face. The workarounds are vendor-specific. |
| |
| #ifndef COMPILER_TRANSLATOR_TREEOPS_PRETRANSFORMTEXTURECUBEGRADDERIVATIVES_H_ |
| #define COMPILER_TRANSLATOR_TREEOPS_PRETRANSFORMTEXTURECUBEGRADDERIVATIVES_H_ |
| |
| #include "compiler/translator/tree_util/IntermTraverse.h" |
| |
| namespace sh |
| { |
| |
| // GLSL specs say the following regarding cube |
| // map sampling with explicit derivatives: |
| // |
| // For the cube version, the partial derivatives of |
| // P are assumed to be in the coordinate system used |
| // before texture coordinates are projected onto the |
| // appropriate cube face. |
| // |
| // Apple silicon expects them partially pre-projected |
| // onto the target face and written to certain vector |
| // components depending on the major axis. |
| [[nodiscard]] bool PreTransformTextureCubeGradDerivatives(TCompiler *compiler, |
| TIntermBlock *root, |
| TSymbolTable *symbolTable, |
| int shaderVersion); |
| |
| } // namespace sh |
| |
| #endif // COMPILER_TRANSLATOR_TREEOPS_PRETRANSFORMTEXTURECUBEGRADDERIVATIVES_H_ |