Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit db3ef87

Browse files
timvpGoogleCommit Bot
authored and
Commit Bot
committed
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/+/2220776 Reviewed-by: Jamie Madill <[email protected]> Reviewed-by: Courtney Goeltzenleuchter <[email protected]> Commit-Queue: Tim Van Patten <[email protected]>
1 parent cd4bf5e commit db3ef87

File tree

6 files changed

+35
-34
lines changed

6 files changed

+35
-34
lines changed

src/libANGLE/Program.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,7 +1080,6 @@ ProgramState::ProgramState()
10801080
: mLabel(),
10811081
mAttachedShaders{},
10821082
mAttachedShadersMarkedForDetach{},
1083-
mDefaultUniformRange(0, 0),
10841083
mAtomicCounterUniformRange(0, 0),
10851084
mBinaryRetrieveableHint(false),
10861085
mSeparable(false),
@@ -3751,7 +3750,7 @@ void Program::linkSamplerAndImageBindings(GLuint *combinedImageUniforms)
37513750
}
37523751

37533752
// Whatever is left constitutes the default uniforms.
3754-
mState.mDefaultUniformRange = RangeUI(0, low);
3753+
mState.mExecutable->mDefaultUniformRange = RangeUI(0, low);
37553754
}
37563755

37573756
bool Program::linkAtomicCounterBuffers()
@@ -5488,7 +5487,8 @@ angle::Result Program::deserialize(const Context *context,
54885487

54895488
unsigned int defaultUniformRangeLow = stream.readInt<unsigned int>();
54905489
unsigned int defaultUniformRangeHigh = stream.readInt<unsigned int>();
5491-
mState.mDefaultUniformRange = RangeUI(defaultUniformRangeLow, defaultUniformRangeHigh);
5490+
mState.mExecutable->mDefaultUniformRange =
5491+
RangeUI(defaultUniformRangeLow, defaultUniformRangeHigh);
54925492

54935493
unsigned int samplerRangeLow = stream.readInt<unsigned int>();
54945494
unsigned int samplerRangeHigh = stream.readInt<unsigned int>();

src/libANGLE/Program.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ class ProgramState final : angle::NonCopyable
261261
const std::vector<SamplerBinding> &getSamplerBindings() const { return mSamplerBindings; }
262262
const std::vector<ImageBinding> &getImageBindings() const { return mImageBindings; }
263263
const sh::WorkGroupSize &getComputeShaderLocalSize() const { return mComputeShaderLocalSize; }
264-
const RangeUI &getDefaultUniformRange() const { return mDefaultUniformRange; }
264+
const RangeUI &getDefaultUniformRange() const { return mExecutable->getDefaultUniformRange(); }
265265
const RangeUI &getSamplerUniformRange() const { return mExecutable->getSamplerUniformRange(); }
266266
const RangeUI &getImageUniformRange() const { return mExecutable->getImageUniformRange(); }
267267
const RangeUI &getAtomicCounterUniformRange() const { return mAtomicCounterUniformRange; }
@@ -316,7 +316,6 @@ class ProgramState final : angle::NonCopyable
316316
return *mExecutable;
317317
}
318318

319-
bool hasDefaultUniforms() const { return !getDefaultUniformRange().empty(); }
320319
bool hasTextures() const { return !getSamplerBindings().empty(); }
321320
bool hasImages() const { return !getImageBindings().empty(); }
322321
bool hasEarlyFragmentTestsOptimization() const { return mEarlyFramentTestsOptimization; }
@@ -358,7 +357,6 @@ class ProgramState final : angle::NonCopyable
358357

359358
std::vector<VariableLocation> mUniformLocations;
360359
std::vector<BufferVariable> mBufferVariables;
361-
RangeUI mDefaultUniformRange;
362360
RangeUI mAtomicCounterUniformRange;
363361

364362
// An array of the samplers that are used by the program

src/libANGLE/ProgramExecutable.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,17 @@ ProgramExecutable::ProgramExecutable()
2727
mActiveImagesMask(0),
2828
mCanDrawWith(false),
2929
mTransformFeedbackBufferMode(GL_INTERLEAVED_ATTRIBS),
30+
mDefaultUniformRange(0, 0),
3031
mSamplerUniformRange(0, 0),
3132
mImageUniformRange(0, 0),
3233
mPipelineHasGraphicsUniformBuffers(false),
3334
mPipelineHasComputeUniformBuffers(false),
3435
mPipelineHasGraphicsStorageBuffers(false),
3536
mPipelineHasComputeStorageBuffers(false),
3637
mPipelineHasGraphicsAtomicCounterBuffers(false),
37-
mPipelineHasComputeAtomicCounterBuffers(false)
38+
mPipelineHasComputeAtomicCounterBuffers(false),
39+
mPipelineHasGraphicsDefaultUniforms(false),
40+
mPipelineHasComputeDefaultUniforms(false)
3841
{
3942
reset();
4043
}
@@ -63,6 +66,7 @@ ProgramExecutable::ProgramExecutable(const ProgramExecutable &other)
6366
mTransformFeedbackStrides(other.mTransformFeedbackStrides),
6467
mTransformFeedbackBufferMode(other.mTransformFeedbackBufferMode),
6568
mUniforms(other.mUniforms),
69+
mDefaultUniformRange(other.mDefaultUniformRange),
6670
mSamplerUniformRange(other.mSamplerUniformRange),
6771
mUniformBlocks(other.mUniformBlocks),
6872
mAtomicCounterBuffers(other.mAtomicCounterBuffers),
@@ -73,7 +77,9 @@ ProgramExecutable::ProgramExecutable(const ProgramExecutable &other)
7377
mPipelineHasGraphicsStorageBuffers(other.mPipelineHasGraphicsStorageBuffers),
7478
mPipelineHasComputeStorageBuffers(other.mPipelineHasComputeStorageBuffers),
7579
mPipelineHasGraphicsAtomicCounterBuffers(other.mPipelineHasGraphicsAtomicCounterBuffers),
76-
mPipelineHasComputeAtomicCounterBuffers(other.mPipelineHasComputeAtomicCounterBuffers)
80+
mPipelineHasComputeAtomicCounterBuffers(other.mPipelineHasComputeAtomicCounterBuffers),
81+
mPipelineHasGraphicsDefaultUniforms(other.mPipelineHasGraphicsDefaultUniforms),
82+
mPipelineHasComputeDefaultUniforms(other.mPipelineHasComputeDefaultUniforms)
7783
{
7884
reset();
7985
}
@@ -110,6 +116,8 @@ void ProgramExecutable::reset()
110116
mPipelineHasComputeStorageBuffers = false;
111117
mPipelineHasGraphicsAtomicCounterBuffers = false;
112118
mPipelineHasComputeAtomicCounterBuffers = false;
119+
mPipelineHasGraphicsDefaultUniforms = false;
120+
mPipelineHasComputeDefaultUniforms = false;
113121
}
114122

115123
void ProgramExecutable::load(gl::BinaryInputStream *stream)
@@ -131,6 +139,8 @@ void ProgramExecutable::load(gl::BinaryInputStream *stream)
131139
mPipelineHasComputeStorageBuffers = stream->readBool();
132140
mPipelineHasGraphicsAtomicCounterBuffers = stream->readBool();
133141
mPipelineHasComputeAtomicCounterBuffers = stream->readBool();
142+
mPipelineHasGraphicsDefaultUniforms = stream->readBool();
143+
mPipelineHasComputeDefaultUniforms = stream->readBool();
134144
}
135145

136146
void ProgramExecutable::save(gl::BinaryOutputStream *stream) const
@@ -151,6 +161,8 @@ void ProgramExecutable::save(gl::BinaryOutputStream *stream) const
151161
stream->writeInt(static_cast<bool>(mPipelineHasComputeStorageBuffers));
152162
stream->writeInt(static_cast<bool>(mPipelineHasGraphicsAtomicCounterBuffers));
153163
stream->writeInt(static_cast<bool>(mPipelineHasComputeAtomicCounterBuffers));
164+
stream->writeInt(static_cast<bool>(mPipelineHasGraphicsDefaultUniforms));
165+
stream->writeInt(static_cast<bool>(mPipelineHasComputeDefaultUniforms));
154166
}
155167

156168
const ProgramState *ProgramExecutable::getProgramState(ShaderType shaderType) const
@@ -223,16 +235,10 @@ AttributesMask ProgramExecutable::getAttributesMask() const
223235
return mAttributesMask;
224236
}
225237

226-
// TODO: http://anglebug.com/4520: Needs mDefaultUniformRange moved to ProgramExecutable
227238
bool ProgramExecutable::hasDefaultUniforms() const
228239
{
229-
ASSERT(mProgramState || mProgramPipelineState);
230-
if (mProgramState)
231-
{
232-
return mProgramState->hasDefaultUniforms();
233-
}
234-
235-
return mProgramPipelineState->hasDefaultUniforms();
240+
return !getDefaultUniformRange().empty() ||
241+
(isCompute() ? mPipelineHasComputeDefaultUniforms : mPipelineHasGraphicsDefaultUniforms);
236242
}
237243

238244
// TODO: http://anglebug.com/4520: Needs mSamplerBindings moved to ProgramExecutable

src/libANGLE/ProgramExecutable.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ class ProgramExecutable
221221
const std::vector<VariableLocation> &getOutputLocations() const { return mOutputLocations; }
222222
const std::vector<LinkedUniform> &getUniforms() const { return mUniforms; }
223223
const std::vector<InterfaceBlock> &getUniformBlocks() const { return mUniformBlocks; }
224+
const RangeUI &getDefaultUniformRange() const { return mDefaultUniformRange; }
224225
const RangeUI &getSamplerUniformRange() const { return mSamplerUniformRange; }
225226
const RangeUI &getImageUniformRange() const { return mImageUniformRange; }
226227
const std::vector<TransformFeedbackVarying> &getLinkedTransformFeedbackVaryings() const
@@ -352,6 +353,7 @@ class ProgramExecutable
352353
// inner array of an array of arrays. Names and mapped names of uniforms that are arrays include
353354
// [0] in the end. This makes implementation of queries simpler.
354355
std::vector<LinkedUniform> mUniforms;
356+
RangeUI mDefaultUniformRange;
355357
RangeUI mSamplerUniformRange;
356358
std::vector<InterfaceBlock> mUniformBlocks;
357359
std::vector<AtomicCounterBuffer> mAtomicCounterBuffers;
@@ -366,6 +368,8 @@ class ProgramExecutable
366368
bool mPipelineHasComputeStorageBuffers;
367369
bool mPipelineHasGraphicsAtomicCounterBuffers;
368370
bool mPipelineHasComputeAtomicCounterBuffers;
371+
bool mPipelineHasGraphicsDefaultUniforms;
372+
bool mPipelineHasComputeDefaultUniforms;
369373

370374
ShaderMap<std::vector<sh::ShaderVariable>> mLinkedOutputVaryings;
371375
ShaderMap<std::vector<sh::ShaderVariable>> mLinkedInputVaryings;

src/libANGLE/ProgramPipeline.cpp

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -124,20 +124,6 @@ bool ProgramPipelineState::usesShaderProgram(ShaderProgramID programId) const
124124
return false;
125125
}
126126

127-
bool ProgramPipelineState::hasDefaultUniforms() const
128-
{
129-
for (const gl::ShaderType shaderType : mExecutable->getLinkedShaderStages())
130-
{
131-
const Program *shaderProgram = getShaderProgram(shaderType);
132-
if (shaderProgram && shaderProgram->getState().hasDefaultUniforms())
133-
{
134-
return true;
135-
}
136-
}
137-
138-
return false;
139-
}
140-
141127
bool ProgramPipelineState::hasTextures() const
142128
{
143129
for (const gl::ShaderType shaderType : mExecutable->getLinkedShaderStages())
@@ -286,7 +272,7 @@ void ProgramPipeline::updateExecutableTextures()
286272
}
287273
}
288274

289-
void ProgramPipeline::updateHasBuffers()
275+
void ProgramPipeline::updateHasBooleans()
290276
{
291277
// Need to check all of the shader stages, not just linked, so we handle Compute correctly.
292278
for (const gl::ShaderType shaderType : kAllGraphicsShaderTypes)
@@ -308,6 +294,10 @@ void ProgramPipeline::updateHasBuffers()
308294
{
309295
mState.mExecutable->mPipelineHasGraphicsAtomicCounterBuffers = true;
310296
}
297+
if (executable.hasDefaultUniforms())
298+
{
299+
mState.mExecutable->mPipelineHasGraphicsDefaultUniforms = true;
300+
}
311301
}
312302
}
313303

@@ -328,6 +318,10 @@ void ProgramPipeline::updateHasBuffers()
328318
{
329319
mState.mExecutable->mPipelineHasComputeAtomicCounterBuffers = true;
330320
}
321+
if (executable.hasDefaultUniforms())
322+
{
323+
mState.mExecutable->mPipelineHasComputeDefaultUniforms = true;
324+
}
331325
}
332326
}
333327

@@ -341,7 +335,7 @@ void ProgramPipeline::updateExecutable()
341335

342336
// All Shader ProgramExecutable properties
343337
updateExecutableTextures();
344-
updateHasBuffers();
338+
updateHasBooleans();
345339
}
346340

347341
ProgramMergedVaryings ProgramPipeline::getMergedVaryings() const

src/libANGLE/ProgramPipeline.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ class ProgramPipelineState final : angle::NonCopyable
6666

6767
bool usesShaderProgram(ShaderProgramID program) const;
6868

69-
bool hasDefaultUniforms() const;
7069
bool hasTextures() const;
7170
bool hasImages() const;
7271

@@ -163,7 +162,7 @@ class ProgramPipeline final : public RefCountObject<ProgramPipelineID>, public L
163162
void updateExecutableAttributes();
164163
void updateTransformFeedbackMembers();
165164
void updateExecutableTextures();
166-
void updateHasBuffers();
165+
void updateHasBooleans();
167166
void updateExecutable();
168167

169168
std::unique_ptr<rx::ProgramPipelineImpl> mProgramPipelineImpl;

0 commit comments

Comments
 (0)