Commit c7c38731 by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Move SpirvBlob definition to common/

For use by the translator. Bug: angleproject:4889 Change-Id: Ie95cafd3cfcdde50acc5d26d3c00e6574186a805 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2737276 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 8844599f
{ {
"src/common/spirv/gen_spirv_builder_and_parser.py": "src/common/spirv/gen_spirv_builder_and_parser.py":
"ac2db108072c8c12c7817fd923e22bde", "5ddd90060971e4cb7f8867e488e3d73a",
"src/common/spirv/spirv_instruction_builder_autogen.cpp": "src/common/spirv/spirv_instruction_builder_autogen.cpp":
"52f80a4b5b549ff5568be9f74dd2e3c1", "ec0ed8f398906dc49c35100fe1ac7a4a",
"src/common/spirv/spirv_instruction_builder_autogen.h": "src/common/spirv/spirv_instruction_builder_autogen.h":
"54ff9094108732d4b10c4c33b4fb38e0", "e704ce45c18d87996e8a920bb92e505a",
"src/common/spirv/spirv_instruction_parser_autogen.cpp": "src/common/spirv/spirv_instruction_parser_autogen.cpp":
"55d28bb4b003dbecf31e162ff996fc4f", "55d28bb4b003dbecf31e162ff996fc4f",
"src/common/spirv/spirv_instruction_parser_autogen.h": "src/common/spirv/spirv_instruction_parser_autogen.h":
"c35834942632d4cd1587bf7d66721df7", "d1e45755f704b7bd587be379e5eabd67",
"third_party/vulkan-deps/spirv-headers/src/include/spirv/1.0/spirv.core.grammar.json": "third_party/vulkan-deps/spirv-headers/src/include/spirv/1.0/spirv.core.grammar.json":
"a8c4239344b2fc10bfc4ace7ddee1867" "a8c4239344b2fc10bfc4ace7ddee1867"
} }
\ No newline at end of file
...@@ -27,7 +27,7 @@ void ValidateSpirvMessage(spv_message_level_t level, ...@@ -27,7 +27,7 @@ void ValidateSpirvMessage(spv_message_level_t level,
} }
} // anonymous namespace } // anonymous namespace
bool Validate(const std::vector<uint32_t> &blob) bool Validate(const Blob &blob)
{ {
spvtools::SpirvTools spirvTools(SPV_ENV_VULKAN_1_1); spvtools::SpirvTools spirvTools(SPV_ENV_VULKAN_1_1);
...@@ -44,7 +44,7 @@ bool Validate(const std::vector<uint32_t> &blob) ...@@ -44,7 +44,7 @@ bool Validate(const std::vector<uint32_t> &blob)
return result; return result;
} }
#else // ANGLE_ENABLE_ASSERTS #else // ANGLE_ENABLE_ASSERTS
bool Validate(const std::vector<uint32_t> &blob) bool Validate(const Blob &blob)
{ {
// Placeholder implementation since this is only used inside an ASSERT(). // Placeholder implementation since this is only used inside an ASSERT().
// Return false to indicate an error in case this is ever accidentally used somewhere else. // Return false to indicate an error in case this is ever accidentally used somewhere else.
......
...@@ -41,6 +41,8 @@ HEADER_TEMPLATE = """// GENERATED FILE - DO NOT EDIT. ...@@ -41,6 +41,8 @@ HEADER_TEMPLATE = """// GENERATED FILE - DO NOT EDIT.
#ifndef COMMON_SPIRV_{file_name_capitalized}AUTOGEN_H_ #ifndef COMMON_SPIRV_{file_name_capitalized}AUTOGEN_H_
#define COMMON_SPIRV_{file_name_capitalized}AUTOGEN_H_ #define COMMON_SPIRV_{file_name_capitalized}AUTOGEN_H_
#include <spirv/unified1/spirv.hpp>
#include "spirv_types.h" #include "spirv_types.h"
namespace angle namespace angle
...@@ -132,7 +134,7 @@ PARSER_FIXED_FUNCTIONS = """void GetInstructionOpAndLength(const uint32_t *_inst ...@@ -132,7 +134,7 @@ PARSER_FIXED_FUNCTIONS = """void GetInstructionOpAndLength(const uint32_t *_inst
} }
""" """
TEMPLATE_BUILDER_FUNCTION_PROTOTYPE = """void Write{op}(std::vector<uint32_t> *blob {param_list})""" TEMPLATE_BUILDER_FUNCTION_PROTOTYPE = """void Write{op}(Blob *blob {param_list})"""
TEMPLATE_BUILDER_FUNCTION_BODY = """{{ TEMPLATE_BUILDER_FUNCTION_BODY = """{{
const size_t startSize = blob->size(); const size_t startSize = blob->size();
blob->push_back(0); blob->push_back(0);
......
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
#ifndef COMMON_SPIRV_SPIRVINSTRUCTIONPARSERAUTOGEN_H_ #ifndef COMMON_SPIRV_SPIRVINSTRUCTIONPARSERAUTOGEN_H_
#define COMMON_SPIRV_SPIRVINSTRUCTIONPARSERAUTOGEN_H_ #define COMMON_SPIRV_SPIRVINSTRUCTIONPARSERAUTOGEN_H_
#include <spirv/unified1/spirv.hpp>
#include "spirv_types.h" #include "spirv_types.h"
namespace angle namespace angle
......
...@@ -10,8 +10,6 @@ ...@@ -10,8 +10,6 @@
#ifndef COMMON_SPIRV_TYPES_H_ #ifndef COMMON_SPIRV_TYPES_H_
#define COMMON_SPIRV_TYPES_H_ #define COMMON_SPIRV_TYPES_H_
#include <spirv/unified1/spirv.hpp>
#include "common/FastVector.h" #include "common/FastVector.h"
#include <vector> #include <vector>
...@@ -44,7 +42,7 @@ class BoxedUint32 ...@@ -44,7 +42,7 @@ class BoxedUint32
struct IdRefHelper struct IdRefHelper
{ {
spv::Id value; uint32_t value;
}; };
struct LiteralIntegerHelper struct LiteralIntegerHelper
{ {
...@@ -109,9 +107,12 @@ using PairIdRefIdRefList = FastVectorHelper<PairIdRefIdRef>; ...@@ -109,9 +107,12 @@ using PairIdRefIdRefList = FastVectorHelper<PairIdRefIdRef>;
// Id 0 is invalid in SPIR-V. // Id 0 is invalid in SPIR-V.
constexpr uint32_t kMinValidId = 1; constexpr uint32_t kMinValidId = 1;
// The SPIR-V blob is a sequence of uint32_t's
using Blob = std::vector<uint32_t>;
// Returns whether SPIR-V is valid. Useful for ASSERTs. Automatically generates a warning if // Returns whether SPIR-V is valid. Useful for ASSERTs. Automatically generates a warning if
// SPIR-V is not valid. // SPIR-V is not valid.
bool Validate(const std::vector<uint32_t> &blob); bool Validate(const Blob &blob);
} // namespace spirv } // namespace spirv
} // namespace angle } // namespace angle
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <functional> #include <functional>
#include "common/spirv/spirv_types.h"
#include "libANGLE/renderer/ProgramImpl.h" #include "libANGLE/renderer/ProgramImpl.h"
#include "libANGLE/renderer/renderer_utils.h" #include "libANGLE/renderer/renderer_utils.h"
...@@ -68,8 +69,6 @@ struct GlslangSpirvOptions ...@@ -68,8 +69,6 @@ struct GlslangSpirvOptions
bool isTransformFeedbackEmulated = false; bool isTransformFeedbackEmulated = false;
}; };
using SpirvBlob = std::vector<uint32_t>;
using GlslangErrorCallback = std::function<angle::Result(GlslangError)>; using GlslangErrorCallback = std::function<angle::Result(GlslangError)>;
struct ShaderInterfaceVariableXfbInfo struct ShaderInterfaceVariableXfbInfo
...@@ -203,14 +202,14 @@ void GlslangGetShaderSource(const GlslangSourceOptions &options, ...@@ -203,14 +202,14 @@ void GlslangGetShaderSource(const GlslangSourceOptions &options,
angle::Result GlslangTransformSpirvCode(const GlslangErrorCallback &callback, angle::Result GlslangTransformSpirvCode(const GlslangErrorCallback &callback,
const GlslangSpirvOptions &options, const GlslangSpirvOptions &options,
const ShaderInterfaceVariableInfoMap &variableInfoMap, const ShaderInterfaceVariableInfoMap &variableInfoMap,
const SpirvBlob &initialSpirvBlob, const angle::spirv::Blob &initialSpirvBlob,
SpirvBlob *spirvBlobOut); angle::spirv::Blob *spirvBlobOut);
angle::Result GlslangGetShaderSpirvCode(const GlslangErrorCallback &callback, angle::Result GlslangGetShaderSpirvCode(const GlslangErrorCallback &callback,
const gl::ShaderBitSet &linkedShaderStages, const gl::ShaderBitSet &linkedShaderStages,
const gl::Caps &glCaps, const gl::Caps &glCaps,
const gl::ShaderMap<std::string> &shaderSources, const gl::ShaderMap<std::string> &shaderSources,
gl::ShaderMap<SpirvBlob> *spirvBlobsOut); gl::ShaderMap<angle::spirv::Blob> *spirvBlobsOut);
} // namespace rx } // namespace rx
......
...@@ -323,8 +323,8 @@ angle::Result ProgramMtl::linkImpl(const gl::Context *glContext, ...@@ -323,8 +323,8 @@ angle::Result ProgramMtl::linkImpl(const gl::Context *glContext,
&xfbOnlyVariableInfoMap); &xfbOnlyVariableInfoMap);
// Convert GLSL to spirv code // Convert GLSL to spirv code
gl::ShaderMap<std::vector<uint32_t>> shaderCodes; gl::ShaderMap<angle::spirv::Blob> shaderCodes;
gl::ShaderMap<std::vector<uint32_t>> xfbOnlyShaderCodes; // only vertex shader is needed. gl::ShaderMap<angle::spirv::Blob> xfbOnlyShaderCodes; // only vertex shader is needed.
ANGLE_TRY(mtl::GlslangGetShaderSpirvCode( ANGLE_TRY(mtl::GlslangGetShaderSpirvCode(
contextMtl, mState.getExecutable().getLinkedShaderStages(), contextMtl->getCaps(), contextMtl, mState.getExecutable().getLinkedShaderStages(), contextMtl->getCaps(),
shaderSources, false, variableInfoMap, &shaderCodes)); shaderSources, false, variableInfoMap, &shaderCodes));
......
...@@ -54,7 +54,7 @@ angle::Result GlslangGetShaderSpirvCode(ErrorHandler *context, ...@@ -54,7 +54,7 @@ angle::Result GlslangGetShaderSpirvCode(ErrorHandler *context,
const gl::ShaderMap<std::string> &shaderSources, const gl::ShaderMap<std::string> &shaderSources,
bool isTransformFeedbackEnabled, bool isTransformFeedbackEnabled,
const ShaderInterfaceVariableInfoMap &variableInfoMap, const ShaderInterfaceVariableInfoMap &variableInfoMap,
gl::ShaderMap<std::vector<uint32_t>> *shaderCodeOut); gl::ShaderMap<angle::spirv::Blob> *shaderCodeOut);
// Translate from SPIR-V code to Metal shader source code. // Translate from SPIR-V code to Metal shader source code.
// - spirvShaderCode is SPIRV code per shader stage when XFB emulation is turned off. // - spirvShaderCode is SPIRV code per shader stage when XFB emulation is turned off.
...@@ -64,8 +64,8 @@ angle::Result GlslangGetShaderSpirvCode(ErrorHandler *context, ...@@ -64,8 +64,8 @@ angle::Result GlslangGetShaderSpirvCode(ErrorHandler *context,
angle::Result SpirvCodeToMsl(Context *context, angle::Result SpirvCodeToMsl(Context *context,
const gl::ProgramState &programState, const gl::ProgramState &programState,
const ShaderInterfaceVariableInfoMap &xfbVSVariableInfoMap, const ShaderInterfaceVariableInfoMap &xfbVSVariableInfoMap,
gl::ShaderMap<std::vector<uint32_t>> *spirvShaderCode, gl::ShaderMap<angle::spirv::Blob> *spirvShaderCode,
std::vector<uint32_t> *xfbOnlySpirvCode /** nullable */, angle::spirv::Blob *xfbOnlySpirvCode /** nullable */,
gl::ShaderMap<TranslatedShaderInfo> *mslShaderInfoOut, gl::ShaderMap<TranslatedShaderInfo> *mslShaderInfoOut,
TranslatedShaderInfo *mslXfbOnlyShaderInfoOut /** nullable */); TranslatedShaderInfo *mslXfbOnlyShaderInfoOut /** nullable */);
......
...@@ -272,7 +272,7 @@ std::string PostProcessTranslatedMsl(const std::string &translatedSource) ...@@ -272,7 +272,7 @@ std::string PostProcessTranslatedMsl(const std::string &translatedSource)
class SpirvToMslCompiler : public spirv_cross::CompilerMSL class SpirvToMslCompiler : public spirv_cross::CompilerMSL
{ {
public: public:
SpirvToMslCompiler(std::vector<uint32_t> &&spriv) : spirv_cross::CompilerMSL(spriv) {} SpirvToMslCompiler(angle::spirv::Blob &&spriv) : spirv_cross::CompilerMSL(spriv) {}
void compileEx(gl::ShaderType shaderType, void compileEx(gl::ShaderType shaderType,
const angle::HashMap<std::string, uint32_t> &uboOriginalBindings, const angle::HashMap<std::string, uint32_t> &uboOriginalBindings,
...@@ -358,7 +358,7 @@ angle::Result ConvertSpirvToMsl(Context *context, ...@@ -358,7 +358,7 @@ angle::Result ConvertSpirvToMsl(Context *context,
const angle::HashMap<uint32_t, uint32_t> &xfbOriginalBindings, const angle::HashMap<uint32_t, uint32_t> &xfbOriginalBindings,
const OriginalSamplerBindingMap &originalSamplerBindings, const OriginalSamplerBindingMap &originalSamplerBindings,
bool disableRasterization, bool disableRasterization,
std::vector<uint32_t> *sprivCode, angle::spirv::Blob *sprivCode,
TranslatedShaderInfo *translatedShaderInfoOut) TranslatedShaderInfo *translatedShaderInfoOut)
{ {
if (!sprivCode || sprivCode->empty()) if (!sprivCode || sprivCode->empty())
...@@ -439,9 +439,9 @@ angle::Result GlslangGetShaderSpirvCode(ErrorHandler *context, ...@@ -439,9 +439,9 @@ angle::Result GlslangGetShaderSpirvCode(ErrorHandler *context,
const gl::ShaderMap<std::string> &shaderSources, const gl::ShaderMap<std::string> &shaderSources,
bool isTransformFeedbackEnabled, bool isTransformFeedbackEnabled,
const ShaderInterfaceVariableInfoMap &variableInfoMap, const ShaderInterfaceVariableInfoMap &variableInfoMap,
gl::ShaderMap<std::vector<uint32_t>> *shaderCodeOut) gl::ShaderMap<angle::spirv::Blob> *shaderCodeOut)
{ {
gl::ShaderMap<SpirvBlob> initialSpirvBlobs; gl::ShaderMap<angle::spirv::Blob> initialSpirvBlobs;
ANGLE_TRY(rx::GlslangGetShaderSpirvCode( ANGLE_TRY(rx::GlslangGetShaderSpirvCode(
[context](GlslangError error) { return HandleError(context, error); }, linkedShaderStages, [context](GlslangError error) { return HandleError(context, error); }, linkedShaderStages,
...@@ -471,8 +471,8 @@ angle::Result GlslangGetShaderSpirvCode(ErrorHandler *context, ...@@ -471,8 +471,8 @@ angle::Result GlslangGetShaderSpirvCode(ErrorHandler *context,
angle::Result SpirvCodeToMsl(Context *context, angle::Result SpirvCodeToMsl(Context *context,
const gl::ProgramState &programState, const gl::ProgramState &programState,
const ShaderInterfaceVariableInfoMap &xfbVSVariableInfoMap, const ShaderInterfaceVariableInfoMap &xfbVSVariableInfoMap,
gl::ShaderMap<std::vector<uint32_t>> *spirvShaderCode, gl::ShaderMap<angle::spirv::Blob> *spirvShaderCode,
std::vector<uint32_t> *xfbOnlySpirvCode /** nullable */, angle::spirv::Blob *xfbOnlySpirvCode /** nullable */,
gl::ShaderMap<TranslatedShaderInfo> *mslShaderInfoOut, gl::ShaderMap<TranslatedShaderInfo> *mslShaderInfoOut,
TranslatedShaderInfo *mslXfbOnlyShaderInfoOut /** nullable */) TranslatedShaderInfo *mslXfbOnlyShaderInfoOut /** nullable */)
{ {
...@@ -518,7 +518,7 @@ angle::Result SpirvCodeToMsl(Context *context, ...@@ -518,7 +518,7 @@ angle::Result SpirvCodeToMsl(Context *context,
// Do the actual translation // Do the actual translation
for (gl::ShaderType shaderType : gl::kAllGLES2ShaderTypes) for (gl::ShaderType shaderType : gl::kAllGLES2ShaderTypes)
{ {
std::vector<uint32_t> &sprivCode = spirvShaderCode->at(shaderType); angle::spirv::Blob &sprivCode = spirvShaderCode->at(shaderType);
ANGLE_TRY(ConvertSpirvToMsl(context, shaderType, uboOriginalBindings, xfbOriginalBindings, ANGLE_TRY(ConvertSpirvToMsl(context, shaderType, uboOriginalBindings, xfbOriginalBindings,
originalSamplerBindings, /* disableRasterization */ false, originalSamplerBindings, /* disableRasterization */ false,
&sprivCode, &mslShaderInfoOut->at(shaderType))); &sprivCode, &mslShaderInfoOut->at(shaderType)));
......
...@@ -86,8 +86,8 @@ angle::Result GlslangWrapperVk::TransformSpirV( ...@@ -86,8 +86,8 @@ angle::Result GlslangWrapperVk::TransformSpirV(
vk::Context *context, vk::Context *context,
const GlslangSpirvOptions &options, const GlslangSpirvOptions &options,
const ShaderInterfaceVariableInfoMap &variableInfoMap, const ShaderInterfaceVariableInfoMap &variableInfoMap,
const SpirvBlob &initialSpirvBlob, const angle::spirv::Blob &initialSpirvBlob,
SpirvBlob *shaderCodeOut) angle::spirv::Blob *shaderCodeOut)
{ {
return GlslangTransformSpirvCode( return GlslangTransformSpirvCode(
[context](GlslangError error) { return ErrorHandler(context, error); }, options, [context](GlslangError error) { return ErrorHandler(context, error); }, options,
......
...@@ -46,8 +46,8 @@ class GlslangWrapperVk ...@@ -46,8 +46,8 @@ class GlslangWrapperVk
static angle::Result TransformSpirV(vk::Context *context, static angle::Result TransformSpirV(vk::Context *context,
const GlslangSpirvOptions &options, const GlslangSpirvOptions &options,
const ShaderInterfaceVariableInfoMap &variableInfoMap, const ShaderInterfaceVariableInfoMap &variableInfoMap,
const SpirvBlob &initialSpirvBlob, const angle::spirv::Blob &initialSpirvBlob,
SpirvBlob *shaderCodeOut); angle::spirv::Blob *shaderCodeOut);
}; };
} // namespace rx } // namespace rx
......
...@@ -63,7 +63,7 @@ void SaveShaderInterfaceVariableXfbInfo(const ShaderInterfaceVariableXfbInfo &xf ...@@ -63,7 +63,7 @@ void SaveShaderInterfaceVariableXfbInfo(const ShaderInterfaceVariableXfbInfo &xf
bool ValidateTransformedSpirV(ContextVk *contextVk, bool ValidateTransformedSpirV(ContextVk *contextVk,
const gl::ShaderBitSet &linkedShaderStages, const gl::ShaderBitSet &linkedShaderStages,
const ShaderInterfaceVariableInfoMap &variableInfoMap, const ShaderInterfaceVariableInfoMap &variableInfoMap,
const gl::ShaderMap<SpirvBlob> &spirvBlobs) const gl::ShaderMap<angle::spirv::Blob> &spirvBlobs)
{ {
const gl::ShaderType lastPreFragmentStage = gl::GetLastPreFragmentStage(linkedShaderStages); const gl::ShaderType lastPreFragmentStage = gl::GetLastPreFragmentStage(linkedShaderStages);
...@@ -78,7 +78,7 @@ bool ValidateTransformedSpirV(ContextVk *contextVk, ...@@ -78,7 +78,7 @@ bool ValidateTransformedSpirV(ContextVk *contextVk,
options.removeDebugInfo = true; options.removeDebugInfo = true;
options.isTransformFeedbackStage = shaderType == lastPreFragmentStage; options.isTransformFeedbackStage = shaderType == lastPreFragmentStage;
SpirvBlob transformed; angle::spirv::Blob transformed;
if (GlslangWrapperVk::TransformSpirV(contextVk, options, variableInfoMap, if (GlslangWrapperVk::TransformSpirV(contextVk, options, variableInfoMap,
spirvBlobs[shaderType], spirvBlobs[shaderType],
&transformed) != angle::Result::Continue) &transformed) != angle::Result::Continue)
...@@ -118,7 +118,7 @@ angle::Result ShaderInfo::initShaders(ContextVk *contextVk, ...@@ -118,7 +118,7 @@ angle::Result ShaderInfo::initShaders(ContextVk *contextVk,
void ShaderInfo::release(ContextVk *contextVk) void ShaderInfo::release(ContextVk *contextVk)
{ {
for (SpirvBlob &spirvBlob : mSpirvBlobs) for (angle::spirv::Blob &spirvBlob : mSpirvBlobs)
{ {
spirvBlob.clear(); spirvBlob.clear();
} }
...@@ -130,7 +130,7 @@ void ShaderInfo::load(gl::BinaryInputStream *stream) ...@@ -130,7 +130,7 @@ void ShaderInfo::load(gl::BinaryInputStream *stream)
// Read in shader codes for all shader types // Read in shader codes for all shader types
for (const gl::ShaderType shaderType : gl::AllShaderTypes()) for (const gl::ShaderType shaderType : gl::AllShaderTypes())
{ {
SpirvBlob *spirvBlob = &mSpirvBlobs[shaderType]; angle::spirv::Blob *spirvBlob = &mSpirvBlobs[shaderType];
// Read the SPIR-V // Read the SPIR-V
stream->readIntVector<uint32_t>(spirvBlob); stream->readIntVector<uint32_t>(spirvBlob);
...@@ -146,7 +146,7 @@ void ShaderInfo::save(gl::BinaryOutputStream *stream) ...@@ -146,7 +146,7 @@ void ShaderInfo::save(gl::BinaryOutputStream *stream)
// Write out shader codes for all shader types // Write out shader codes for all shader types
for (const gl::ShaderType shaderType : gl::AllShaderTypes()) for (const gl::ShaderType shaderType : gl::AllShaderTypes())
{ {
const SpirvBlob &spirvBlob = mSpirvBlobs[shaderType]; const angle::spirv::Blob &spirvBlob = mSpirvBlobs[shaderType];
// Write the SPIR-V // Write the SPIR-V
stream->writeIntVector(spirvBlob); stream->writeIntVector(spirvBlob);
...@@ -166,10 +166,10 @@ angle::Result ProgramInfo::initProgram(ContextVk *contextVk, ...@@ -166,10 +166,10 @@ angle::Result ProgramInfo::initProgram(ContextVk *contextVk,
ProgramTransformOptions optionBits, ProgramTransformOptions optionBits,
const ShaderInterfaceVariableInfoMap &variableInfoMap) const ShaderInterfaceVariableInfoMap &variableInfoMap)
{ {
const gl::ShaderMap<SpirvBlob> &originalSpirvBlobs = shaderInfo.getSpirvBlobs(); const gl::ShaderMap<angle::spirv::Blob> &originalSpirvBlobs = shaderInfo.getSpirvBlobs();
const SpirvBlob &originalSpirvBlob = originalSpirvBlobs[shaderType]; const angle::spirv::Blob &originalSpirvBlob = originalSpirvBlobs[shaderType];
gl::ShaderMap<SpirvBlob> transformedSpirvBlobs; gl::ShaderMap<angle::spirv::Blob> transformedSpirvBlobs;
SpirvBlob &transformedSpirvBlob = transformedSpirvBlobs[shaderType]; angle::spirv::Blob &transformedSpirvBlob = transformedSpirvBlobs[shaderType];
GlslangSpirvOptions options; GlslangSpirvOptions options;
options.shaderType = shaderType; options.shaderType = shaderType;
......
...@@ -37,14 +37,14 @@ class ShaderInfo final : angle::NonCopyable ...@@ -37,14 +37,14 @@ class ShaderInfo final : angle::NonCopyable
ANGLE_INLINE bool valid() const { return mIsInitialized; } ANGLE_INLINE bool valid() const { return mIsInitialized; }
const gl::ShaderMap<SpirvBlob> &getSpirvBlobs() const { return mSpirvBlobs; } const gl::ShaderMap<angle::spirv::Blob> &getSpirvBlobs() const { return mSpirvBlobs; }
// Save and load implementation for GLES Program Binary support. // Save and load implementation for GLES Program Binary support.
void load(gl::BinaryInputStream *stream); void load(gl::BinaryInputStream *stream);
void save(gl::BinaryOutputStream *stream); void save(gl::BinaryOutputStream *stream);
private: private:
gl::ShaderMap<SpirvBlob> mSpirvBlobs; gl::ShaderMap<angle::spirv::Blob> mSpirvBlobs;
bool mIsInitialized = false; bool mIsInitialized = false;
}; };
......
...@@ -621,7 +621,7 @@ enum ...@@ -621,7 +621,7 @@ enum
void InsertPreamble(uint32_t colorAttachmentCount, void InsertPreamble(uint32_t colorAttachmentCount,
bool unresolveDepth, bool unresolveDepth,
bool unresolveStencil, bool unresolveStencil,
SpirvBlob *blobOut) angle::spirv::Blob *blobOut)
{ {
spirv::WriteCapability(blobOut, spv::CapabilityShader); spirv::WriteCapability(blobOut, spv::CapabilityShader);
spirv::WriteCapability(blobOut, spv::CapabilityInputAttachment); spirv::WriteCapability(blobOut, spv::CapabilityInputAttachment);
...@@ -663,7 +663,7 @@ void InsertPreamble(uint32_t colorAttachmentCount, ...@@ -663,7 +663,7 @@ void InsertPreamble(uint32_t colorAttachmentCount,
void InsertInputDecorations(spirv::IdRef id, void InsertInputDecorations(spirv::IdRef id,
uint32_t attachmentIndex, uint32_t attachmentIndex,
uint32_t binding, uint32_t binding,
SpirvBlob *blobOut) angle::spirv::Blob *blobOut)
{ {
spirv::WriteDecorate(blobOut, id, spv::DecorationDescriptorSet, spirv::WriteDecorate(blobOut, id, spv::DecorationDescriptorSet,
{spirv::LiteralInteger(DescriptorSetIndex::InternalShader)}); {spirv::LiteralInteger(DescriptorSetIndex::InternalShader)});
...@@ -672,7 +672,7 @@ void InsertInputDecorations(spirv::IdRef id, ...@@ -672,7 +672,7 @@ void InsertInputDecorations(spirv::IdRef id,
{spirv::LiteralInteger(attachmentIndex)}); {spirv::LiteralInteger(attachmentIndex)});
} }
void InsertColorDecorations(uint32_t colorIndex, SpirvBlob *blobOut) void InsertColorDecorations(uint32_t colorIndex, angle::spirv::Blob *blobOut)
{ {
// Decorate the output color attachment with Location // Decorate the output color attachment with Location
spirv::WriteDecorate(blobOut, spirv::IdRef(kIdColor0Out + colorIndex), spv::DecorationLocation, spirv::WriteDecorate(blobOut, spirv::IdRef(kIdColor0Out + colorIndex), spv::DecorationLocation,
...@@ -685,7 +685,7 @@ void InsertDepthStencilDecorations(uint32_t depthStencilInputIndex, ...@@ -685,7 +685,7 @@ void InsertDepthStencilDecorations(uint32_t depthStencilInputIndex,
uint32_t depthStencilBindingIndex, uint32_t depthStencilBindingIndex,
bool unresolveDepth, bool unresolveDepth,
bool unresolveStencil, bool unresolveStencil,
SpirvBlob *blobOut) angle::spirv::Blob *blobOut)
{ {
if (unresolveDepth) if (unresolveDepth)
{ {
...@@ -716,7 +716,7 @@ void InsertDerivativeTypes(spirv::IdRef baseId, ...@@ -716,7 +716,7 @@ void InsertDerivativeTypes(spirv::IdRef baseId,
spirv::IdRef vec4OutId, spirv::IdRef vec4OutId,
spirv::IdRef imageTypeId, spirv::IdRef imageTypeId,
spirv::IdRef inputTypeId, spirv::IdRef inputTypeId,
SpirvBlob *blobOut) angle::spirv::Blob *blobOut)
{ {
spirv::WriteTypeVector(blobOut, vec4Id, baseId, spirv::LiteralInteger(4)); spirv::WriteTypeVector(blobOut, vec4Id, baseId, spirv::LiteralInteger(4));
spirv::WriteTypePointer(blobOut, vec4OutId, spv::StorageClassOutput, vec4Id); spirv::WriteTypePointer(blobOut, vec4OutId, spv::StorageClassOutput, vec4Id);
...@@ -732,7 +732,7 @@ void InsertDerivativeTypes(spirv::IdRef baseId, ...@@ -732,7 +732,7 @@ void InsertDerivativeTypes(spirv::IdRef baseId,
spirv::WriteTypePointer(blobOut, inputTypeId, spv::StorageClassUniformConstant, imageTypeId); spirv::WriteTypePointer(blobOut, inputTypeId, spv::StorageClassUniformConstant, imageTypeId);
} }
void InsertCommonTypes(SpirvBlob *blobOut) void InsertCommonTypes(angle::spirv::Blob *blobOut)
{ {
// Types to support main(). // Types to support main().
spirv::WriteTypeVoid(blobOut, spirv::IdRef(kIdVoid)); spirv::WriteTypeVoid(blobOut, spirv::IdRef(kIdVoid));
...@@ -777,7 +777,7 @@ void InsertVariableDecl(spirv::IdRef outType, ...@@ -777,7 +777,7 @@ void InsertVariableDecl(spirv::IdRef outType,
spirv::IdRef outId, spirv::IdRef outId,
spirv::IdRef inType, spirv::IdRef inType,
spirv::IdRef inId, spirv::IdRef inId,
SpirvBlob *blobOut) angle::spirv::Blob *blobOut)
{ {
// Declare both the output and subpass input variables. // Declare both the output and subpass input variables.
spirv::WriteVariable(blobOut, outType, outId, spv::StorageClassOutput, nullptr); spirv::WriteVariable(blobOut, outType, outId, spv::StorageClassOutput, nullptr);
...@@ -786,7 +786,7 @@ void InsertVariableDecl(spirv::IdRef outType, ...@@ -786,7 +786,7 @@ void InsertVariableDecl(spirv::IdRef outType,
void InsertColorVariableDecl(uint32_t colorIndex, void InsertColorVariableDecl(uint32_t colorIndex,
UnresolveColorAttachmentType type, UnresolveColorAttachmentType type,
SpirvBlob *blobOut) angle::spirv::Blob *blobOut)
{ {
// Find the correct types for color variable declarations. // Find the correct types for color variable declarations.
spirv::IdRef outType(kIdFloat4OutType); spirv::IdRef outType(kIdFloat4OutType);
...@@ -809,7 +809,9 @@ void InsertColorVariableDecl(uint32_t colorIndex, ...@@ -809,7 +809,9 @@ void InsertColorVariableDecl(uint32_t colorIndex,
InsertVariableDecl(outType, outId, inType, inId, blobOut); InsertVariableDecl(outType, outId, inType, inId, blobOut);
} }
void InsertDepthStencilVariableDecl(bool unresolveDepth, bool unresolveStencil, SpirvBlob *blobOut) void InsertDepthStencilVariableDecl(bool unresolveDepth,
bool unresolveStencil,
angle::spirv::Blob *blobOut)
{ {
if (unresolveDepth) if (unresolveDepth)
{ {
...@@ -825,7 +827,7 @@ void InsertDepthStencilVariableDecl(bool unresolveDepth, bool unresolveStencil, ...@@ -825,7 +827,7 @@ void InsertDepthStencilVariableDecl(bool unresolveDepth, bool unresolveStencil,
} }
} }
void InsertTopOfMain(SpirvBlob *blobOut) void InsertTopOfMain(angle::spirv::Blob *blobOut)
{ {
spirv::WriteFunction(blobOut, spirv::IdRef(kIdVoid), spirv::IdRef(kIdMain), spirv::WriteFunction(blobOut, spirv::IdRef(kIdVoid), spirv::IdRef(kIdMain),
spv::FunctionControlMaskNone, spirv::IdRef(kIdMainType)); spv::FunctionControlMaskNone, spirv::IdRef(kIdMainType));
...@@ -834,7 +836,7 @@ void InsertTopOfMain(SpirvBlob *blobOut) ...@@ -834,7 +836,7 @@ void InsertTopOfMain(SpirvBlob *blobOut)
void InsertColorUnresolveLoadStore(uint32_t colorIndex, void InsertColorUnresolveLoadStore(uint32_t colorIndex,
UnresolveColorAttachmentType type, UnresolveColorAttachmentType type,
SpirvBlob *blobOut) angle::spirv::Blob *blobOut)
{ {
spirv::IdRef loadResult(kIdColor0Load + colorIndex * 2); spirv::IdRef loadResult(kIdColor0Load + colorIndex * 2);
spirv::IdRef imageReadResult(loadResult + 1); spirv::IdRef imageReadResult(loadResult + 1);
...@@ -867,7 +869,7 @@ void InsertColorUnresolveLoadStore(uint32_t colorIndex, ...@@ -867,7 +869,7 @@ void InsertColorUnresolveLoadStore(uint32_t colorIndex,
void InsertDepthStencilUnresolveLoadStore(bool unresolveDepth, void InsertDepthStencilUnresolveLoadStore(bool unresolveDepth,
bool unresolveStencil, bool unresolveStencil,
SpirvBlob *blobOut) angle::spirv::Blob *blobOut)
{ {
if (unresolveDepth) if (unresolveDepth)
{ {
...@@ -913,19 +915,19 @@ void InsertDepthStencilUnresolveLoadStore(bool unresolveDepth, ...@@ -913,19 +915,19 @@ void InsertDepthStencilUnresolveLoadStore(bool unresolveDepth,
} }
} }
void InsertBottomOfMain(SpirvBlob *blobOut) void InsertBottomOfMain(angle::spirv::Blob *blobOut)
{ {
spirv::WriteReturn(blobOut); spirv::WriteReturn(blobOut);
spirv::WriteFunctionEnd(blobOut); spirv::WriteFunctionEnd(blobOut);
} }
std::vector<uint32_t> MakeFragShader( angle::spirv::Blob MakeFragShader(
uint32_t colorAttachmentCount, uint32_t colorAttachmentCount,
gl::DrawBuffersArray<UnresolveColorAttachmentType> &colorAttachmentTypes, gl::DrawBuffersArray<UnresolveColorAttachmentType> &colorAttachmentTypes,
bool unresolveDepth, bool unresolveDepth,
bool unresolveStencil) bool unresolveStencil)
{ {
SpirvBlob code; angle::spirv::Blob code;
// Reserve a sensible amount of memory. A single-attachment shader is 169 words. // Reserve a sensible amount of memory. A single-attachment shader is 169 words.
code.reserve(169); code.reserve(169);
...@@ -987,7 +989,7 @@ angle::Result GetUnresolveFrag( ...@@ -987,7 +989,7 @@ angle::Result GetUnresolveFrag(
return angle::Result::Continue; return angle::Result::Continue;
} }
std::vector<uint32_t> shaderCode = unresolve::MakeFragShader( angle::spirv::Blob shaderCode = unresolve::MakeFragShader(
colorAttachmentCount, colorAttachmentTypes, unresolveDepth, unresolveStencil); colorAttachmentCount, colorAttachmentTypes, unresolveDepth, unresolveStencil);
ASSERT(spirv::Validate(shaderCode)); ASSERT(spirv::Validate(shaderCode));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment