Edit

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

Branch :

  • Show log

    Commit

  • Author : James Dong
    Date : 2019-06-07 12:10:46
    Hash : 2806a898
    Message : Vulkan: implement primitive restart Implements ES 3.0 feature GL_PRIMITIVE_RESTART_FIXED_INDEX, which allows the application to use a fixed "restart" index to restart the primitive during a single draw call. This change does't handle GL_LINE_LOOP primitives, which requires a bit of special handling. Bug: angleproject:3215 Change-Id: I2388852683fd17328a6a76c48d70a24d67ce8b67 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1650301 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>

  • src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp
  • // GENERATED FILE - DO NOT EDIT.
    // Generated by gen_vk_internal_shaders.py using data from shaders/src/*
    //
    // Copyright 2019 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.
    //
    // vk_internal_shaders_autogen.cpp:
    //   Pre-generated shader library for the ANGLE Vulkan back-end.
    
    #include "libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h"
    
    namespace rx
    {
    namespace vk
    {
    namespace
    {
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000000.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000001.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000002.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000003.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000004.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000005.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000006.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000007.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000008.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000009.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000A.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000B.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000C.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000D.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000E.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.0000000F.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000010.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000011.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000012.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000013.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000014.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000015.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000016.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000017.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolveStencilNoExport.comp.00000000.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolveStencilNoExport.comp.00000001.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolveStencilNoExport.comp.00000002.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BlitResolveStencilNoExport.comp.00000003.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000000.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000001.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000002.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000003.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000004.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000005.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000006.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000007.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000008.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.00000009.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000A.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/BufferUtils.comp.0000000B.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000000.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000001.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000003.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000004.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000008.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000009.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000A.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000B.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000C.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000D.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000E.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000F.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000000.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000001.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000002.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000003.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000004.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000005.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000006.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000007.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000008.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000009.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000A.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000B.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000C.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000D.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000E.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.0000000F.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000010.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000011.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000012.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000013.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000014.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000015.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000016.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000017.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000000.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000001.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000002.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000003.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000004.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000005.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000008.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000009.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000000A.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000000B.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000000C.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.0000000D.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000010.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000011.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000012.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000013.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000014.inc"
    #include "libANGLE/renderer/vulkan/shaders/gen/ImageCopy.frag.00000015.inc"
    
    // This is SPIR-V binary blob and the size.
    struct ShaderBlob
    {
        const uint32_t *code;
        size_t codeSize;
    };
    
    constexpr ShaderBlob kBlitResolve_frag_shaders[] = {
        {kBlitResolve_frag_00000000, sizeof(kBlitResolve_frag_00000000)},
        {kBlitResolve_frag_00000001, sizeof(kBlitResolve_frag_00000001)},
        {kBlitResolve_frag_00000002, sizeof(kBlitResolve_frag_00000002)},
        {kBlitResolve_frag_00000003, sizeof(kBlitResolve_frag_00000003)},
        {kBlitResolve_frag_00000004, sizeof(kBlitResolve_frag_00000004)},
        {kBlitResolve_frag_00000005, sizeof(kBlitResolve_frag_00000005)},
        {kBlitResolve_frag_00000006, sizeof(kBlitResolve_frag_00000006)},
        {kBlitResolve_frag_00000007, sizeof(kBlitResolve_frag_00000007)},
        {kBlitResolve_frag_00000008, sizeof(kBlitResolve_frag_00000008)},
        {kBlitResolve_frag_00000009, sizeof(kBlitResolve_frag_00000009)},
        {kBlitResolve_frag_0000000A, sizeof(kBlitResolve_frag_0000000A)},
        {kBlitResolve_frag_0000000B, sizeof(kBlitResolve_frag_0000000B)},
        {kBlitResolve_frag_0000000C, sizeof(kBlitResolve_frag_0000000C)},
        {kBlitResolve_frag_0000000D, sizeof(kBlitResolve_frag_0000000D)},
        {kBlitResolve_frag_0000000E, sizeof(kBlitResolve_frag_0000000E)},
        {kBlitResolve_frag_0000000F, sizeof(kBlitResolve_frag_0000000F)},
        {kBlitResolve_frag_00000010, sizeof(kBlitResolve_frag_00000010)},
        {kBlitResolve_frag_00000011, sizeof(kBlitResolve_frag_00000011)},
        {kBlitResolve_frag_00000012, sizeof(kBlitResolve_frag_00000012)},
        {kBlitResolve_frag_00000013, sizeof(kBlitResolve_frag_00000013)},
        {kBlitResolve_frag_00000014, sizeof(kBlitResolve_frag_00000014)},
        {kBlitResolve_frag_00000015, sizeof(kBlitResolve_frag_00000015)},
        {kBlitResolve_frag_00000016, sizeof(kBlitResolve_frag_00000016)},
        {kBlitResolve_frag_00000017, sizeof(kBlitResolve_frag_00000017)},
    };
    constexpr ShaderBlob kBlitResolveStencilNoExport_comp_shaders[] = {
        {kBlitResolveStencilNoExport_comp_00000000, sizeof(kBlitResolveStencilNoExport_comp_00000000)},
        {kBlitResolveStencilNoExport_comp_00000001, sizeof(kBlitResolveStencilNoExport_comp_00000001)},
        {kBlitResolveStencilNoExport_comp_00000002, sizeof(kBlitResolveStencilNoExport_comp_00000002)},
        {kBlitResolveStencilNoExport_comp_00000003, sizeof(kBlitResolveStencilNoExport_comp_00000003)},
    };
    constexpr ShaderBlob kBufferUtils_comp_shaders[] = {
        {kBufferUtils_comp_00000000, sizeof(kBufferUtils_comp_00000000)},
        {kBufferUtils_comp_00000001, sizeof(kBufferUtils_comp_00000001)},
        {kBufferUtils_comp_00000002, sizeof(kBufferUtils_comp_00000002)},
        {kBufferUtils_comp_00000003, sizeof(kBufferUtils_comp_00000003)},
        {kBufferUtils_comp_00000004, sizeof(kBufferUtils_comp_00000004)},
        {kBufferUtils_comp_00000005, sizeof(kBufferUtils_comp_00000005)},
        {kBufferUtils_comp_00000006, sizeof(kBufferUtils_comp_00000006)},
        {kBufferUtils_comp_00000007, sizeof(kBufferUtils_comp_00000007)},
        {kBufferUtils_comp_00000008, sizeof(kBufferUtils_comp_00000008)},
        {kBufferUtils_comp_00000009, sizeof(kBufferUtils_comp_00000009)},
        {kBufferUtils_comp_0000000A, sizeof(kBufferUtils_comp_0000000A)},
        {kBufferUtils_comp_0000000B, sizeof(kBufferUtils_comp_0000000B)},
    };
    constexpr ShaderBlob kConvertIndex_comp_shaders[] = {
        {kConvertIndex_comp_00000000, sizeof(kConvertIndex_comp_00000000)},
        {kConvertIndex_comp_00000001, sizeof(kConvertIndex_comp_00000001)},
    };
    constexpr ShaderBlob kConvertVertex_comp_shaders[] = {
        {kConvertVertex_comp_00000000, sizeof(kConvertVertex_comp_00000000)},
        {kConvertVertex_comp_00000001, sizeof(kConvertVertex_comp_00000001)},
        {kConvertVertex_comp_00000002, sizeof(kConvertVertex_comp_00000002)},
        {kConvertVertex_comp_00000003, sizeof(kConvertVertex_comp_00000003)},
        {kConvertVertex_comp_00000004, sizeof(kConvertVertex_comp_00000004)},
        {kConvertVertex_comp_00000005, sizeof(kConvertVertex_comp_00000005)},
        {kConvertVertex_comp_00000006, sizeof(kConvertVertex_comp_00000006)},
        {kConvertVertex_comp_00000007, sizeof(kConvertVertex_comp_00000007)},
        {kConvertVertex_comp_00000008, sizeof(kConvertVertex_comp_00000008)},
        {kConvertVertex_comp_00000009, sizeof(kConvertVertex_comp_00000009)},
        {kConvertVertex_comp_0000000A, sizeof(kConvertVertex_comp_0000000A)},
        {kConvertVertex_comp_0000000B, sizeof(kConvertVertex_comp_0000000B)},
        {kConvertVertex_comp_0000000C, sizeof(kConvertVertex_comp_0000000C)},
        {kConvertVertex_comp_0000000D, sizeof(kConvertVertex_comp_0000000D)},
        {kConvertVertex_comp_0000000E, sizeof(kConvertVertex_comp_0000000E)},
        {kConvertVertex_comp_0000000F, sizeof(kConvertVertex_comp_0000000F)},
    };
    constexpr ShaderBlob kFullScreenQuad_vert_shaders[] = {
        {kFullScreenQuad_vert_00000000, sizeof(kFullScreenQuad_vert_00000000)},
    };
    constexpr ShaderBlob kImageClear_frag_shaders[] = {
        {kImageClear_frag_00000000, sizeof(kImageClear_frag_00000000)},
        {kImageClear_frag_00000001, sizeof(kImageClear_frag_00000001)},
        {kImageClear_frag_00000002, sizeof(kImageClear_frag_00000002)},
        {kImageClear_frag_00000003, sizeof(kImageClear_frag_00000003)},
        {kImageClear_frag_00000004, sizeof(kImageClear_frag_00000004)},
        {kImageClear_frag_00000005, sizeof(kImageClear_frag_00000005)},
        {kImageClear_frag_00000006, sizeof(kImageClear_frag_00000006)},
        {kImageClear_frag_00000007, sizeof(kImageClear_frag_00000007)},
        {kImageClear_frag_00000008, sizeof(kImageClear_frag_00000008)},
        {kImageClear_frag_00000009, sizeof(kImageClear_frag_00000009)},
        {kImageClear_frag_0000000A, sizeof(kImageClear_frag_0000000A)},
        {kImageClear_frag_0000000B, sizeof(kImageClear_frag_0000000B)},
        {kImageClear_frag_0000000C, sizeof(kImageClear_frag_0000000C)},
        {kImageClear_frag_0000000D, sizeof(kImageClear_frag_0000000D)},
        {kImageClear_frag_0000000E, sizeof(kImageClear_frag_0000000E)},
        {kImageClear_frag_0000000F, sizeof(kImageClear_frag_0000000F)},
        {kImageClear_frag_00000010, sizeof(kImageClear_frag_00000010)},
        {kImageClear_frag_00000011, sizeof(kImageClear_frag_00000011)},
        {kImageClear_frag_00000012, sizeof(kImageClear_frag_00000012)},
        {kImageClear_frag_00000013, sizeof(kImageClear_frag_00000013)},
        {kImageClear_frag_00000014, sizeof(kImageClear_frag_00000014)},
        {kImageClear_frag_00000015, sizeof(kImageClear_frag_00000015)},
        {kImageClear_frag_00000016, sizeof(kImageClear_frag_00000016)},
        {kImageClear_frag_00000017, sizeof(kImageClear_frag_00000017)},
    };
    constexpr ShaderBlob kImageCopy_frag_shaders[] = {
        {kImageCopy_frag_00000000, sizeof(kImageCopy_frag_00000000)},
        {kImageCopy_frag_00000001, sizeof(kImageCopy_frag_00000001)},
        {kImageCopy_frag_00000002, sizeof(kImageCopy_frag_00000002)},
        {kImageCopy_frag_00000003, sizeof(kImageCopy_frag_00000003)},
        {kImageCopy_frag_00000004, sizeof(kImageCopy_frag_00000004)},
        {kImageCopy_frag_00000005, sizeof(kImageCopy_frag_00000005)},
        {nullptr, 0},  // 0x00000006
        {nullptr, 0},  // 0x00000007
        {kImageCopy_frag_00000008, sizeof(kImageCopy_frag_00000008)},
        {kImageCopy_frag_00000009, sizeof(kImageCopy_frag_00000009)},
        {kImageCopy_frag_0000000A, sizeof(kImageCopy_frag_0000000A)},
        {kImageCopy_frag_0000000B, sizeof(kImageCopy_frag_0000000B)},
        {kImageCopy_frag_0000000C, sizeof(kImageCopy_frag_0000000C)},
        {kImageCopy_frag_0000000D, sizeof(kImageCopy_frag_0000000D)},
        {nullptr, 0},  // 0x0000000E
        {nullptr, 0},  // 0x0000000F
        {kImageCopy_frag_00000010, sizeof(kImageCopy_frag_00000010)},
        {kImageCopy_frag_00000011, sizeof(kImageCopy_frag_00000011)},
        {kImageCopy_frag_00000012, sizeof(kImageCopy_frag_00000012)},
        {kImageCopy_frag_00000013, sizeof(kImageCopy_frag_00000013)},
        {kImageCopy_frag_00000014, sizeof(kImageCopy_frag_00000014)},
        {kImageCopy_frag_00000015, sizeof(kImageCopy_frag_00000015)},
    };
    
    angle::Result GetShader(Context *context,
                            RefCounted<ShaderAndSerial> *shaders,
                            const ShaderBlob *shaderBlobs,
                            size_t shadersCount,
                            uint32_t shaderFlags,
                            RefCounted<ShaderAndSerial> **shaderOut)
    {
        ASSERT(shaderFlags < shadersCount);
        RefCounted<ShaderAndSerial> &shader = shaders[shaderFlags];
        *shaderOut                          = &shader;
    
        if (shader.get().valid())
        {
            return angle::Result::Continue;
        }
    
        // Create shader lazily. Access will need to be locked for multi-threading.
        const ShaderBlob &shaderCode = shaderBlobs[shaderFlags];
        ASSERT(shaderCode.code != nullptr);
    
        return InitShaderAndSerial(context, &shader.get(), shaderCode.code, shaderCode.codeSize);
    }
    }  // anonymous namespace
    
    ShaderLibrary::ShaderLibrary() {}
    
    ShaderLibrary::~ShaderLibrary() {}
    
    void ShaderLibrary::destroy(VkDevice device)
    {
        for (RefCounted<ShaderAndSerial> &shader : mBlitResolve_frag_shaders)
        {
            shader.get().destroy(device);
        }
        for (RefCounted<ShaderAndSerial> &shader : mBlitResolveStencilNoExport_comp_shaders)
        {
            shader.get().destroy(device);
        }
        for (RefCounted<ShaderAndSerial> &shader : mBufferUtils_comp_shaders)
        {
            shader.get().destroy(device);
        }
        for (RefCounted<ShaderAndSerial> &shader : mConvertIndex_comp_shaders)
        {
            shader.get().destroy(device);
        }
        for (RefCounted<ShaderAndSerial> &shader : mConvertVertex_comp_shaders)
        {
            shader.get().destroy(device);
        }
        for (RefCounted<ShaderAndSerial> &shader : mFullScreenQuad_vert_shaders)
        {
            shader.get().destroy(device);
        }
        for (RefCounted<ShaderAndSerial> &shader : mImageClear_frag_shaders)
        {
            shader.get().destroy(device);
        }
        for (RefCounted<ShaderAndSerial> &shader : mImageCopy_frag_shaders)
        {
            shader.get().destroy(device);
        }
    }
    
    angle::Result ShaderLibrary::getBlitResolve_frag(Context *context,
                                                     uint32_t shaderFlags,
                                                     RefCounted<ShaderAndSerial> **shaderOut)
    {
        return GetShader(context, mBlitResolve_frag_shaders, kBlitResolve_frag_shaders,
                         ArraySize(kBlitResolve_frag_shaders), shaderFlags, shaderOut);
    }
    
    angle::Result ShaderLibrary::getBlitResolveStencilNoExport_comp(
        Context *context,
        uint32_t shaderFlags,
        RefCounted<ShaderAndSerial> **shaderOut)
    {
        return GetShader(context, mBlitResolveStencilNoExport_comp_shaders,
                         kBlitResolveStencilNoExport_comp_shaders,
                         ArraySize(kBlitResolveStencilNoExport_comp_shaders), shaderFlags, shaderOut);
    }
    
    angle::Result ShaderLibrary::getBufferUtils_comp(Context *context,
                                                     uint32_t shaderFlags,
                                                     RefCounted<ShaderAndSerial> **shaderOut)
    {
        return GetShader(context, mBufferUtils_comp_shaders, kBufferUtils_comp_shaders,
                         ArraySize(kBufferUtils_comp_shaders), shaderFlags, shaderOut);
    }
    
    angle::Result ShaderLibrary::getConvertIndex_comp(Context *context,
                                                      uint32_t shaderFlags,
                                                      RefCounted<ShaderAndSerial> **shaderOut)
    {
        return GetShader(context, mConvertIndex_comp_shaders, kConvertIndex_comp_shaders,
                         ArraySize(kConvertIndex_comp_shaders), shaderFlags, shaderOut);
    }
    
    angle::Result ShaderLibrary::getConvertVertex_comp(Context *context,
                                                       uint32_t shaderFlags,
                                                       RefCounted<ShaderAndSerial> **shaderOut)
    {
        return GetShader(context, mConvertVertex_comp_shaders, kConvertVertex_comp_shaders,
                         ArraySize(kConvertVertex_comp_shaders), shaderFlags, shaderOut);
    }
    
    angle::Result ShaderLibrary::getFullScreenQuad_vert(Context *context,
                                                        uint32_t shaderFlags,
                                                        RefCounted<ShaderAndSerial> **shaderOut)
    {
        return GetShader(context, mFullScreenQuad_vert_shaders, kFullScreenQuad_vert_shaders,
                         ArraySize(kFullScreenQuad_vert_shaders), shaderFlags, shaderOut);
    }
    
    angle::Result ShaderLibrary::getImageClear_frag(Context *context,
                                                    uint32_t shaderFlags,
                                                    RefCounted<ShaderAndSerial> **shaderOut)
    {
        return GetShader(context, mImageClear_frag_shaders, kImageClear_frag_shaders,
                         ArraySize(kImageClear_frag_shaders), shaderFlags, shaderOut);
    }
    
    angle::Result ShaderLibrary::getImageCopy_frag(Context *context,
                                                   uint32_t shaderFlags,
                                                   RefCounted<ShaderAndSerial> **shaderOut)
    {
        return GetShader(context, mImageCopy_frag_shaders, kImageCopy_frag_shaders,
                         ArraySize(kImageCopy_frag_shaders), shaderFlags, shaderOut);
    }
    
    }  // namespace vk
    }  // namespace rx