Commit db3ef872 by Tim Van Patten Committed by Commit Bot

Move ProgramState::mDefaultUniformRange to ProgramExecutable

The member ProgramState::mDefaultUniformRange is being moved to ProgramExecutable to allow ProgramExecutable::hasDefaultUniforms() to answer the query without relying on the Program[Pipeline]State. Bug: angleproject:4520 Test: Build/CQ Change-Id: Ic0d78b7193a28962b7ab6480964f8920a23bb7be Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2220776Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCourtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
parent cd4bf5e7
...@@ -1080,7 +1080,6 @@ ProgramState::ProgramState() ...@@ -1080,7 +1080,6 @@ ProgramState::ProgramState()
: mLabel(), : mLabel(),
mAttachedShaders{}, mAttachedShaders{},
mAttachedShadersMarkedForDetach{}, mAttachedShadersMarkedForDetach{},
mDefaultUniformRange(0, 0),
mAtomicCounterUniformRange(0, 0), mAtomicCounterUniformRange(0, 0),
mBinaryRetrieveableHint(false), mBinaryRetrieveableHint(false),
mSeparable(false), mSeparable(false),
...@@ -3751,7 +3750,7 @@ void Program::linkSamplerAndImageBindings(GLuint *combinedImageUniforms) ...@@ -3751,7 +3750,7 @@ void Program::linkSamplerAndImageBindings(GLuint *combinedImageUniforms)
} }
// Whatever is left constitutes the default uniforms. // Whatever is left constitutes the default uniforms.
mState.mDefaultUniformRange = RangeUI(0, low); mState.mExecutable->mDefaultUniformRange = RangeUI(0, low);
} }
bool Program::linkAtomicCounterBuffers() bool Program::linkAtomicCounterBuffers()
...@@ -5488,7 +5487,8 @@ angle::Result Program::deserialize(const Context *context, ...@@ -5488,7 +5487,8 @@ angle::Result Program::deserialize(const Context *context,
unsigned int defaultUniformRangeLow = stream.readInt<unsigned int>(); unsigned int defaultUniformRangeLow = stream.readInt<unsigned int>();
unsigned int defaultUniformRangeHigh = stream.readInt<unsigned int>(); unsigned int defaultUniformRangeHigh = stream.readInt<unsigned int>();
mState.mDefaultUniformRange = RangeUI(defaultUniformRangeLow, defaultUniformRangeHigh); mState.mExecutable->mDefaultUniformRange =
RangeUI(defaultUniformRangeLow, defaultUniformRangeHigh);
unsigned int samplerRangeLow = stream.readInt<unsigned int>(); unsigned int samplerRangeLow = stream.readInt<unsigned int>();
unsigned int samplerRangeHigh = stream.readInt<unsigned int>(); unsigned int samplerRangeHigh = stream.readInt<unsigned int>();
......
...@@ -261,7 +261,7 @@ class ProgramState final : angle::NonCopyable ...@@ -261,7 +261,7 @@ class ProgramState final : angle::NonCopyable
const std::vector<SamplerBinding> &getSamplerBindings() const { return mSamplerBindings; } const std::vector<SamplerBinding> &getSamplerBindings() const { return mSamplerBindings; }
const std::vector<ImageBinding> &getImageBindings() const { return mImageBindings; } const std::vector<ImageBinding> &getImageBindings() const { return mImageBindings; }
const sh::WorkGroupSize &getComputeShaderLocalSize() const { return mComputeShaderLocalSize; } const sh::WorkGroupSize &getComputeShaderLocalSize() const { return mComputeShaderLocalSize; }
const RangeUI &getDefaultUniformRange() const { return mDefaultUniformRange; } const RangeUI &getDefaultUniformRange() const { return mExecutable->getDefaultUniformRange(); }
const RangeUI &getSamplerUniformRange() const { return mExecutable->getSamplerUniformRange(); } const RangeUI &getSamplerUniformRange() const { return mExecutable->getSamplerUniformRange(); }
const RangeUI &getImageUniformRange() const { return mExecutable->getImageUniformRange(); } const RangeUI &getImageUniformRange() const { return mExecutable->getImageUniformRange(); }
const RangeUI &getAtomicCounterUniformRange() const { return mAtomicCounterUniformRange; } const RangeUI &getAtomicCounterUniformRange() const { return mAtomicCounterUniformRange; }
...@@ -316,7 +316,6 @@ class ProgramState final : angle::NonCopyable ...@@ -316,7 +316,6 @@ class ProgramState final : angle::NonCopyable
return *mExecutable; return *mExecutable;
} }
bool hasDefaultUniforms() const { return !getDefaultUniformRange().empty(); }
bool hasTextures() const { return !getSamplerBindings().empty(); } bool hasTextures() const { return !getSamplerBindings().empty(); }
bool hasImages() const { return !getImageBindings().empty(); } bool hasImages() const { return !getImageBindings().empty(); }
bool hasEarlyFragmentTestsOptimization() const { return mEarlyFramentTestsOptimization; } bool hasEarlyFragmentTestsOptimization() const { return mEarlyFramentTestsOptimization; }
...@@ -358,7 +357,6 @@ class ProgramState final : angle::NonCopyable ...@@ -358,7 +357,6 @@ class ProgramState final : angle::NonCopyable
std::vector<VariableLocation> mUniformLocations; std::vector<VariableLocation> mUniformLocations;
std::vector<BufferVariable> mBufferVariables; std::vector<BufferVariable> mBufferVariables;
RangeUI mDefaultUniformRange;
RangeUI mAtomicCounterUniformRange; RangeUI mAtomicCounterUniformRange;
// An array of the samplers that are used by the program // An array of the samplers that are used by the program
......
...@@ -27,6 +27,7 @@ ProgramExecutable::ProgramExecutable() ...@@ -27,6 +27,7 @@ ProgramExecutable::ProgramExecutable()
mActiveImagesMask(0), mActiveImagesMask(0),
mCanDrawWith(false), mCanDrawWith(false),
mTransformFeedbackBufferMode(GL_INTERLEAVED_ATTRIBS), mTransformFeedbackBufferMode(GL_INTERLEAVED_ATTRIBS),
mDefaultUniformRange(0, 0),
mSamplerUniformRange(0, 0), mSamplerUniformRange(0, 0),
mImageUniformRange(0, 0), mImageUniformRange(0, 0),
mPipelineHasGraphicsUniformBuffers(false), mPipelineHasGraphicsUniformBuffers(false),
...@@ -34,7 +35,9 @@ ProgramExecutable::ProgramExecutable() ...@@ -34,7 +35,9 @@ ProgramExecutable::ProgramExecutable()
mPipelineHasGraphicsStorageBuffers(false), mPipelineHasGraphicsStorageBuffers(false),
mPipelineHasComputeStorageBuffers(false), mPipelineHasComputeStorageBuffers(false),
mPipelineHasGraphicsAtomicCounterBuffers(false), mPipelineHasGraphicsAtomicCounterBuffers(false),
mPipelineHasComputeAtomicCounterBuffers(false) mPipelineHasComputeAtomicCounterBuffers(false),
mPipelineHasGraphicsDefaultUniforms(false),
mPipelineHasComputeDefaultUniforms(false)
{ {
reset(); reset();
} }
...@@ -63,6 +66,7 @@ ProgramExecutable::ProgramExecutable(const ProgramExecutable &other) ...@@ -63,6 +66,7 @@ ProgramExecutable::ProgramExecutable(const ProgramExecutable &other)
mTransformFeedbackStrides(other.mTransformFeedbackStrides), mTransformFeedbackStrides(other.mTransformFeedbackStrides),
mTransformFeedbackBufferMode(other.mTransformFeedbackBufferMode), mTransformFeedbackBufferMode(other.mTransformFeedbackBufferMode),
mUniforms(other.mUniforms), mUniforms(other.mUniforms),
mDefaultUniformRange(other.mDefaultUniformRange),
mSamplerUniformRange(other.mSamplerUniformRange), mSamplerUniformRange(other.mSamplerUniformRange),
mUniformBlocks(other.mUniformBlocks), mUniformBlocks(other.mUniformBlocks),
mAtomicCounterBuffers(other.mAtomicCounterBuffers), mAtomicCounterBuffers(other.mAtomicCounterBuffers),
...@@ -73,7 +77,9 @@ ProgramExecutable::ProgramExecutable(const ProgramExecutable &other) ...@@ -73,7 +77,9 @@ ProgramExecutable::ProgramExecutable(const ProgramExecutable &other)
mPipelineHasGraphicsStorageBuffers(other.mPipelineHasGraphicsStorageBuffers), mPipelineHasGraphicsStorageBuffers(other.mPipelineHasGraphicsStorageBuffers),
mPipelineHasComputeStorageBuffers(other.mPipelineHasComputeStorageBuffers), mPipelineHasComputeStorageBuffers(other.mPipelineHasComputeStorageBuffers),
mPipelineHasGraphicsAtomicCounterBuffers(other.mPipelineHasGraphicsAtomicCounterBuffers), mPipelineHasGraphicsAtomicCounterBuffers(other.mPipelineHasGraphicsAtomicCounterBuffers),
mPipelineHasComputeAtomicCounterBuffers(other.mPipelineHasComputeAtomicCounterBuffers) mPipelineHasComputeAtomicCounterBuffers(other.mPipelineHasComputeAtomicCounterBuffers),
mPipelineHasGraphicsDefaultUniforms(other.mPipelineHasGraphicsDefaultUniforms),
mPipelineHasComputeDefaultUniforms(other.mPipelineHasComputeDefaultUniforms)
{ {
reset(); reset();
} }
...@@ -110,6 +116,8 @@ void ProgramExecutable::reset() ...@@ -110,6 +116,8 @@ void ProgramExecutable::reset()
mPipelineHasComputeStorageBuffers = false; mPipelineHasComputeStorageBuffers = false;
mPipelineHasGraphicsAtomicCounterBuffers = false; mPipelineHasGraphicsAtomicCounterBuffers = false;
mPipelineHasComputeAtomicCounterBuffers = false; mPipelineHasComputeAtomicCounterBuffers = false;
mPipelineHasGraphicsDefaultUniforms = false;
mPipelineHasComputeDefaultUniforms = false;
} }
void ProgramExecutable::load(gl::BinaryInputStream *stream) void ProgramExecutable::load(gl::BinaryInputStream *stream)
...@@ -131,6 +139,8 @@ void ProgramExecutable::load(gl::BinaryInputStream *stream) ...@@ -131,6 +139,8 @@ void ProgramExecutable::load(gl::BinaryInputStream *stream)
mPipelineHasComputeStorageBuffers = stream->readBool(); mPipelineHasComputeStorageBuffers = stream->readBool();
mPipelineHasGraphicsAtomicCounterBuffers = stream->readBool(); mPipelineHasGraphicsAtomicCounterBuffers = stream->readBool();
mPipelineHasComputeAtomicCounterBuffers = stream->readBool(); mPipelineHasComputeAtomicCounterBuffers = stream->readBool();
mPipelineHasGraphicsDefaultUniforms = stream->readBool();
mPipelineHasComputeDefaultUniforms = stream->readBool();
} }
void ProgramExecutable::save(gl::BinaryOutputStream *stream) const void ProgramExecutable::save(gl::BinaryOutputStream *stream) const
...@@ -151,6 +161,8 @@ void ProgramExecutable::save(gl::BinaryOutputStream *stream) const ...@@ -151,6 +161,8 @@ void ProgramExecutable::save(gl::BinaryOutputStream *stream) const
stream->writeInt(static_cast<bool>(mPipelineHasComputeStorageBuffers)); stream->writeInt(static_cast<bool>(mPipelineHasComputeStorageBuffers));
stream->writeInt(static_cast<bool>(mPipelineHasGraphicsAtomicCounterBuffers)); stream->writeInt(static_cast<bool>(mPipelineHasGraphicsAtomicCounterBuffers));
stream->writeInt(static_cast<bool>(mPipelineHasComputeAtomicCounterBuffers)); stream->writeInt(static_cast<bool>(mPipelineHasComputeAtomicCounterBuffers));
stream->writeInt(static_cast<bool>(mPipelineHasGraphicsDefaultUniforms));
stream->writeInt(static_cast<bool>(mPipelineHasComputeDefaultUniforms));
} }
const ProgramState *ProgramExecutable::getProgramState(ShaderType shaderType) const const ProgramState *ProgramExecutable::getProgramState(ShaderType shaderType) const
...@@ -223,16 +235,10 @@ AttributesMask ProgramExecutable::getAttributesMask() const ...@@ -223,16 +235,10 @@ AttributesMask ProgramExecutable::getAttributesMask() const
return mAttributesMask; return mAttributesMask;
} }
// TODO: http://anglebug.com/4520: Needs mDefaultUniformRange moved to ProgramExecutable
bool ProgramExecutable::hasDefaultUniforms() const bool ProgramExecutable::hasDefaultUniforms() const
{ {
ASSERT(mProgramState || mProgramPipelineState); return !getDefaultUniformRange().empty() ||
if (mProgramState) (isCompute() ? mPipelineHasComputeDefaultUniforms : mPipelineHasGraphicsDefaultUniforms);
{
return mProgramState->hasDefaultUniforms();
}
return mProgramPipelineState->hasDefaultUniforms();
} }
// TODO: http://anglebug.com/4520: Needs mSamplerBindings moved to ProgramExecutable // TODO: http://anglebug.com/4520: Needs mSamplerBindings moved to ProgramExecutable
......
...@@ -221,6 +221,7 @@ class ProgramExecutable ...@@ -221,6 +221,7 @@ class ProgramExecutable
const std::vector<VariableLocation> &getOutputLocations() const { return mOutputLocations; } const std::vector<VariableLocation> &getOutputLocations() const { return mOutputLocations; }
const std::vector<LinkedUniform> &getUniforms() const { return mUniforms; } const std::vector<LinkedUniform> &getUniforms() const { return mUniforms; }
const std::vector<InterfaceBlock> &getUniformBlocks() const { return mUniformBlocks; } const std::vector<InterfaceBlock> &getUniformBlocks() const { return mUniformBlocks; }
const RangeUI &getDefaultUniformRange() const { return mDefaultUniformRange; }
const RangeUI &getSamplerUniformRange() const { return mSamplerUniformRange; } const RangeUI &getSamplerUniformRange() const { return mSamplerUniformRange; }
const RangeUI &getImageUniformRange() const { return mImageUniformRange; } const RangeUI &getImageUniformRange() const { return mImageUniformRange; }
const std::vector<TransformFeedbackVarying> &getLinkedTransformFeedbackVaryings() const const std::vector<TransformFeedbackVarying> &getLinkedTransformFeedbackVaryings() const
...@@ -352,6 +353,7 @@ class ProgramExecutable ...@@ -352,6 +353,7 @@ class ProgramExecutable
// inner array of an array of arrays. Names and mapped names of uniforms that are arrays include // inner array of an array of arrays. Names and mapped names of uniforms that are arrays include
// [0] in the end. This makes implementation of queries simpler. // [0] in the end. This makes implementation of queries simpler.
std::vector<LinkedUniform> mUniforms; std::vector<LinkedUniform> mUniforms;
RangeUI mDefaultUniformRange;
RangeUI mSamplerUniformRange; RangeUI mSamplerUniformRange;
std::vector<InterfaceBlock> mUniformBlocks; std::vector<InterfaceBlock> mUniformBlocks;
std::vector<AtomicCounterBuffer> mAtomicCounterBuffers; std::vector<AtomicCounterBuffer> mAtomicCounterBuffers;
...@@ -366,6 +368,8 @@ class ProgramExecutable ...@@ -366,6 +368,8 @@ class ProgramExecutable
bool mPipelineHasComputeStorageBuffers; bool mPipelineHasComputeStorageBuffers;
bool mPipelineHasGraphicsAtomicCounterBuffers; bool mPipelineHasGraphicsAtomicCounterBuffers;
bool mPipelineHasComputeAtomicCounterBuffers; bool mPipelineHasComputeAtomicCounterBuffers;
bool mPipelineHasGraphicsDefaultUniforms;
bool mPipelineHasComputeDefaultUniforms;
ShaderMap<std::vector<sh::ShaderVariable>> mLinkedOutputVaryings; ShaderMap<std::vector<sh::ShaderVariable>> mLinkedOutputVaryings;
ShaderMap<std::vector<sh::ShaderVariable>> mLinkedInputVaryings; ShaderMap<std::vector<sh::ShaderVariable>> mLinkedInputVaryings;
......
...@@ -124,20 +124,6 @@ bool ProgramPipelineState::usesShaderProgram(ShaderProgramID programId) const ...@@ -124,20 +124,6 @@ bool ProgramPipelineState::usesShaderProgram(ShaderProgramID programId) const
return false; return false;
} }
bool ProgramPipelineState::hasDefaultUniforms() const
{
for (const gl::ShaderType shaderType : mExecutable->getLinkedShaderStages())
{
const Program *shaderProgram = getShaderProgram(shaderType);
if (shaderProgram && shaderProgram->getState().hasDefaultUniforms())
{
return true;
}
}
return false;
}
bool ProgramPipelineState::hasTextures() const bool ProgramPipelineState::hasTextures() const
{ {
for (const gl::ShaderType shaderType : mExecutable->getLinkedShaderStages()) for (const gl::ShaderType shaderType : mExecutable->getLinkedShaderStages())
...@@ -286,7 +272,7 @@ void ProgramPipeline::updateExecutableTextures() ...@@ -286,7 +272,7 @@ void ProgramPipeline::updateExecutableTextures()
} }
} }
void ProgramPipeline::updateHasBuffers() void ProgramPipeline::updateHasBooleans()
{ {
// Need to check all of the shader stages, not just linked, so we handle Compute correctly. // Need to check all of the shader stages, not just linked, so we handle Compute correctly.
for (const gl::ShaderType shaderType : kAllGraphicsShaderTypes) for (const gl::ShaderType shaderType : kAllGraphicsShaderTypes)
...@@ -308,6 +294,10 @@ void ProgramPipeline::updateHasBuffers() ...@@ -308,6 +294,10 @@ void ProgramPipeline::updateHasBuffers()
{ {
mState.mExecutable->mPipelineHasGraphicsAtomicCounterBuffers = true; mState.mExecutable->mPipelineHasGraphicsAtomicCounterBuffers = true;
} }
if (executable.hasDefaultUniforms())
{
mState.mExecutable->mPipelineHasGraphicsDefaultUniforms = true;
}
} }
} }
...@@ -328,6 +318,10 @@ void ProgramPipeline::updateHasBuffers() ...@@ -328,6 +318,10 @@ void ProgramPipeline::updateHasBuffers()
{ {
mState.mExecutable->mPipelineHasComputeAtomicCounterBuffers = true; mState.mExecutable->mPipelineHasComputeAtomicCounterBuffers = true;
} }
if (executable.hasDefaultUniforms())
{
mState.mExecutable->mPipelineHasComputeDefaultUniforms = true;
}
} }
} }
...@@ -341,7 +335,7 @@ void ProgramPipeline::updateExecutable() ...@@ -341,7 +335,7 @@ void ProgramPipeline::updateExecutable()
// All Shader ProgramExecutable properties // All Shader ProgramExecutable properties
updateExecutableTextures(); updateExecutableTextures();
updateHasBuffers(); updateHasBooleans();
} }
ProgramMergedVaryings ProgramPipeline::getMergedVaryings() const ProgramMergedVaryings ProgramPipeline::getMergedVaryings() const
......
...@@ -66,7 +66,6 @@ class ProgramPipelineState final : angle::NonCopyable ...@@ -66,7 +66,6 @@ class ProgramPipelineState final : angle::NonCopyable
bool usesShaderProgram(ShaderProgramID program) const; bool usesShaderProgram(ShaderProgramID program) const;
bool hasDefaultUniforms() const;
bool hasTextures() const; bool hasTextures() const;
bool hasImages() const; bool hasImages() const;
...@@ -163,7 +162,7 @@ class ProgramPipeline final : public RefCountObject<ProgramPipelineID>, public L ...@@ -163,7 +162,7 @@ class ProgramPipeline final : public RefCountObject<ProgramPipelineID>, public L
void updateExecutableAttributes(); void updateExecutableAttributes();
void updateTransformFeedbackMembers(); void updateTransformFeedbackMembers();
void updateExecutableTextures(); void updateExecutableTextures();
void updateHasBuffers(); void updateHasBooleans();
void updateExecutable(); void updateExecutable();
std::unique_ptr<rx::ProgramPipelineImpl> mProgramPipelineImpl; std::unique_ptr<rx::ProgramPipelineImpl> mProgramPipelineImpl;
......
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