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
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
{
for (const sh::ShaderVariable &attribute : mExecutable->mProgramInputs)
......@@ -5532,7 +5526,7 @@ angle::Result Program::deserialize(const Context *context,
void Program::postResolveLink(const gl::Context *context)
{
mState.updateActiveSamplers();
mState.mExecutable->updateActiveImages();
mState.mExecutable->updateActiveImages(getExecutable());
setUniformValuesFromBindingQualifiers();
......
......@@ -293,7 +293,6 @@ class ProgramState final : angle::NonCopyable
GLuint getUniformIndexFromSamplerIndex(GLuint samplerIndex) const;
bool isImageUniformIndex(GLuint index) const;
GLuint getImageIndexFromUniformIndex(GLuint uniformIndex) const;
GLuint getUniformIndexFromImageIndex(GLuint imageIndex) const;
GLuint getAttributeLocation(const std::string &name) const;
GLuint getBufferVariableIndexFromName(const std::string &name) const;
......
......@@ -290,6 +290,12 @@ bool ProgramExecutable::hasImages() const
(isCompute() ? mPipelineHasComputeImages : mPipelineHasGraphicsImages);
}
GLuint ProgramExecutable::getUniformIndexFromImageIndex(GLuint imageIndex) const
{
ASSERT(imageIndex < mImageUniformRange.length());
return imageIndex + mImageUniformRange.low();
}
void ProgramExecutable::updateActiveSamplers(const ProgramState &programState)
{
const std::vector<SamplerBinding> &samplerBindings = programState.getSamplerBindings();
......@@ -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)
{
......@@ -337,8 +343,8 @@ void ProgramExecutable::updateActiveImages()
continue;
}
uint32_t uniformIndex = mProgramState->getUniformIndexFromImageIndex(imageIndex);
const gl::LinkedUniform &imageUniform = mProgramState->getUniforms()[uniformIndex];
uint32_t uniformIndex = executable.getUniformIndexFromImageIndex(imageIndex);
const gl::LinkedUniform &imageUniform = executable.getUniforms()[uniformIndex];
const ShaderBitSet shaderBits = imageUniform.activeShaders();
for (GLint imageUnit : imageBinding.boundImageUnits)
{
......
......@@ -274,6 +274,8 @@ class ProgramExecutable
return static_cast<GLuint>(mShaderStorageBlocks.size());
}
GLuint getUniformIndexFromImageIndex(GLuint imageIndex) const;
gl::ProgramLinkedResources &getResources() const
{
ASSERT(mResources);
......@@ -299,7 +301,7 @@ class ProgramExecutable
friend class ProgramState;
void updateActiveSamplers(const ProgramState &programState);
void updateActiveImages();
void updateActiveImages(const ProgramExecutable &executable);
// Scans the sampler bindings for type conflicts with sampler 'textureUnitIndex'.
void setSamplerUniformTextureTypeAndFormat(size_t textureUnitIndex,
......
......@@ -421,23 +421,22 @@ void ProgramExecutableVk::addAtomicCounterBufferDescriptorSetDesc(
gl_vk::kShaderStageMap[shaderType]);
}
void ProgramExecutableVk::addImageDescriptorSetDesc(const gl::ProgramState &programState,
void ProgramExecutableVk::addImageDescriptorSetDesc(const gl::ProgramExecutable &executable,
vk::DescriptorSetLayoutDesc *descOut)
{
const std::vector<gl::ImageBinding> &imageBindings = programState.getImageBindings();
const std::vector<gl::LinkedUniform> &uniforms = programState.getUniforms();
const std::vector<gl::ImageBinding> &imageBindings = executable.getImageBindings();
const std::vector<gl::LinkedUniform> &uniforms = executable.getUniforms();
for (uint32_t imageIndex = 0; imageIndex < imageBindings.size(); ++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];
// The front-end always binds array image units sequentially.
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))
{
......@@ -687,7 +686,7 @@ angle::Result ProgramExecutableVk::createPipelineLayout(const gl::Context *glCon
{
const gl::ProgramState *programState = programStates[shaderType];
ASSERT(programState);
addImageDescriptorSetDesc(*programState, &resourcesSetDesc);
addImageDescriptorSetDesc(programState->getExecutable(), &resourcesSetDesc);
}
ANGLE_TRY(renderer->getDescriptorSetLayout(
......@@ -1060,13 +1059,14 @@ void ProgramExecutableVk::updateAtomicCounterBuffersDescriptorSet(
writeDescriptorInfo.data(), 0, nullptr);
}
angle::Result ProgramExecutableVk::updateImagesDescriptorSet(const gl::ProgramState &programState,
const gl::ShaderType shaderType,
ContextVk *contextVk)
angle::Result ProgramExecutableVk::updateImagesDescriptorSet(
const gl::ProgramExecutable &executable,
const gl::ShaderType shaderType,
ContextVk *contextVk)
{
const gl::State &glState = contextVk->getState();
const std::vector<gl::ImageBinding> &imageBindings = programState.getImageBindings();
const std::vector<gl::LinkedUniform> &uniforms = programState.getUniforms();
const std::vector<gl::ImageBinding> &imageBindings = executable.getImageBindings();
const std::vector<gl::LinkedUniform> &uniforms = executable.getUniforms();
if (imageBindings.empty())
{
......@@ -1085,7 +1085,7 @@ angle::Result ProgramExecutableVk::updateImagesDescriptorSet(const gl::ProgramSt
for (uint32_t imageIndex = 0; imageIndex < imageBindings.size(); ++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];
if (!imageUniform.isActive(shaderType))
......@@ -1171,7 +1171,8 @@ angle::Result ProgramExecutableVk::updateShaderResourcesDescriptorSet(
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
updateAtomicCounterBuffersDescriptorSet(*programState, shaderType, contextVk,
resourceUseList, commandBufferHelper);
angle::Result status = updateImagesDescriptorSet(*programState, shaderType, contextVk);
angle::Result status =
updateImagesDescriptorSet(programState->getExecutable(), shaderType, contextVk);
if (status != angle::Result::Continue)
{
return status;
......
......@@ -179,7 +179,7 @@ class ProgramExecutableVk
const std::vector<gl::AtomicCounterBuffer> &atomicCounterBuffers,
const gl::ShaderType shaderType,
vk::DescriptorSetLayoutDesc *descOut);
void addImageDescriptorSetDesc(const gl::ProgramState &programState,
void addImageDescriptorSetDesc(const gl::ProgramExecutable &executable,
vk::DescriptorSetLayoutDesc *descOut);
void addTextureDescriptorSetDesc(const gl::ProgramState &programState,
bool useOldRewriteStructSamplers,
......@@ -202,7 +202,7 @@ class ProgramExecutableVk
ContextVk *contextVk,
vk::ResourceUseList *resourceUseList,
vk::CommandBufferHelper *commandBufferHelper);
angle::Result updateImagesDescriptorSet(const gl::ProgramState &programState,
angle::Result updateImagesDescriptorSet(const gl::ProgramExecutable &executable,
const gl::ShaderType shaderType,
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