Commit 1d31aca9 by Nicolas Capens

Deduplicate SRV creation.

BUG=angle:596 Change-Id: I2f4e0c4dd5c1182db1f67589f72dafef3717b363 Reviewed-on: https://chromium-review.googlesource.com/193231Tested-by: 's avatarNicolas Capens <nicolascapens@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent 76b258f8
...@@ -493,34 +493,60 @@ ID3D11ShaderResourceView *TextureStorage11_2D::getSRV(const gl::SamplerState &sa ...@@ -493,34 +493,60 @@ ID3D11ShaderResourceView *TextureStorage11_2D::getSRV(const gl::SamplerState &sa
{ {
bool swizzleRequired = samplerState.swizzleRequired(); bool swizzleRequired = samplerState.swizzleRequired();
bool mipmapping = gl::IsMipmapFiltered(samplerState); bool mipmapping = gl::IsMipmapFiltered(samplerState);
ID3D11ShaderResourceView **resultSRV = &mSRV[swizzleRequired][mipmapping];
if (swizzleRequired) if (swizzleRequired)
{ {
verifySwizzleExists(samplerState.swizzleRed, samplerState.swizzleGreen, samplerState.swizzleBlue, samplerState.swizzleAlpha); verifySwizzleExists(samplerState.swizzleRed, samplerState.swizzleGreen, samplerState.swizzleBlue, samplerState.swizzleAlpha);
} }
if (!(*resultSRV)) if (!mSRV[swizzleRequired][mipmapping])
{ {
ID3D11Device *device = mRenderer->getDevice(); int mipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1; // -1 creates all levels
DXGI_FORMAT format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat);
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; ID3D11Texture2D *texture = swizzleRequired ? getSwizzleTexture() : mTexture;
srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat); mSRV[swizzleRequired][mipmapping] = createSRV(0, mipLevels, format, texture);
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; }
srvDesc.Texture2D.MipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1;
srvDesc.Texture2D.MostDetailedMip = mTopLevel;
ID3D11Texture2D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture; return mSRV[swizzleRequired][mipmapping];
HRESULT result = device->CreateShaderResourceView(sourceTexture, &srvDesc, resultSRV); }
if (result == E_OUTOFMEMORY) ID3D11ShaderResourceView *TextureStorage11_2D::getSRVLevel(int mipLevel)
{
if (mipLevel >= 0 && mipLevel < getLevelCount())
{
if (!mLevelSRVs[mipLevel])
{ {
return gl::error(GL_OUT_OF_MEMORY, static_cast<ID3D11ShaderResourceView*>(NULL)); mLevelSRVs[mipLevel] = createSRV(mipLevel, 1, mShaderResourceFormat, mTexture);
} }
ASSERT(SUCCEEDED(result));
return mLevelSRVs[mipLevel];
}
else
{
return NULL;
} }
}
ID3D11ShaderResourceView *TextureStorage11_2D::createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture)
{
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = format;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
srvDesc.Texture2D.MostDetailedMip = mTopLevel + baseLevel;
srvDesc.Texture2D.MipLevels = mipLevels;
ID3D11ShaderResourceView *SRV = NULL;
ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateShaderResourceView(texture, &srvDesc, &SRV);
return *resultSRV; if (result == E_OUTOFMEMORY)
{
gl::error(GL_OUT_OF_MEMORY);
}
ASSERT(SUCCEEDED(result));
return SRV;
} }
void TextureStorage11_2D::generateMipmap(int level) void TextureStorage11_2D::generateMipmap(int level)
...@@ -599,38 +625,6 @@ ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel ...@@ -599,38 +625,6 @@ ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel
} }
} }
ID3D11ShaderResourceView *TextureStorage11_2D::getSRVLevel(int mipLevel)
{
if (mipLevel >= 0 && mipLevel < getLevelCount())
{
if (!mLevelSRVs[mipLevel])
{
ID3D11Device *device = mRenderer->getDevice();
HRESULT result;
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
srvDesc.Texture2D.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture2D.MipLevels = 1;
result = device->CreateShaderResourceView(mTexture, &srvDesc, &mLevelSRVs[mipLevel]);
if (result == E_OUTOFMEMORY)
{
return gl::error(GL_OUT_OF_MEMORY, static_cast<ID3D11ShaderResourceView*>(NULL));
}
ASSERT(SUCCEEDED(result));
}
return mLevelSRVs[mipLevel];
}
else
{
return NULL;
}
}
unsigned int TextureStorage11_2D::getTextureLevelDepth(int mipLevel) const unsigned int TextureStorage11_2D::getTextureLevelDepth(int mipLevel) const
{ {
return 1; return 1;
...@@ -833,48 +827,76 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRV(const gl::SamplerState & ...@@ -833,48 +827,76 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRV(const gl::SamplerState &
{ {
bool swizzleRequired = samplerState.swizzleRequired(); bool swizzleRequired = samplerState.swizzleRequired();
bool mipmapping = gl::IsMipmapFiltered(samplerState); bool mipmapping = gl::IsMipmapFiltered(samplerState);
ID3D11ShaderResourceView **resultSRV = &mSRV[swizzleRequired][mipmapping];
if (swizzleRequired) if (swizzleRequired)
{ {
verifySwizzleExists(samplerState.swizzleRed, samplerState.swizzleGreen, samplerState.swizzleBlue, samplerState.swizzleAlpha); verifySwizzleExists(samplerState.swizzleRed, samplerState.swizzleGreen, samplerState.swizzleBlue, samplerState.swizzleAlpha);
} }
if (!(*resultSRV)) if (!mSRV[swizzleRequired][mipmapping])
{ {
ID3D11Device *device = mRenderer->getDevice(); // Unnormalized integer cube maps are not supported by DX11; we emulate them as an array of six 2D textures
bool unnormalizedInteger = (d3d11::GetComponentType(mTextureFormat) == GL_INT ||
d3d11::GetComponentType(mTextureFormat) == GL_UNSIGNED_INT);
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; int mipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1; // -1 creates all levels
srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat); DXGI_FORMAT format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat);
ID3D11Texture2D *texture = swizzleRequired ? getSwizzleTexture() : mTexture;
mSRV[swizzleRequired][mipmapping] = createSRV(unnormalizedInteger, 0, mipLevels, format, texture);
}
// Unnormalized integer cube maps are not supported by DX11; we emulate them as an array of six 2D textures return mSRV[swizzleRequired][mipmapping];
if (d3d11::GetComponentType(mTextureFormat) == GL_INT || }
d3d11::GetComponentType(mTextureFormat) == GL_UNSIGNED_INT)
{ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRVLevel(int mipLevel)
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; {
srvDesc.Texture2DArray.MostDetailedMip = mTopLevel; if (mipLevel >= 0 && mipLevel < getLevelCount())
srvDesc.Texture2DArray.MipLevels = 1; {
srvDesc.Texture2DArray.FirstArraySlice = 0; if (!mLevelSRVs[mipLevel])
srvDesc.Texture2DArray.ArraySize = 6;
}
else
{ {
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; mLevelSRVs[mipLevel] = createSRV(true, mipLevel, 1, mShaderResourceFormat, mTexture);
srvDesc.TextureCube.MipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1;
srvDesc.TextureCube.MostDetailedMip = mTopLevel;
} }
ID3D11Texture2D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture; return mLevelSRVs[mipLevel];
HRESULT result = device->CreateShaderResourceView(sourceTexture, &srvDesc, resultSRV); }
else
{
return NULL;
}
}
ID3D11ShaderResourceView *TextureStorage11_Cube::createSRV(bool arraySRV, int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture)
{
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = format;
if (result == E_OUTOFMEMORY) if (arraySRV)
{ {
return gl::error(GL_OUT_OF_MEMORY, static_cast<ID3D11ShaderResourceView*>(NULL)); srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
} srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + baseLevel;
ASSERT(SUCCEEDED(result)); srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = 6;
}
else
{
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
srvDesc.TextureCube.MipLevels = mipLevels;
srvDesc.TextureCube.MostDetailedMip = mTopLevel + baseLevel;
} }
return *resultSRV; ID3D11ShaderResourceView *SRV = NULL;
ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateShaderResourceView(texture, &srvDesc, &SRV);
if (result == E_OUTOFMEMORY)
{
gl::error(GL_OUT_OF_MEMORY);
}
ASSERT(SUCCEEDED(result));
return SRV;
} }
void TextureStorage11_Cube::generateMipmap(int faceIndex, int level) void TextureStorage11_Cube::generateMipmap(int faceIndex, int level)
...@@ -956,40 +978,6 @@ ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLev ...@@ -956,40 +978,6 @@ ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLev
} }
} }
ID3D11ShaderResourceView *TextureStorage11_Cube::getSRVLevel(int mipLevel)
{
if (mipLevel >= 0 && mipLevel < getLevelCount())
{
if (!mLevelSRVs[mipLevel])
{
ID3D11Device *device = mRenderer->getDevice();
HRESULT result;
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = 6;
result = device->CreateShaderResourceView(mTexture, &srvDesc, &mLevelSRVs[mipLevel]);
if (result == E_OUTOFMEMORY)
{
return gl::error(GL_OUT_OF_MEMORY, static_cast<ID3D11ShaderResourceView*>(NULL));
}
ASSERT(SUCCEEDED(result));
}
return mLevelSRVs[mipLevel];
}
else
{
return NULL;
}
}
unsigned int TextureStorage11_Cube::getTextureLevelDepth(int mipLevel) const unsigned int TextureStorage11_Cube::getTextureLevelDepth(int mipLevel) const
{ {
return 6; return 6;
...@@ -1104,34 +1092,60 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV(const gl::SamplerState &sa ...@@ -1104,34 +1092,60 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV(const gl::SamplerState &sa
{ {
bool swizzleRequired = samplerState.swizzleRequired(); bool swizzleRequired = samplerState.swizzleRequired();
bool mipmapping = gl::IsMipmapFiltered(samplerState); bool mipmapping = gl::IsMipmapFiltered(samplerState);
ID3D11ShaderResourceView **resultSRV = &mSRV[swizzleRequired][mipmapping];
if (swizzleRequired) if (swizzleRequired)
{ {
verifySwizzleExists(samplerState.swizzleRed, samplerState.swizzleGreen, samplerState.swizzleBlue, samplerState.swizzleAlpha); verifySwizzleExists(samplerState.swizzleRed, samplerState.swizzleGreen, samplerState.swizzleBlue, samplerState.swizzleAlpha);
} }
if (!(*resultSRV)) if (!mSRV[swizzleRequired][mipmapping])
{ {
ID3D11Device *device = mRenderer->getDevice(); int mipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1; // -1 creates all levels
DXGI_FORMAT format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat);
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; ID3D11Texture3D *texture = swizzleRequired ? getSwizzleTexture() : mTexture;
srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat); mSRV[swizzleRequired][mipmapping] = createSRV(0, mipLevels, format, texture);
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; }
srvDesc.Texture3D.MipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1;
srvDesc.Texture3D.MostDetailedMip = mTopLevel;
ID3D11Texture3D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture; return mSRV[swizzleRequired][mipmapping];
HRESULT result = device->CreateShaderResourceView(sourceTexture, &srvDesc, resultSRV); }
if (result == E_OUTOFMEMORY) ID3D11ShaderResourceView *TextureStorage11_3D::getSRVLevel(int mipLevel)
{
if (mipLevel >= 0 && mipLevel < getLevelCount())
{
if (!mLevelSRVs[mipLevel])
{ {
return gl::error(GL_OUT_OF_MEMORY, static_cast<ID3D11ShaderResourceView*>(NULL)); mLevelSRVs[mipLevel] = createSRV(mipLevel, 1, mShaderResourceFormat, mTexture);
} }
ASSERT(SUCCEEDED(result));
return mLevelSRVs[mipLevel];
}
else
{
return NULL;
} }
}
ID3D11ShaderResourceView *TextureStorage11_3D::createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture)
{
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = format;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
srvDesc.Texture3D.MostDetailedMip = baseLevel;
srvDesc.Texture3D.MipLevels = mipLevels;
return *resultSRV; ID3D11ShaderResourceView *SRV = NULL;
ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateShaderResourceView(texture, &srvDesc, &SRV);
if (result == E_OUTOFMEMORY)
{
gl::error(GL_OUT_OF_MEMORY);
}
ASSERT(SUCCEEDED(result));
return SRV;
} }
RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel) RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
...@@ -1315,38 +1329,6 @@ ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel ...@@ -1315,38 +1329,6 @@ ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel
} }
} }
ID3D11ShaderResourceView *TextureStorage11_3D::getSRVLevel(int mipLevel)
{
if (mipLevel >= 0 && mipLevel < getLevelCount())
{
if (!mLevelSRVs[mipLevel])
{
ID3D11Device *device = mRenderer->getDevice();
HRESULT result;
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
srvDesc.Texture3D.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture3D.MipLevels = 1;
result = device->CreateShaderResourceView(mTexture, &srvDesc, &mLevelSRVs[mipLevel]);
if (result == E_OUTOFMEMORY)
{
return gl::error(GL_OUT_OF_MEMORY, static_cast<ID3D11ShaderResourceView*>(NULL));
}
ASSERT(SUCCEEDED(result));
}
return mLevelSRVs[mipLevel];
}
else
{
return NULL;
}
}
unsigned int TextureStorage11_3D::getTextureLevelDepth(int mipLevel) const unsigned int TextureStorage11_3D::getTextureLevelDepth(int mipLevel) const
{ {
return std::max(mTextureDepth >> mipLevel, 1U); return std::max(mTextureDepth >> mipLevel, 1U);
...@@ -1462,36 +1444,62 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRV(const gl::SamplerStat ...@@ -1462,36 +1444,62 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRV(const gl::SamplerStat
{ {
bool swizzleRequired = samplerState.swizzleRequired(); bool swizzleRequired = samplerState.swizzleRequired();
bool mipmapping = gl::IsMipmapFiltered(samplerState); bool mipmapping = gl::IsMipmapFiltered(samplerState);
ID3D11ShaderResourceView **resultSRV = &mSRV[swizzleRequired][mipmapping];
if (swizzleRequired) if (swizzleRequired)
{ {
verifySwizzleExists(samplerState.swizzleRed, samplerState.swizzleGreen, samplerState.swizzleBlue, samplerState.swizzleAlpha); verifySwizzleExists(samplerState.swizzleRed, samplerState.swizzleGreen, samplerState.swizzleBlue, samplerState.swizzleAlpha);
} }
if (!(*resultSRV)) if (!mSRV[swizzleRequired][mipmapping])
{ {
ID3D11Device *device = mRenderer->getDevice(); int mipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1; // -1 creates all levels
DXGI_FORMAT format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat);
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; ID3D11Texture2D *texture = swizzleRequired ? getSwizzleTexture() : mTexture;
srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat); mSRV[swizzleRequired][mipmapping] = createSRV(0, mipLevels, format, texture);
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; }
srvDesc.Texture2DArray.MostDetailedMip = mTopLevel;
srvDesc.Texture2DArray.MipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1;
srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = mTextureDepth;
ID3D11Texture2D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture; return mSRV[swizzleRequired][mipmapping];
HRESULT result = device->CreateShaderResourceView(sourceTexture, &srvDesc, resultSRV); }
if (result == E_OUTOFMEMORY) ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRVLevel(int mipLevel)
{
if (mipLevel >= 0 && mipLevel < getLevelCount())
{
if (!mLevelSRVs[mipLevel])
{ {
return gl::error(GL_OUT_OF_MEMORY, static_cast<ID3D11ShaderResourceView*>(NULL)); mLevelSRVs[mipLevel] = createSRV(mipLevel, 1, mShaderResourceFormat, mTexture);
} }
ASSERT(SUCCEEDED(result));
return mLevelSRVs[mipLevel];
} }
else
{
return NULL;
}
}
ID3D11ShaderResourceView *TextureStorage11_2DArray::createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture)
{
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = format;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + baseLevel;
srvDesc.Texture2DArray.MipLevels = mipLevels;
srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = mTextureDepth;
ID3D11ShaderResourceView *SRV = NULL;
return *resultSRV; ID3D11Device *device = mRenderer->getDevice();
HRESULT result = device->CreateShaderResourceView(texture, &srvDesc, &SRV);
if (result == E_OUTOFMEMORY)
{
gl::error(GL_OUT_OF_MEMORY);
}
ASSERT(SUCCEEDED(result));
return SRV;
} }
RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int layer) RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int layer)
...@@ -1642,40 +1650,6 @@ ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mip ...@@ -1642,40 +1650,6 @@ ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mip
} }
} }
ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRVLevel(int mipLevel)
{
if (mipLevel >= 0 && mipLevel < getLevelCount())
{
if (!mLevelSRVs[mipLevel])
{
ID3D11Device *device = mRenderer->getDevice();
HRESULT result;
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = mTextureDepth;
result = device->CreateShaderResourceView(mTexture, &srvDesc, &mLevelSRVs[mipLevel]);
if (result == E_OUTOFMEMORY)
{
return gl::error(GL_OUT_OF_MEMORY, static_cast<ID3D11ShaderResourceView*>(NULL));
}
ASSERT(SUCCEEDED(result));
}
return mLevelSRVs[mipLevel];
}
else
{
return NULL;
}
}
unsigned int TextureStorage11_2DArray::getTextureLevelDepth(int mipLevel) const unsigned int TextureStorage11_2DArray::getTextureLevelDepth(int mipLevel) const
{ {
return mTextureDepth; return mTextureDepth;
......
...@@ -131,6 +131,8 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -131,6 +131,8 @@ class TextureStorage11_2D : public TextureStorage11
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D);
ID3D11ShaderResourceView *createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture);
ID3D11Texture2D *mTexture; ID3D11Texture2D *mTexture;
RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
...@@ -166,6 +168,8 @@ class TextureStorage11_Cube : public TextureStorage11 ...@@ -166,6 +168,8 @@ class TextureStorage11_Cube : public TextureStorage11
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube);
ID3D11ShaderResourceView *createSRV(bool arraySRV, int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture);
ID3D11Texture2D *mTexture; ID3D11Texture2D *mTexture;
RenderTarget11 *mRenderTarget[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; RenderTarget11 *mRenderTarget[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
...@@ -203,6 +207,8 @@ class TextureStorage11_3D : public TextureStorage11 ...@@ -203,6 +207,8 @@ class TextureStorage11_3D : public TextureStorage11
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_3D); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_3D);
ID3D11ShaderResourceView *createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture);
typedef std::pair<int, int> LevelLayerKey; typedef std::pair<int, int> LevelLayerKey;
typedef std::map<LevelLayerKey, RenderTarget11*> RenderTargetMap; typedef std::map<LevelLayerKey, RenderTarget11*> RenderTargetMap;
RenderTargetMap mLevelLayerRenderTargets; RenderTargetMap mLevelLayerRenderTargets;
...@@ -243,6 +249,8 @@ class TextureStorage11_2DArray : public TextureStorage11 ...@@ -243,6 +249,8 @@ class TextureStorage11_2DArray : public TextureStorage11
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2DArray); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2DArray);
ID3D11ShaderResourceView *createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture);
typedef std::pair<int, int> LevelLayerKey; typedef std::pair<int, int> LevelLayerKey;
typedef std::map<LevelLayerKey, RenderTarget11*> RenderTargetMap; typedef std::map<LevelLayerKey, RenderTarget11*> RenderTargetMap;
RenderTargetMap mRenderTargets; RenderTargetMap mRenderTargets;
......
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