Commit 480edb8c by Olli Etuaho Committed by Commit Bot

Clean up TextureStorage11_2DMultisample

This de-duplicates functionality from TextureStorage11_EGLImage and TextureStorage11_2DMultisample. Neither of those supports changing the associated images or image access in shaders. Multisampled textures also cannot be compressed, so the size doesn't need to be adjusted according to block size. BUG=angleproject:2275 TEST=angle_end2end_tests Change-Id: I45bc573584065bf4f528f883435fadfbd7281077 Reviewed-on: https://chromium-review.googlesource.com/1216002Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent a735ee2f
...@@ -1602,13 +1602,62 @@ angle::Result TextureStorage11_External::getSwizzleRenderTarget( ...@@ -1602,13 +1602,62 @@ angle::Result TextureStorage11_External::getSwizzleRenderTarget(
return angle::Result::Stop(); return angle::Result::Stop();
} }
TextureStorage11ImmutableBase::TextureStorage11ImmutableBase(Renderer11 *renderer,
UINT bindFlags,
UINT miscFlags,
GLenum internalFormat)
: TextureStorage11(renderer, bindFlags, miscFlags, internalFormat)
{
}
void TextureStorage11ImmutableBase::associateImage(Image11 *, const gl::ImageIndex &)
{
}
void TextureStorage11ImmutableBase::disassociateImage(const gl::ImageIndex &, Image11 *)
{
}
void TextureStorage11ImmutableBase::verifyAssociatedImageValid(const gl::ImageIndex &, Image11 *)
{
}
angle::Result TextureStorage11ImmutableBase::releaseAssociatedImage(const gl::Context *context,
const gl::ImageIndex &,
Image11 *)
{
return angle::Result::Continue();
}
angle::Result TextureStorage11ImmutableBase::createSRVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedSRV *outSRV)
{
UNREACHABLE();
context->handleError(gl::InternalError() << "createSRVForImage is unimplemented.");
return angle::Result::Stop();
}
angle::Result TextureStorage11ImmutableBase::createUAVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedUAV *outUAV)
{
UNREACHABLE();
context->handleError(gl::InternalError() << "createUAVForImage is unimplemented.");
return angle::Result::Stop();
}
TextureStorage11_EGLImage::TextureStorage11_EGLImage(Renderer11 *renderer, TextureStorage11_EGLImage::TextureStorage11_EGLImage(Renderer11 *renderer,
EGLImageD3D *eglImage, EGLImageD3D *eglImage,
RenderTarget11 *renderTarget11) RenderTarget11 *renderTarget11)
: TextureStorage11(renderer, : TextureStorage11ImmutableBase(renderer,
D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE,
0, 0,
renderTarget11->getInternalFormat()), renderTarget11->getInternalFormat()),
mImage(eglImage), mImage(eglImage),
mCurrentRenderTarget(0), mCurrentRenderTarget(0),
mSwizzleTexture(), mSwizzleTexture(),
...@@ -1687,25 +1736,6 @@ angle::Result TextureStorage11_EGLImage::copyToStorage(const gl::Context *contex ...@@ -1687,25 +1736,6 @@ angle::Result TextureStorage11_EGLImage::copyToStorage(const gl::Context *contex
return angle::Result::Continue(); return angle::Result::Continue();
} }
void TextureStorage11_EGLImage::associateImage(Image11 *, const gl::ImageIndex &)
{
}
void TextureStorage11_EGLImage::disassociateImage(const gl::ImageIndex &, Image11 *)
{
}
void TextureStorage11_EGLImage::verifyAssociatedImageValid(const gl::ImageIndex &, Image11 *)
{
}
angle::Result TextureStorage11_EGLImage::releaseAssociatedImage(const gl::Context *context,
const gl::ImageIndex &,
Image11 *)
{
return angle::Result::Continue();
}
angle::Result TextureStorage11_EGLImage::useLevelZeroWorkaroundTexture(const gl::Context *context, angle::Result TextureStorage11_EGLImage::useLevelZeroWorkaroundTexture(const gl::Context *context,
bool) bool)
{ {
...@@ -1824,28 +1854,6 @@ angle::Result TextureStorage11_EGLImage::createSRVForSampler(const gl::Context * ...@@ -1824,28 +1854,6 @@ angle::Result TextureStorage11_EGLImage::createSRVForSampler(const gl::Context *
return angle::Result::Continue(); return angle::Result::Continue();
} }
angle::Result TextureStorage11_EGLImage::createSRVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedSRV *outSRV)
{
UNREACHABLE();
context->handleError(gl::InternalError());
return angle::Result::Stop();
}
angle::Result TextureStorage11_EGLImage::createUAVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedUAV *outUAV)
{
UNREACHABLE();
context->handleError(gl::InternalError());
return angle::Result::Stop();
}
angle::Result TextureStorage11_EGLImage::getImageRenderTarget(const gl::Context *context, angle::Result TextureStorage11_EGLImage::getImageRenderTarget(const gl::Context *context,
RenderTarget11 **outRT) const RenderTarget11 **outRT) const
{ {
...@@ -3263,7 +3271,7 @@ TextureStorage11_2DMultisample::TextureStorage11_2DMultisample(Renderer11 *rende ...@@ -3263,7 +3271,7 @@ TextureStorage11_2DMultisample::TextureStorage11_2DMultisample(Renderer11 *rende
int levels, int levels,
int samples, int samples,
bool fixedSampleLocations) bool fixedSampleLocations)
: TextureStorage11( : TextureStorage11ImmutableBase(
renderer, renderer,
GetTextureBindFlags(internalformat, renderer->getRenderer11DeviceCaps(), true), GetTextureBindFlags(internalformat, renderer->getRenderer11DeviceCaps(), true),
GetTextureMiscFlags(internalformat, renderer->getRenderer11DeviceCaps(), true, levels), GetTextureMiscFlags(internalformat, renderer->getRenderer11DeviceCaps(), true, levels),
...@@ -3271,8 +3279,10 @@ TextureStorage11_2DMultisample::TextureStorage11_2DMultisample(Renderer11 *rende ...@@ -3271,8 +3279,10 @@ TextureStorage11_2DMultisample::TextureStorage11_2DMultisample(Renderer11 *rende
mTexture(), mTexture(),
mRenderTarget(nullptr) mRenderTarget(nullptr)
{ {
// adjust size if needed for compressed textures // There are no multisampled compressed formats, so there's no need to adjust texture size
d3d11::MakeValidSize(false, mFormatInfo.texFormat, &width, &height, &mTopLevel); // according to block size.
ASSERT(d3d11::GetDXGIFormatSizeInfo(mFormatInfo.texFormat).blockWidth <= 1);
ASSERT(d3d11::GetDXGIFormatSizeInfo(mFormatInfo.texFormat).blockHeight <= 1);
mMipLevels = 1; mMipLevels = 1;
mTextureWidth = width; mTextureWidth = width;
...@@ -3299,27 +3309,6 @@ angle::Result TextureStorage11_2DMultisample::copyToStorage(const gl::Context *c ...@@ -3299,27 +3309,6 @@ angle::Result TextureStorage11_2DMultisample::copyToStorage(const gl::Context *c
return angle::Result::Stop(); return angle::Result::Stop();
} }
void TextureStorage11_2DMultisample::associateImage(Image11 *image, const gl::ImageIndex &index)
{
}
void TextureStorage11_2DMultisample::verifyAssociatedImageValid(const gl::ImageIndex &index,
Image11 *expectedImage)
{
}
void TextureStorage11_2DMultisample::disassociateImage(const gl::ImageIndex &index,
Image11 *expectedImage)
{
}
angle::Result TextureStorage11_2DMultisample::releaseAssociatedImage(const gl::Context *context,
const gl::ImageIndex &index,
Image11 *incomingImage)
{
return angle::Result::Continue();
}
angle::Result TextureStorage11_2DMultisample::getResource(const gl::Context *context, angle::Result TextureStorage11_2DMultisample::getResource(const gl::Context *context,
const TextureHelper11 **outResource) const TextureHelper11 **outResource)
{ {
...@@ -3446,28 +3435,6 @@ angle::Result TextureStorage11_2DMultisample::createSRVForSampler(const gl::Cont ...@@ -3446,28 +3435,6 @@ angle::Result TextureStorage11_2DMultisample::createSRVForSampler(const gl::Cont
return angle::Result::Continue(); return angle::Result::Continue();
} }
angle::Result TextureStorage11_2DMultisample::createSRVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedSRV *outSRV)
{
UNREACHABLE();
context->handleError(gl::InternalError() << "createSRVForImage is unimplemented.");
return angle::Result::Stop();
}
angle::Result TextureStorage11_2DMultisample::createUAVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedUAV *outUAV)
{
UNREACHABLE();
context->handleError(gl::InternalError() << "createUAVForImage is unimplemented.");
return angle::Result::Stop();
}
angle::Result TextureStorage11_2DMultisample::getSwizzleTexture(const gl::Context *context, angle::Result TextureStorage11_2DMultisample::getSwizzleTexture(const gl::Context *context,
const TextureHelper11 **outTexture) const TextureHelper11 **outTexture)
{ {
......
...@@ -382,7 +382,36 @@ class TextureStorage11_External : public TextureStorage11 ...@@ -382,7 +382,36 @@ class TextureStorage11_External : public TextureStorage11
Image11 *mAssociatedImage; Image11 *mAssociatedImage;
}; };
class TextureStorage11_EGLImage final : public TextureStorage11 // A base class for texture storage classes where the associated images are not changed, nor are
// they accessible as images in GLES3.1+ shaders.
class TextureStorage11ImmutableBase : public TextureStorage11
{
public:
TextureStorage11ImmutableBase(Renderer11 *renderer,
UINT bindFlags,
UINT miscFlags,
GLenum internalFormat);
void associateImage(Image11 *image, const gl::ImageIndex &index) override;
void disassociateImage(const gl::ImageIndex &index, Image11 *expectedImage) override;
void verifyAssociatedImageValid(const gl::ImageIndex &index, Image11 *expectedImage) override;
angle::Result releaseAssociatedImage(const gl::Context *context,
const gl::ImageIndex &index,
Image11 *incomingImage) override;
angle::Result createSRVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedSRV *outSRV) override;
angle::Result createUAVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedUAV *outUAV) override;
};
class TextureStorage11_EGLImage final : public TextureStorage11ImmutableBase
{ {
public: public:
TextureStorage11_EGLImage(Renderer11 *renderer, TextureStorage11_EGLImage(Renderer11 *renderer,
...@@ -404,13 +433,6 @@ class TextureStorage11_EGLImage final : public TextureStorage11 ...@@ -404,13 +433,6 @@ class TextureStorage11_EGLImage final : public TextureStorage11
angle::Result copyToStorage(const gl::Context *context, TextureStorage *destStorage) override; angle::Result copyToStorage(const gl::Context *context, TextureStorage *destStorage) override;
void associateImage(Image11 *image, const gl::ImageIndex &index) override;
void disassociateImage(const gl::ImageIndex &index, Image11 *expectedImage) override;
void verifyAssociatedImageValid(const gl::ImageIndex &index, Image11 *expectedImage) override;
angle::Result releaseAssociatedImage(const gl::Context *context,
const gl::ImageIndex &index,
Image11 *incomingImage) override;
angle::Result useLevelZeroWorkaroundTexture(const gl::Context *context, angle::Result useLevelZeroWorkaroundTexture(const gl::Context *context,
bool useLevelZeroTexture) override; bool useLevelZeroTexture) override;
...@@ -432,16 +454,6 @@ class TextureStorage11_EGLImage final : public TextureStorage11 ...@@ -432,16 +454,6 @@ class TextureStorage11_EGLImage final : public TextureStorage11
DXGI_FORMAT format, DXGI_FORMAT format,
const TextureHelper11 &texture, const TextureHelper11 &texture,
d3d11::SharedSRV *outSRV) override; d3d11::SharedSRV *outSRV) override;
angle::Result createSRVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedSRV *outSRV) override;
angle::Result createUAVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedUAV *outUAV) override;
angle::Result getImageRenderTarget(const gl::Context *context, RenderTarget11 **outRT) const; angle::Result getImageRenderTarget(const gl::Context *context, RenderTarget11 **outRT) const;
...@@ -699,7 +711,7 @@ class TextureStorage11_2DArray : public TextureStorage11 ...@@ -699,7 +711,7 @@ class TextureStorage11_2DArray : public TextureStorage11
ImageMap mAssociatedImages; ImageMap mAssociatedImages;
}; };
class TextureStorage11_2DMultisample : public TextureStorage11 class TextureStorage11_2DMultisample final : public TextureStorage11ImmutableBase
{ {
public: public:
TextureStorage11_2DMultisample(Renderer11 *renderer, TextureStorage11_2DMultisample(Renderer11 *renderer,
...@@ -721,13 +733,6 @@ class TextureStorage11_2DMultisample : public TextureStorage11 ...@@ -721,13 +733,6 @@ class TextureStorage11_2DMultisample : public TextureStorage11
angle::Result copyToStorage(const gl::Context *context, TextureStorage *destStorage) override; angle::Result copyToStorage(const gl::Context *context, TextureStorage *destStorage) override;
void associateImage(Image11 *image, const gl::ImageIndex &index) override;
void disassociateImage(const gl::ImageIndex &index, Image11 *expectedImage) override;
void verifyAssociatedImageValid(const gl::ImageIndex &index, Image11 *expectedImage) override;
angle::Result releaseAssociatedImage(const gl::Context *context,
const gl::ImageIndex &index,
Image11 *incomingImage) override;
protected: protected:
angle::Result getSwizzleTexture(const gl::Context *context, angle::Result getSwizzleTexture(const gl::Context *context,
const TextureHelper11 **outTexture) override; const TextureHelper11 **outTexture) override;
...@@ -747,16 +752,6 @@ class TextureStorage11_2DMultisample : public TextureStorage11 ...@@ -747,16 +752,6 @@ class TextureStorage11_2DMultisample : public TextureStorage11
DXGI_FORMAT format, DXGI_FORMAT format,
const TextureHelper11 &texture, const TextureHelper11 &texture,
d3d11::SharedSRV *outSRV) override; d3d11::SharedSRV *outSRV) override;
angle::Result createSRVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedSRV *outSRV) override;
angle::Result createUAVForImage(const gl::Context *context,
int level,
DXGI_FORMAT format,
const TextureHelper11 &texture,
d3d11::SharedUAV *outUAV) override;
TextureHelper11 mTexture; TextureHelper11 mTexture;
std::unique_ptr<RenderTarget11> mRenderTarget; std::unique_ptr<RenderTarget11> mRenderTarget;
......
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