Edit

kc3-lang/angle/src/libANGLE/renderer/vulkan/GlslangWrapperVk.cpp

Branch :

  • Show log

    Commit

  • Author : Le Quyen
    Date : 2019-10-14 14:49:49
    Hash : a48f95ab
    Message : Move Vulkan GlslangWrapper code to a shared location. Metal backend will reuse Vulkan's GlslangWrapper code. The Metal backend will use this code to translate glsl to spirv then cross compile to Metal Shading Language using spirv-cross. So the source code of GlslangWrapper should be moved outside vulkan folder. Bug: angleproject:2634 Change-Id: I208062daf0d77756c9d32cfdab925b7dfdf83e05 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1858042 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/libANGLE/renderer/vulkan/GlslangWrapperVk.cpp
  • //
    // Copyright 2016 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.
    //
    // GlslangWrapperVk: Wrapper for Vulkan's glslang compiler.
    //
    
    #include "libANGLE/renderer/vulkan/GlslangWrapperVk.h"
    
    #include "libANGLE/renderer/glslang_wrapper_utils.h"
    #include "libANGLE/renderer/vulkan/ContextVk.h"
    #include "libANGLE/renderer/vulkan/vk_cache_utils.h"
    
    namespace rx
    {
    namespace
    {
    angle::Result ErrorHandler(vk::Context *context, GlslangError)
    {
        ANGLE_VK_CHECK(context, false, VK_ERROR_INVALID_SHADER_NV);
        return angle::Result::Stop;
    }
    
    GlslangSourceOptions CreateSourceOptions()
    {
        GlslangSourceOptions options;
        options.uniformsAndXfbDescriptorSetIndex = kUniformsAndXfbDescriptorSetIndex;
        options.textureDescriptorSetIndex        = kTextureDescriptorSetIndex;
        options.shaderResourceDescriptorSetIndex = kShaderResourceDescriptorSetIndex;
        options.driverUniformsDescriptorSetIndex = kDriverUniformsDescriptorSetIndex;
        options.xfbBindingIndexStart             = kXfbBindingIndexStart;
        return options;
    }
    }  // namespace
    
    // static
    void GlslangWrapperVk::GetShaderSource(bool useOldRewriteStructSamplers,
                                           const gl::ProgramState &programState,
                                           const gl::ProgramLinkedResources &resources,
                                           gl::ShaderMap<std::string> *shaderSourcesOut)
    {
        GlslangGetShaderSource(CreateSourceOptions(), useOldRewriteStructSamplers, programState,
                               resources, shaderSourcesOut);
    }
    
    // static
    angle::Result GlslangWrapperVk::GetShaderCode(vk::Context *context,
                                                  const gl::Caps &glCaps,
                                                  bool enableLineRasterEmulation,
                                                  const gl::ShaderMap<std::string> &shaderSources,
                                                  gl::ShaderMap<std::vector<uint32_t>> *shaderCodeOut)
    {
        return GlslangGetShaderSpirvCode(
            [context](GlslangError error) { return ErrorHandler(context, error); }, glCaps,
            enableLineRasterEmulation, shaderSources, shaderCodeOut);
    }
    }  // namespace rx