Hash :
550f2a3e
Author :
Date :
2021-02-24T09:49:42
Vulkan: Shader support for EXT_shader_framebuffer_fetch_non_coherent Translator can accept gl_LastFragData and 'inout' variable to gain access to framebuffer attachment data. The Vulkan translator replaces it with the SubpassInput type variable. Note that this works only for the noncoherent version of the extension. Bug: angleproject:5454 Test: *EXTShaderFramebufferFetchNoncoherent*.* Change-Id: I392f84ee3ad3eb9fbd09d0b7ff83731a9a3f33f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598060 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.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
//
// 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.
//
// ReplaceForShaderFramebufferFetch.h: Find any references to gl_LastFragData, and replace it with
// ANGLELastFragData.
//
#ifndef COMPILER_TRANSLATOR_TREEUTIL_REPLACEFORSHADERFRAMEBUFFERFETCH_H_
#define COMPILER_TRANSLATOR_TREEUTIL_REPLACEFORSHADERFRAMEBUFFERFETCH_H_
#include "common/angleutils.h"
namespace sh
{
class TCompiler;
class TIntermBlock;
class TSymbolTable;
struct ShaderVariable;
// Declare the global variable, "ANGLELastFragData", and at the begining of the main function,
// assign a subpassLoad value to it. Then replace every gl_LastFragData to "ANGLELastFragData". This
// is to solve the problem GLSL for Vulkan can't process gl_LastFragData variable.
ANGLE_NO_DISCARD bool ReplaceLastFragData(TCompiler *compiler,
TIntermBlock *root,
TSymbolTable *symbolTable,
std::vector<ShaderVariable> *uniforms);
// Similar to "ANGLELastFragData", but the difference is the variable for loading a framebuffer
// data. The variable decorated with a inout qualifier will be replaced to the variable decorated
// with a out qualifier. And this variable will be used to load the framebuffer data.
ANGLE_NO_DISCARD bool ReplaceInOutVariables(TCompiler *compiler,
TIntermBlock *root,
TSymbolTable *symbolTable,
std::vector<ShaderVariable> *uniforms);
} // namespace sh
#endif // COMPILER_TRANSLATOR_TREEUTIL_REPLACEFORSHADERFRAMEBUFFERFETCH_H_