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,
ProgramTransformOptionBits optionBits,
ProgramExecutableVk *executableVk)
{
if (executableVk->getTransformedShaderInfo().getSpirvBlobs()[shaderType].empty())
{
const ShaderMapInterfaceVariableInfoMap &variableInfoMap =
executableVk->getShaderInterfaceVariableInfoMap();
const gl::ShaderMap<SpirvBlob> &originalSpirvBlobs = shaderInfo.getSpirvBlobs();
const SpirvBlob &originalSpirvBlob = originalSpirvBlobs[shaderType];
bool removeEarlyFragmentTestsOptimization =
(shaderType == gl::ShaderType::Fragment &&
optionBits[ProgramTransformOption::RemoveEarlyFragmentTestsOptimization]);
SpirvBlob &spirvBlobTransformed =
executableVk->getTransformedShaderInfo().getSpirvBlobs()[shaderType];
ANGLE_TRY(GlslangWrapperVk::TransformSpirV(
contextVk, shaderType, removeEarlyFragmentTestsOptimization,
variableInfoMap[shaderType], originalSpirvBlob, &spirvBlobTransformed));
}
const gl::ShaderMap<SpirvBlob> &transformedSpirvBlobs =
executableVk->getTransformedShaderInfo().getSpirvBlobs();
const SpirvBlob &transformedSpirvBlob = transformedSpirvBlobs[shaderType];
const ShaderMapInterfaceVariableInfoMap &variableInfoMap =
executableVk->getShaderInterfaceVariableInfoMap();
const gl::ShaderMap<SpirvBlob> &originalSpirvBlobs = shaderInfo.getSpirvBlobs();
const SpirvBlob &originalSpirvBlob = originalSpirvBlobs[shaderType];
bool removeEarlyFragmentTestsOptimization =
(shaderType == gl::ShaderType::Fragment &&
optionBits[ProgramTransformOption::RemoveEarlyFragmentTestsOptimization]);
gl::ShaderMap<SpirvBlob> transformedSpirvBlobs;
SpirvBlob &transformedSpirvBlob = transformedSpirvBlobs[shaderType];
ANGLE_TRY(GlslangWrapperVk::TransformSpirV(
contextVk, shaderType, removeEarlyFragmentTestsOptimization, variableInfoMap[shaderType],
originalSpirvBlob, &transformedSpirvBlob));
ANGLE_TRY(vk::InitShaderAndSerial(contextVk, &mShaders[shaderType].get(),
transformedSpirvBlob.data(),
transformedSpirvBlob.size() * sizeof(uint32_t)));
......@@ -165,7 +158,6 @@ ProgramExecutableVk::ProgramExecutableVk()
: mEmptyDescriptorSets{},
mNumDefaultUniformDescriptors(0),
mDynamicBufferOffsets{},
mTransformedShaderInfoSaved(false),
mProgram(nullptr),
mProgramPipeline(nullptr)
{}
......@@ -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);
}
......@@ -262,13 +248,6 @@ void ProgramExecutableVk::save(gl::BinaryOutputStream *stream)
stream->writeInt<uint32_t>(it.second.xfbStride);
}
}
mTransformedShaderInfoSaved = mTransformedShaderInfo.valid();
stream->writeInt(mTransformedShaderInfoSaved);
if (mTransformedShaderInfoSaved)
{
mTransformedShaderInfo.save(stream);
}
}
void ProgramExecutableVk::clearVariableInfoMap()
......
......@@ -36,7 +36,6 @@ class ShaderInfo final : angle::NonCopyable
ANGLE_INLINE bool valid() const { return mIsInitialized; }
const gl::ShaderMap<SpirvBlob> &getSpirvBlobs() const { return mSpirvBlobs; }
gl::ShaderMap<SpirvBlob> &getSpirvBlobs() { return mSpirvBlobs; }
// Save and load implementation for GLES Program Binary support.
void load(gl::BinaryInputStream *stream);
......@@ -163,8 +162,6 @@ class ProgramExecutableVk
mProgramPipeline = pipeline;
}
ShaderInfo &getTransformedShaderInfo() { return mTransformedShaderInfo; }
private:
friend class ProgramVk;
friend class ProgramPipelineVk;
......@@ -248,10 +245,6 @@ class ProgramExecutableVk
ProgramTransformOptionBits mTransformOptionBits;
// We keep the SPIR-V code to use for draw call pipeline creation.
bool mTransformedShaderInfoSaved;
ShaderInfo mTransformedShaderInfo;
ProgramVk *mProgram;
ProgramPipelineVk *mProgramPipeline;
};
......
......@@ -32,8 +32,6 @@ void ProgramPipelineVk::destroy(const gl::Context *context)
void ProgramPipelineVk::reset(ContextVk *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
......@@ -64,7 +62,6 @@ angle::Result ProgramPipelineVk::link(const gl::Context *glContext)
GlslangProgramInterfaceInfo glslangProgramInterfaceInfo;
GlslangWrapperVk::ResetGlslangProgramInterfaceInfo(&glslangProgramInterfaceInfo);
reset(contextVk);
mExecutable.clearVariableInfoMap();
// Now that the program pipeline has all of the programs attached, the various descriptor
......
......@@ -189,8 +189,6 @@ void ProgramVk::reset(ContextVk *contextVk)
GlslangWrapperVk::ResetGlslangProgramInterfaceInfo(&mGlslangProgramInterfaceInfo);
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,
......
......@@ -169,7 +169,6 @@ class ProgramVk : public ProgramImpl
template <typename T>
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);
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