Commit 68e60a92 by Tim Van Patten Committed by Commit Bot

Vulkan: Don't store transformed SPIR-V

Since the original SPIR-V is never store after being modified, we don't need to keep the transformed SPIR-V either. Bug: angleproject:4513 Test: CQ Change-Id: I4b70cfa355a08107e6a27377f6258cbf9e4072be Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2270718 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 4f2fb80b
...@@ -116,26 +116,19 @@ angle::Result ProgramInfo::initProgram(ContextVk *contextVk, ...@@ -116,26 +116,19 @@ angle::Result ProgramInfo::initProgram(ContextVk *contextVk,
ProgramTransformOptionBits optionBits, ProgramTransformOptionBits optionBits,
ProgramExecutableVk *executableVk) ProgramExecutableVk *executableVk)
{ {
if (executableVk->getTransformedShaderInfo().getSpirvBlobs()[shaderType].empty()) const ShaderMapInterfaceVariableInfoMap &variableInfoMap =
{ executableVk->getShaderInterfaceVariableInfoMap();
const ShaderMapInterfaceVariableInfoMap &variableInfoMap = const gl::ShaderMap<SpirvBlob> &originalSpirvBlobs = shaderInfo.getSpirvBlobs();
executableVk->getShaderInterfaceVariableInfoMap(); const SpirvBlob &originalSpirvBlob = originalSpirvBlobs[shaderType];
const gl::ShaderMap<SpirvBlob> &originalSpirvBlobs = shaderInfo.getSpirvBlobs(); bool removeEarlyFragmentTestsOptimization =
const SpirvBlob &originalSpirvBlob = originalSpirvBlobs[shaderType]; (shaderType == gl::ShaderType::Fragment &&
bool removeEarlyFragmentTestsOptimization = optionBits[ProgramTransformOption::RemoveEarlyFragmentTestsOptimization]);
(shaderType == gl::ShaderType::Fragment && gl::ShaderMap<SpirvBlob> transformedSpirvBlobs;
optionBits[ProgramTransformOption::RemoveEarlyFragmentTestsOptimization]); SpirvBlob &transformedSpirvBlob = transformedSpirvBlobs[shaderType];
SpirvBlob &spirvBlobTransformed =
executableVk->getTransformedShaderInfo().getSpirvBlobs()[shaderType]; ANGLE_TRY(GlslangWrapperVk::TransformSpirV(
contextVk, shaderType, removeEarlyFragmentTestsOptimization, variableInfoMap[shaderType],
ANGLE_TRY(GlslangWrapperVk::TransformSpirV( originalSpirvBlob, &transformedSpirvBlob));
contextVk, shaderType, removeEarlyFragmentTestsOptimization,
variableInfoMap[shaderType], originalSpirvBlob, &spirvBlobTransformed));
}
const gl::ShaderMap<SpirvBlob> &transformedSpirvBlobs =
executableVk->getTransformedShaderInfo().getSpirvBlobs();
const SpirvBlob &transformedSpirvBlob = transformedSpirvBlobs[shaderType];
ANGLE_TRY(vk::InitShaderAndSerial(contextVk, &mShaders[shaderType].get(), ANGLE_TRY(vk::InitShaderAndSerial(contextVk, &mShaders[shaderType].get(),
transformedSpirvBlob.data(), transformedSpirvBlob.data(),
transformedSpirvBlob.size() * sizeof(uint32_t))); transformedSpirvBlob.size() * sizeof(uint32_t)));
...@@ -165,7 +158,6 @@ ProgramExecutableVk::ProgramExecutableVk() ...@@ -165,7 +158,6 @@ ProgramExecutableVk::ProgramExecutableVk()
: mEmptyDescriptorSets{}, : mEmptyDescriptorSets{},
mNumDefaultUniformDescriptors(0), mNumDefaultUniformDescriptors(0),
mDynamicBufferOffsets{}, mDynamicBufferOffsets{},
mTransformedShaderInfoSaved(false),
mProgram(nullptr), mProgram(nullptr),
mProgramPipeline(nullptr) mProgramPipeline(nullptr)
{} {}
...@@ -234,12 +226,6 @@ std::unique_ptr<rx::LinkEvent> ProgramExecutableVk::load(gl::BinaryInputStream * ...@@ -234,12 +226,6 @@ std::unique_ptr<rx::LinkEvent> ProgramExecutableVk::load(gl::BinaryInputStream *
} }
} }
mTransformedShaderInfoSaved = stream->readInt<bool>();
if (mTransformedShaderInfoSaved)
{
mTransformedShaderInfo.load(stream);
}
return std::make_unique<LinkEventDone>(angle::Result::Continue); return std::make_unique<LinkEventDone>(angle::Result::Continue);
} }
...@@ -262,13 +248,6 @@ void ProgramExecutableVk::save(gl::BinaryOutputStream *stream) ...@@ -262,13 +248,6 @@ void ProgramExecutableVk::save(gl::BinaryOutputStream *stream)
stream->writeInt<uint32_t>(it.second.xfbStride); stream->writeInt<uint32_t>(it.second.xfbStride);
} }
} }
mTransformedShaderInfoSaved = mTransformedShaderInfo.valid();
stream->writeInt(mTransformedShaderInfoSaved);
if (mTransformedShaderInfoSaved)
{
mTransformedShaderInfo.save(stream);
}
} }
void ProgramExecutableVk::clearVariableInfoMap() void ProgramExecutableVk::clearVariableInfoMap()
......
...@@ -36,7 +36,6 @@ class ShaderInfo final : angle::NonCopyable ...@@ -36,7 +36,6 @@ 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<SpirvBlob> &getSpirvBlobs() const { return mSpirvBlobs; }
gl::ShaderMap<SpirvBlob> &getSpirvBlobs() { 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);
...@@ -163,8 +162,6 @@ class ProgramExecutableVk ...@@ -163,8 +162,6 @@ class ProgramExecutableVk
mProgramPipeline = pipeline; mProgramPipeline = pipeline;
} }
ShaderInfo &getTransformedShaderInfo() { return mTransformedShaderInfo; }
private: private:
friend class ProgramVk; friend class ProgramVk;
friend class ProgramPipelineVk; friend class ProgramPipelineVk;
...@@ -248,10 +245,6 @@ class ProgramExecutableVk ...@@ -248,10 +245,6 @@ class ProgramExecutableVk
ProgramTransformOptionBits mTransformOptionBits; ProgramTransformOptionBits mTransformOptionBits;
// We keep the SPIR-V code to use for draw call pipeline creation.
bool mTransformedShaderInfoSaved;
ShaderInfo mTransformedShaderInfo;
ProgramVk *mProgram; ProgramVk *mProgram;
ProgramPipelineVk *mProgramPipeline; ProgramPipelineVk *mProgramPipeline;
}; };
......
...@@ -32,8 +32,6 @@ void ProgramPipelineVk::destroy(const gl::Context *context) ...@@ -32,8 +32,6 @@ void ProgramPipelineVk::destroy(const gl::Context *context)
void ProgramPipelineVk::reset(ContextVk *contextVk) void ProgramPipelineVk::reset(ContextVk *contextVk)
{ {
mExecutable.reset(contextVk); mExecutable.reset(contextVk);
// Not done in ProgramExecutableVk::reset() since that's called more often.
mExecutable.getTransformedShaderInfo().release(contextVk);
} }
// TODO: http://anglebug.com/3570: Move/Copy all of the necessary information into // TODO: http://anglebug.com/3570: Move/Copy all of the necessary information into
...@@ -64,7 +62,6 @@ angle::Result ProgramPipelineVk::link(const gl::Context *glContext) ...@@ -64,7 +62,6 @@ angle::Result ProgramPipelineVk::link(const gl::Context *glContext)
GlslangProgramInterfaceInfo glslangProgramInterfaceInfo; GlslangProgramInterfaceInfo glslangProgramInterfaceInfo;
GlslangWrapperVk::ResetGlslangProgramInterfaceInfo(&glslangProgramInterfaceInfo); GlslangWrapperVk::ResetGlslangProgramInterfaceInfo(&glslangProgramInterfaceInfo);
reset(contextVk);
mExecutable.clearVariableInfoMap(); mExecutable.clearVariableInfoMap();
// Now that the program pipeline has all of the programs attached, the various descriptor // Now that the program pipeline has all of the programs attached, the various descriptor
......
...@@ -189,8 +189,6 @@ void ProgramVk::reset(ContextVk *contextVk) ...@@ -189,8 +189,6 @@ void ProgramVk::reset(ContextVk *contextVk)
GlslangWrapperVk::ResetGlslangProgramInterfaceInfo(&mGlslangProgramInterfaceInfo); GlslangWrapperVk::ResetGlslangProgramInterfaceInfo(&mGlslangProgramInterfaceInfo);
mExecutable.reset(contextVk); mExecutable.reset(contextVk);
// Not done in ProgramExecutableVk::reset() since that's called more often.
mExecutable.getTransformedShaderInfo().release(contextVk);
} }
std::unique_ptr<rx::LinkEvent> ProgramVk::load(const gl::Context *context, std::unique_ptr<rx::LinkEvent> ProgramVk::load(const gl::Context *context,
......
...@@ -169,7 +169,6 @@ class ProgramVk : public ProgramImpl ...@@ -169,7 +169,6 @@ class ProgramVk : public ProgramImpl
template <typename T> template <typename T>
void setUniformImpl(GLint location, GLsizei count, const T *v, GLenum entryPointType); void setUniformImpl(GLint location, GLsizei count, const T *v, GLenum entryPointType);
angle::Result linkImpl(const gl::Context *glContext, gl::InfoLog &infoLog);
void linkResources(const gl::ProgramLinkedResources &resources); void linkResources(const gl::ProgramLinkedResources &resources);
ANGLE_INLINE angle::Result initProgram(ContextVk *contextVk, ANGLE_INLINE angle::Result initProgram(ContextVk *contextVk,
......
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