Edit

kc3-lang/angle/src/compiler/translator/OutputESSL.cpp

Branch :

  • Show log

    Commit

  • Author : Yan
    Date : 2019-10-14 14:13:59
    Hash : 17b3c2f3
    Message : Implement SamplerVideoWEBGL for WEBGL_video_texture extension on desktop WEBGL_video_texture is an extension that will improve uploading video frame to WebGL performance. (https://www.khronos.org/registry/webgl/extensions/proposals/WEBGL_video_texture/) This extension introduced a new texture type TEXTURE_VIDEO_IMAGE_WEBGL and a new sampler type samplerVideoWEBGL to sample it. In chromium implementation, TEXTURE_VIDEO_IMAGE_WEBGL maps to different native texture type based on platform. On desktop, it maps to GL_TEXTURE2D(Currently supported). On Android, it should map to GL_TEXTURE_EXTERNAL(TODO). SamplerVideoWEBGL needs to be mapped to sampler2D or samplerExternalOES according to TEXTURE_VIDEO_IMAGE_WEBGL implementation. This patch implements samplerVideoWEBGL in Angle to support WEBGL_video_texture on desktop. In this case, samplerVideoWEBGL should map to sampler2D. Bug: chromium:776222, angleproject:3889 Change-Id: Idb0a5fcde37ca75ccc1181226b91f257212e7500 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1866274 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/compiler/translator/OutputESSL.cpp
  • //
    // Copyright 2002 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.
    //
    
    #include "compiler/translator/OutputESSL.h"
    
    namespace sh
    {
    
    TOutputESSL::TOutputESSL(TInfoSinkBase &objSink,
                             ShArrayIndexClampingStrategy clampingStrategy,
                             ShHashFunction64 hashFunction,
                             NameMap &nameMap,
                             TSymbolTable *symbolTable,
                             sh::GLenum shaderType,
                             int shaderVersion,
                             bool forceHighp,
                             ShCompileOptions compileOptions)
        : TOutputGLSLBase(objSink,
                          clampingStrategy,
                          hashFunction,
                          nameMap,
                          symbolTable,
                          shaderType,
                          shaderVersion,
                          SH_ESSL_OUTPUT,
                          compileOptions),
          mForceHighp(forceHighp)
    {}
    
    bool TOutputESSL::writeVariablePrecision(TPrecision precision)
    {
        if (precision == EbpUndefined)
            return false;
    
        TInfoSinkBase &out = objSink();
        if (mForceHighp)
            out << getPrecisionString(EbpHigh);
        else
            out << getPrecisionString(precision);
        return true;
    }
    
    ImmutableString TOutputESSL::translateTextureFunction(const ImmutableString &name,
                                                          const ShCompileOptions &option)
    {
        // Check WEBGL_video_texture invocation first.
        if (name == "textureVideoWEBGL")
        {
            if (option & SH_TAKE_VIDEO_TEXTURE_AS_EXTERNAL_OES)
            {
                // TODO(http://anglebug.com/3889): Implement external image situation.
                UNIMPLEMENTED();
                return ImmutableString("");
            }
            else
            {
                // Default translating textureVideoWEBGL to texture2D.
                return ImmutableString("texture2D");
            }
        }
    
        return name;
    }
    
    }  // namespace sh