Commit a28efb2f by Tim Van Patten Committed by Commit Bot

Remove mProgramState from ProgramExecutable::updateActiveImages()

Use of the member variable mProgramState is being removed to reduce the circular coupling of ProgramExecutable and ProgramState. Bug: angleproject:4520 Test: Build/CQ Change-Id: I31d7e607fb06a374a0b0e1d35eb2a092614badf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2243323 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: 's avatarCourtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent bc8199fa
...@@ -1172,12 +1172,6 @@ GLuint ProgramState::getImageIndexFromUniformIndex(GLuint uniformIndex) const ...@@ -1172,12 +1172,6 @@ GLuint ProgramState::getImageIndexFromUniformIndex(GLuint uniformIndex) const
return uniformIndex - mExecutable->mImageUniformRange.low(); return uniformIndex - mExecutable->mImageUniformRange.low();
} }
GLuint ProgramState::getUniformIndexFromImageIndex(GLuint imageIndex) const
{
ASSERT(imageIndex < mExecutable->mImageUniformRange.length());
return imageIndex + mExecutable->mImageUniformRange.low();
}
GLuint ProgramState::getAttributeLocation(const std::string &name) const GLuint ProgramState::getAttributeLocation(const std::string &name) const
{ {
for (const sh::ShaderVariable &attribute : mExecutable->mProgramInputs) for (const sh::ShaderVariable &attribute : mExecutable->mProgramInputs)
...@@ -5532,7 +5526,7 @@ angle::Result Program::deserialize(const Context *context, ...@@ -5532,7 +5526,7 @@ angle::Result Program::deserialize(const Context *context,
void Program::postResolveLink(const gl::Context *context) void Program::postResolveLink(const gl::Context *context)
{ {
mState.updateActiveSamplers(); mState.updateActiveSamplers();
mState.mExecutable->updateActiveImages(); mState.mExecutable->updateActiveImages(getExecutable());
setUniformValuesFromBindingQualifiers(); setUniformValuesFromBindingQualifiers();
......
...@@ -293,7 +293,6 @@ class ProgramState final : angle::NonCopyable ...@@ -293,7 +293,6 @@ class ProgramState final : angle::NonCopyable
GLuint getUniformIndexFromSamplerIndex(GLuint samplerIndex) const; GLuint getUniformIndexFromSamplerIndex(GLuint samplerIndex) const;
bool isImageUniformIndex(GLuint index) const; bool isImageUniformIndex(GLuint index) const;
GLuint getImageIndexFromUniformIndex(GLuint uniformIndex) const; GLuint getImageIndexFromUniformIndex(GLuint uniformIndex) const;
GLuint getUniformIndexFromImageIndex(GLuint imageIndex) const;
GLuint getAttributeLocation(const std::string &name) const; GLuint getAttributeLocation(const std::string &name) const;
GLuint getBufferVariableIndexFromName(const std::string &name) const; GLuint getBufferVariableIndexFromName(const std::string &name) const;
......
...@@ -290,6 +290,12 @@ bool ProgramExecutable::hasImages() const ...@@ -290,6 +290,12 @@ bool ProgramExecutable::hasImages() const
(isCompute() ? mPipelineHasComputeImages : mPipelineHasGraphicsImages); (isCompute() ? mPipelineHasComputeImages : mPipelineHasGraphicsImages);
} }
GLuint ProgramExecutable::getUniformIndexFromImageIndex(GLuint imageIndex) const
{
ASSERT(imageIndex < mImageUniformRange.length());
return imageIndex + mImageUniformRange.low();
}
void ProgramExecutable::updateActiveSamplers(const ProgramState &programState) void ProgramExecutable::updateActiveSamplers(const ProgramState &programState)
{ {
const std::vector<SamplerBinding> &samplerBindings = programState.getSamplerBindings(); const std::vector<SamplerBinding> &samplerBindings = programState.getSamplerBindings();
...@@ -327,7 +333,7 @@ void ProgramExecutable::updateActiveSamplers(const ProgramState &programState) ...@@ -327,7 +333,7 @@ void ProgramExecutable::updateActiveSamplers(const ProgramState &programState)
} }
} }
void ProgramExecutable::updateActiveImages() void ProgramExecutable::updateActiveImages(const ProgramExecutable &executable)
{ {
for (uint32_t imageIndex = 0; imageIndex < mImageBindings.size(); ++imageIndex) for (uint32_t imageIndex = 0; imageIndex < mImageBindings.size(); ++imageIndex)
{ {
...@@ -337,8 +343,8 @@ void ProgramExecutable::updateActiveImages() ...@@ -337,8 +343,8 @@ void ProgramExecutable::updateActiveImages()
continue; continue;
} }
uint32_t uniformIndex = mProgramState->getUniformIndexFromImageIndex(imageIndex); uint32_t uniformIndex = executable.getUniformIndexFromImageIndex(imageIndex);
const gl::LinkedUniform &imageUniform = mProgramState->getUniforms()[uniformIndex]; const gl::LinkedUniform &imageUniform = executable.getUniforms()[uniformIndex];
const ShaderBitSet shaderBits = imageUniform.activeShaders(); const ShaderBitSet shaderBits = imageUniform.activeShaders();
for (GLint imageUnit : imageBinding.boundImageUnits) for (GLint imageUnit : imageBinding.boundImageUnits)
{ {
......
...@@ -274,6 +274,8 @@ class ProgramExecutable ...@@ -274,6 +274,8 @@ class ProgramExecutable
return static_cast<GLuint>(mShaderStorageBlocks.size()); return static_cast<GLuint>(mShaderStorageBlocks.size());
} }
GLuint getUniformIndexFromImageIndex(GLuint imageIndex) const;
gl::ProgramLinkedResources &getResources() const gl::ProgramLinkedResources &getResources() const
{ {
ASSERT(mResources); ASSERT(mResources);
...@@ -299,7 +301,7 @@ class ProgramExecutable ...@@ -299,7 +301,7 @@ class ProgramExecutable
friend class ProgramState; friend class ProgramState;
void updateActiveSamplers(const ProgramState &programState); void updateActiveSamplers(const ProgramState &programState);
void updateActiveImages(); void updateActiveImages(const ProgramExecutable &executable);
// Scans the sampler bindings for type conflicts with sampler 'textureUnitIndex'. // Scans the sampler bindings for type conflicts with sampler 'textureUnitIndex'.
void setSamplerUniformTextureTypeAndFormat(size_t textureUnitIndex, void setSamplerUniformTextureTypeAndFormat(size_t textureUnitIndex,
......
...@@ -421,23 +421,22 @@ void ProgramExecutableVk::addAtomicCounterBufferDescriptorSetDesc( ...@@ -421,23 +421,22 @@ void ProgramExecutableVk::addAtomicCounterBufferDescriptorSetDesc(
gl_vk::kShaderStageMap[shaderType]); gl_vk::kShaderStageMap[shaderType]);
} }
void ProgramExecutableVk::addImageDescriptorSetDesc(const gl::ProgramState &programState, void ProgramExecutableVk::addImageDescriptorSetDesc(const gl::ProgramExecutable &executable,
vk::DescriptorSetLayoutDesc *descOut) vk::DescriptorSetLayoutDesc *descOut)
{ {
const std::vector<gl::ImageBinding> &imageBindings = programState.getImageBindings(); const std::vector<gl::ImageBinding> &imageBindings = executable.getImageBindings();
const std::vector<gl::LinkedUniform> &uniforms = programState.getUniforms(); const std::vector<gl::LinkedUniform> &uniforms = executable.getUniforms();
for (uint32_t imageIndex = 0; imageIndex < imageBindings.size(); ++imageIndex) for (uint32_t imageIndex = 0; imageIndex < imageBindings.size(); ++imageIndex)
{ {
const gl::ImageBinding &imageBinding = imageBindings[imageIndex]; const gl::ImageBinding &imageBinding = imageBindings[imageIndex];
uint32_t uniformIndex = executable.getUniformIndexFromImageIndex(imageIndex);
uint32_t uniformIndex = programState.getUniformIndexFromImageIndex(imageIndex);
const gl::LinkedUniform &imageUniform = uniforms[uniformIndex]; const gl::LinkedUniform &imageUniform = uniforms[uniformIndex];
// The front-end always binds array image units sequentially. // The front-end always binds array image units sequentially.
uint32_t arraySize = static_cast<uint32_t>(imageBinding.boundImageUnits.size()); uint32_t arraySize = static_cast<uint32_t>(imageBinding.boundImageUnits.size());
for (const gl::ShaderType shaderType : programState.getExecutable().getLinkedShaderStages()) for (const gl::ShaderType shaderType : executable.getLinkedShaderStages())
{ {
if (!imageUniform.isActive(shaderType)) if (!imageUniform.isActive(shaderType))
{ {
...@@ -687,7 +686,7 @@ angle::Result ProgramExecutableVk::createPipelineLayout(const gl::Context *glCon ...@@ -687,7 +686,7 @@ angle::Result ProgramExecutableVk::createPipelineLayout(const gl::Context *glCon
{ {
const gl::ProgramState *programState = programStates[shaderType]; const gl::ProgramState *programState = programStates[shaderType];
ASSERT(programState); ASSERT(programState);
addImageDescriptorSetDesc(*programState, &resourcesSetDesc); addImageDescriptorSetDesc(programState->getExecutable(), &resourcesSetDesc);
} }
ANGLE_TRY(renderer->getDescriptorSetLayout( ANGLE_TRY(renderer->getDescriptorSetLayout(
...@@ -1060,13 +1059,14 @@ void ProgramExecutableVk::updateAtomicCounterBuffersDescriptorSet( ...@@ -1060,13 +1059,14 @@ void ProgramExecutableVk::updateAtomicCounterBuffersDescriptorSet(
writeDescriptorInfo.data(), 0, nullptr); writeDescriptorInfo.data(), 0, nullptr);
} }
angle::Result ProgramExecutableVk::updateImagesDescriptorSet(const gl::ProgramState &programState, angle::Result ProgramExecutableVk::updateImagesDescriptorSet(
const gl::ShaderType shaderType, const gl::ProgramExecutable &executable,
ContextVk *contextVk) const gl::ShaderType shaderType,
ContextVk *contextVk)
{ {
const gl::State &glState = contextVk->getState(); const gl::State &glState = contextVk->getState();
const std::vector<gl::ImageBinding> &imageBindings = programState.getImageBindings(); const std::vector<gl::ImageBinding> &imageBindings = executable.getImageBindings();
const std::vector<gl::LinkedUniform> &uniforms = programState.getUniforms(); const std::vector<gl::LinkedUniform> &uniforms = executable.getUniforms();
if (imageBindings.empty()) if (imageBindings.empty())
{ {
...@@ -1085,7 +1085,7 @@ angle::Result ProgramExecutableVk::updateImagesDescriptorSet(const gl::ProgramSt ...@@ -1085,7 +1085,7 @@ angle::Result ProgramExecutableVk::updateImagesDescriptorSet(const gl::ProgramSt
for (uint32_t imageIndex = 0; imageIndex < imageBindings.size(); ++imageIndex) for (uint32_t imageIndex = 0; imageIndex < imageBindings.size(); ++imageIndex)
{ {
const gl::ImageBinding &imageBinding = imageBindings[imageIndex]; const gl::ImageBinding &imageBinding = imageBindings[imageIndex];
uint32_t uniformIndex = programState.getUniformIndexFromImageIndex(imageIndex); uint32_t uniformIndex = executable.getUniformIndexFromImageIndex(imageIndex);
const gl::LinkedUniform &imageUniform = uniforms[uniformIndex]; const gl::LinkedUniform &imageUniform = uniforms[uniformIndex];
if (!imageUniform.isActive(shaderType)) if (!imageUniform.isActive(shaderType))
...@@ -1171,7 +1171,8 @@ angle::Result ProgramExecutableVk::updateShaderResourcesDescriptorSet( ...@@ -1171,7 +1171,8 @@ angle::Result ProgramExecutableVk::updateShaderResourcesDescriptorSet(
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
updateAtomicCounterBuffersDescriptorSet(*programState, shaderType, contextVk, updateAtomicCounterBuffersDescriptorSet(*programState, shaderType, contextVk,
resourceUseList, commandBufferHelper); resourceUseList, commandBufferHelper);
angle::Result status = updateImagesDescriptorSet(*programState, shaderType, contextVk); angle::Result status =
updateImagesDescriptorSet(programState->getExecutable(), shaderType, contextVk);
if (status != angle::Result::Continue) if (status != angle::Result::Continue)
{ {
return status; return status;
......
...@@ -179,7 +179,7 @@ class ProgramExecutableVk ...@@ -179,7 +179,7 @@ class ProgramExecutableVk
const std::vector<gl::AtomicCounterBuffer> &atomicCounterBuffers, const std::vector<gl::AtomicCounterBuffer> &atomicCounterBuffers,
const gl::ShaderType shaderType, const gl::ShaderType shaderType,
vk::DescriptorSetLayoutDesc *descOut); vk::DescriptorSetLayoutDesc *descOut);
void addImageDescriptorSetDesc(const gl::ProgramState &programState, void addImageDescriptorSetDesc(const gl::ProgramExecutable &executable,
vk::DescriptorSetLayoutDesc *descOut); vk::DescriptorSetLayoutDesc *descOut);
void addTextureDescriptorSetDesc(const gl::ProgramState &programState, void addTextureDescriptorSetDesc(const gl::ProgramState &programState,
bool useOldRewriteStructSamplers, bool useOldRewriteStructSamplers,
...@@ -202,7 +202,7 @@ class ProgramExecutableVk ...@@ -202,7 +202,7 @@ class ProgramExecutableVk
ContextVk *contextVk, ContextVk *contextVk,
vk::ResourceUseList *resourceUseList, vk::ResourceUseList *resourceUseList,
vk::CommandBufferHelper *commandBufferHelper); vk::CommandBufferHelper *commandBufferHelper);
angle::Result updateImagesDescriptorSet(const gl::ProgramState &programState, angle::Result updateImagesDescriptorSet(const gl::ProgramExecutable &executable,
const gl::ShaderType shaderType, const gl::ShaderType shaderType,
ContextVk *contextVk); 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