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

Commit 1c95795

Browse files
null77Commit Bot
authored andcommitted
Use ImageIndex in ensureSubImageInitialized.
Passes an already initialized struct so we don't need to separately pass a level and layer. Also removes some redundant gl:: prefixes in Texture.cpp and adds a new helper function doesSubImageNeedInit. Refactoring change only. Bug: angleproject:4517 Change-Id: Ib2d8a5c9ceaada03cc8d299adcb5aed53a0cf13c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2135928 Reviewed-by: Jamie Madill <[email protected]> Reviewed-by: Courtney Goeltzenleuchter <[email protected]> Commit-Queue: Jamie Madill <[email protected]>
1 parent c9c4e4e commit 1c95795

File tree

2 files changed

+50
-50
lines changed

2 files changed

+50
-50
lines changed

src/libANGLE/Texture.cpp

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ size_t GetImageDescIndex(TextureTarget target, size_t level)
3737
: level;
3838
}
3939

40-
InitState DetermineInitState(const Context *context,
41-
gl::Buffer *unpackBuffer,
42-
const uint8_t *pixels)
40+
InitState DetermineInitState(const Context *context, Buffer *unpackBuffer, const uint8_t *pixels)
4341
{
4442
// Can happen in tests.
4543
if (!context || !context->isRobustResourceInitEnabled())
@@ -222,12 +220,12 @@ const ImageDesc &TextureState::getBaseLevelDesc() const
222220
return getImageDesc(getBaseImageTarget(), getEffectiveBaseLevel());
223221
}
224222

225-
void TextureState::setCrop(const gl::Rectangle &rect)
223+
void TextureState::setCrop(const Rectangle &rect)
226224
{
227225
mCropRect = rect;
228226
}
229227

230-
const gl::Rectangle &TextureState::getCrop() const
228+
const Rectangle &TextureState::getCrop() const
231229
{
232230
return mCropRect;
233231
}
@@ -935,7 +933,7 @@ const TextureState &Texture::getTextureState() const
935933
return mState;
936934
}
937935

938-
const gl::Extents &Texture::getExtents(TextureTarget target, size_t level) const
936+
const Extents &Texture::getExtents(TextureTarget target, size_t level) const
939937
{
940938
ASSERT(TextureTargetToType(target) == mState.mType);
941939
return mState.getImageDesc(target, level).size;
@@ -1084,9 +1082,8 @@ angle::Result Texture::setSubImage(Context *context,
10841082
{
10851083
ASSERT(TextureTargetToType(target) == mState.mType);
10861084

1087-
ANGLE_TRY(ensureSubImageInitialized(context, target, level, area));
1088-
10891085
ImageIndex index = ImageIndex::MakeFromTarget(target, level, area.depth);
1086+
ANGLE_TRY(ensureSubImageInitialized(context, index, area));
10901087

10911088
ANGLE_TRY(mTexture->setSubImage(context, index, area, format, type, unpackState, unpackBuffer,
10921089
pixels));
@@ -1118,7 +1115,7 @@ angle::Result Texture::setCompressedImage(Context *context,
11181115
ANGLE_TRY(mTexture->setCompressedImage(context, index, internalFormat, size, unpackState,
11191116
imageSize, pixels));
11201117

1121-
gl::Buffer *unpackBuffer = context->getState().getTargetBuffer(gl::BufferBinding::PixelUnpack);
1118+
Buffer *unpackBuffer = context->getState().getTargetBuffer(BufferBinding::PixelUnpack);
11221119

11231120
InitState initState = DetermineInitState(context, unpackBuffer, pixels);
11241121
mState.setImageDesc(target, level, ImageDesc(size, Format(internalFormat), initState));
@@ -1138,9 +1135,8 @@ angle::Result Texture::setCompressedSubImage(const Context *context,
11381135
{
11391136
ASSERT(TextureTargetToType(target) == mState.mType);
11401137

1141-
ANGLE_TRY(ensureSubImageInitialized(context, target, level, area));
1142-
11431138
ImageIndex index = ImageIndex::MakeFromTarget(target, level, area.depth);
1139+
ANGLE_TRY(ensureSubImageInitialized(context, index, area));
11441140

11451141
ANGLE_TRY(mTexture->setCompressedSubImage(context, index, area, format, unpackState, imageSize,
11461142
pixels));
@@ -1163,11 +1159,11 @@ angle::Result Texture::copyImage(Context *context,
11631159
ANGLE_TRY(releaseTexImageInternal(context));
11641160
ANGLE_TRY(orphanImages(context));
11651161

1162+
ImageIndex index = ImageIndex::MakeFromTarget(target, level, 1);
1163+
11661164
// Use the source FBO size as the init image area.
11671165
Box destBox(0, 0, 0, sourceArea.width, sourceArea.height, 1);
1168-
ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox));
1169-
1170-
ImageIndex index = ImageIndex::MakeFromTarget(target, level, 1);
1166+
ANGLE_TRY(ensureSubImageInitialized(context, index, destBox));
11711167

11721168
ANGLE_TRY(mTexture->copyImage(context, index, sourceArea, internalFormat, source));
11731169

@@ -1215,8 +1211,7 @@ angle::Result Texture::copySubImage(Context *context,
12151211
}
12161212
}
12171213

1218-
ANGLE_TRY(
1219-
ensureSubImageInitialized(context, index.getTarget(), index.getLevelIndex(), destBox));
1214+
ANGLE_TRY(ensureSubImageInitialized(context, index, destBox));
12201215

12211216
ANGLE_TRY(mTexture->copySubImage(context, index, destOffset, sourceArea, source));
12221217
ANGLE_TRY(handleMipmapGenerationHint(context, index.getLevelIndex()));
@@ -1283,9 +1278,8 @@ angle::Result Texture::copySubTexture(const Context *context,
12831278

12841279
Box destBox(destOffset.x, destOffset.y, destOffset.z, sourceBox.width, sourceBox.height,
12851280
sourceBox.depth);
1286-
ANGLE_TRY(ensureSubImageInitialized(context, target, level, destBox));
1287-
12881281
ImageIndex index = ImageIndex::MakeFromTarget(target, level, sourceBox.depth);
1282+
ANGLE_TRY(ensureSubImageInitialized(context, index, destBox));
12891283

12901284
ANGLE_TRY(mTexture->copySubTexture(context, index, destOffset, sourceLevel, sourceBox,
12911285
unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha,
@@ -1704,12 +1698,12 @@ const ColorGeneric &Texture::getBorderColor() const
17041698
return mState.mSamplerState.getBorderColor();
17051699
}
17061700

1707-
void Texture::setCrop(const gl::Rectangle &rect)
1701+
void Texture::setCrop(const Rectangle &rect)
17081702
{
17091703
mState.setCrop(rect);
17101704
}
17111705

1712-
const gl::Rectangle &Texture::getCrop() const
1706+
const Rectangle &Texture::getCrop() const
17131707
{
17141708
return mState.getCrop();
17151709
}
@@ -1858,36 +1852,40 @@ void Texture::setInitState(const ImageIndex &imageIndex, InitState initState)
18581852
}
18591853
}
18601854

1861-
angle::Result Texture::ensureSubImageInitialized(const Context *context,
1862-
TextureTarget target,
1863-
size_t level,
1864-
const gl::Box &area)
1855+
bool Texture::doesSubImageNeedInit(const Context *context,
1856+
const ImageIndex &imageIndex,
1857+
const Box &area) const
18651858
{
18661859
if (!context->isRobustResourceInitEnabled() || mState.mInitState == InitState::Initialized)
18671860
{
1868-
return angle::Result::Continue;
1861+
return false;
18691862
}
18701863

18711864
// Pre-initialize the texture contents if necessary.
1872-
// TODO(jmadill): Check if area overlaps the entire texture.
1873-
ImageIndex imageIndex =
1874-
ImageIndex::MakeFromTarget(target, static_cast<GLint>(level), area.depth);
1875-
const auto &desc = mState.getImageDesc(imageIndex);
1876-
if (desc.initState == InitState::MayNeedInit)
1865+
const ImageDesc &desc = mState.getImageDesc(imageIndex);
1866+
if (desc.initState != InitState::MayNeedInit)
18771867
{
1878-
ASSERT(mState.mInitState == InitState::MayNeedInit);
1879-
bool coversWholeImage = area.x == 0 && area.y == 0 && area.z == 0 &&
1880-
area.width == desc.size.width && area.height == desc.size.height &&
1881-
area.depth == desc.size.depth;
1882-
if (!coversWholeImage)
1883-
{
1884-
// NOTE: do not optimize this to only initialize the passed area of the texture, or the
1885-
// initialization logic in copySubImage will be incorrect.
1886-
ANGLE_TRY(initializeContents(context, imageIndex));
1887-
}
1888-
setInitState(imageIndex, InitState::Initialized);
1868+
return false;
18891869
}
18901870

1871+
ASSERT(mState.mInitState == InitState::MayNeedInit);
1872+
bool coversWholeImage = area.x == 0 && area.y == 0 && area.z == 0 &&
1873+
area.width == desc.size.width && area.height == desc.size.height &&
1874+
area.depth == desc.size.depth;
1875+
return !coversWholeImage;
1876+
}
1877+
1878+
angle::Result Texture::ensureSubImageInitialized(const Context *context,
1879+
const ImageIndex &imageIndex,
1880+
const Box &area)
1881+
{
1882+
if (doesSubImageNeedInit(context, imageIndex, area))
1883+
{
1884+
// NOTE: do not optimize this to only initialize the passed area of the texture, or the
1885+
// initialization logic in copySubImage will be incorrect.
1886+
ANGLE_TRY(initializeContents(context, imageIndex));
1887+
}
1888+
setInitState(imageIndex, InitState::Initialized);
18911889
return angle::Result::Continue;
18921890
}
18931891

src/libANGLE/Texture.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ class TextureState final : private angle::NonCopyable
155155
const ImageDesc &getBaseLevelDesc() const;
156156

157157
// GLES1 emulation: For GL_OES_draw_texture
158-
void setCrop(const gl::Rectangle &rect);
159-
const gl::Rectangle &getCrop() const;
158+
void setCrop(const Rectangle &rect);
159+
const Rectangle &getCrop() const;
160160

161161
// GLES1 emulation: Auto-mipmap generation is a texparameter
162162
void setGenerateMipmapHint(GLenum hint);
@@ -233,7 +233,7 @@ class TextureState final : private angle::NonCopyable
233233

234234
// GLES1 emulation: Texture crop rectangle
235235
// For GL_OES_draw_texture
236-
gl::Rectangle mCropRect;
236+
Rectangle mCropRect;
237237

238238
// GLES1 emulation: Generate-mipmap hint per texture
239239
GLenum mGenerateMipmapHint;
@@ -331,7 +331,7 @@ class Texture final : public RefCountObject<TextureID>,
331331

332332
const TextureState &getTextureState() const;
333333

334-
const gl::Extents &getExtents(TextureTarget target, size_t level) const;
334+
const Extents &getExtents(TextureTarget target, size_t level) const;
335335
size_t getWidth(TextureTarget target, size_t level) const;
336336
size_t getHeight(TextureTarget target, size_t level) const;
337337
size_t getDepth(TextureTarget target, size_t level) const;
@@ -516,8 +516,8 @@ class Texture final : public RefCountObject<TextureID>,
516516
bool getAttachmentFixedSampleLocations(const ImageIndex &imageIndex) const;
517517

518518
// GLES1 emulation
519-
void setCrop(const gl::Rectangle &rect);
520-
const gl::Rectangle &getCrop() const;
519+
void setCrop(const Rectangle &rect);
520+
const Rectangle &getCrop() const;
521521
void setGenerateMipmapHint(GLenum generate);
522522
GLenum getGenerateMipmapHint() const;
523523

@@ -597,10 +597,12 @@ class Texture final : public RefCountObject<TextureID>,
597597
void invalidateCompletenessCache() const;
598598
angle::Result releaseTexImageInternal(Context *context);
599599

600+
bool doesSubImageNeedInit(const Context *context,
601+
const ImageIndex &imageIndex,
602+
const Box &area) const;
600603
angle::Result ensureSubImageInitialized(const Context *context,
601-
TextureTarget target,
602-
size_t level,
603-
const gl::Box &area);
604+
const ImageIndex &imageIndex,
605+
const Box &area);
604606

605607
angle::Result handleMipmapGenerationHint(Context *context, int level);
606608

0 commit comments

Comments
 (0)