Hash :
78feddc2
Author :
Date :
2018-04-27T11:45:05
Vulkan: Take serials in PipelineDesc::updateShaders. This makes the API easy to use with internal shaders and pipelines. This is useful for the implementation of masked color clear. Also renames the serials as shader serials. This is more precise than program serials. Bug: angleproject:2455 Change-Id: Ie6247d1212ed4df856b561a5e9f16c0378202588 Reviewed-on: https://chromium-review.googlesource.com/1032857 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
//
// Copyright 2018 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.cpp:
// Pre-generated shader library for the ANGLE Vulkan back-end.
#include "libANGLE/renderer/vulkan/vk_internal_shaders.h"
#include "libANGLE/renderer/vulkan/RendererVk.h"
namespace rx
{
namespace vk
{
ShaderLibrary::ShaderLibrary()
{
}
ShaderLibrary::~ShaderLibrary()
{
}
void ShaderLibrary::destroy(VkDevice device)
{
for (ShaderAndSerial &shader : mShaders)
{
shader.get().destroy(device);
}
}
Error ShaderLibrary::getShader(RendererVk *renderer,
InternalShaderID shaderID,
const ShaderAndSerial **shaderOut)
{
ShaderAndSerial &shader = mShaders[shaderID];
*shaderOut = &shader;
if (shader.get().valid())
{
return NoError();
}
const priv::ShaderBlob &shaderCode = priv::GetInternalShaderBlob(shaderID);
// Create shader lazily. Access will need to be locked for multi-threading.
VkShaderModuleCreateInfo createInfo;
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
createInfo.pNext = nullptr;
createInfo.flags = 0;
createInfo.codeSize = shaderCode.codeSize;
createInfo.pCode = shaderCode.code;
ANGLE_TRY(shader.get().init(renderer->getDevice(), createInfo));
shader.updateSerial(renderer->issueShaderSerial());
return NoError();
}
} // namespace vk
} // namespace rx