Commit e47e7363 by Nicolas Capens

Create a single-level SRV when not mipmapping.

BUG=angle:596 Change-Id: Iec5a9e43a23c0743ff8b01985a86a72c5f18a7f7 Reviewed-on: https://chromium-review.googlesource.com/192052Tested-by: 's avatarNicolas Capens <nicolascapens@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent a10c1c7e
...@@ -57,6 +57,8 @@ enum ...@@ -57,6 +57,8 @@ enum
IMPLEMENTATION_MAX_TEXTURE_LEVELS = 15 // 1+log2 of MAX_TEXTURE_SIZE IMPLEMENTATION_MAX_TEXTURE_LEVELS = 15 // 1+log2 of MAX_TEXTURE_SIZE
}; };
bool IsMipmapFiltered(const SamplerState &samplerState);
class Texture : public RefCountObject class Texture : public RefCountObject
{ {
public: public:
......
...@@ -402,15 +402,15 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa ...@@ -402,15 +402,15 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa
samplerDesc.AddressU = gl_d3d11::ConvertTextureWrap(samplerState.wrapS); samplerDesc.AddressU = gl_d3d11::ConvertTextureWrap(samplerState.wrapS);
samplerDesc.AddressV = gl_d3d11::ConvertTextureWrap(samplerState.wrapT); samplerDesc.AddressV = gl_d3d11::ConvertTextureWrap(samplerState.wrapT);
samplerDesc.AddressW = gl_d3d11::ConvertTextureWrap(samplerState.wrapR); samplerDesc.AddressW = gl_d3d11::ConvertTextureWrap(samplerState.wrapR);
samplerDesc.MipLODBias = static_cast<float>(samplerState.lodOffset); samplerDesc.MipLODBias = 0;
samplerDesc.MaxAnisotropy = samplerState.maxAnisotropy; samplerDesc.MaxAnisotropy = samplerState.maxAnisotropy;
samplerDesc.ComparisonFunc = gl_d3d11::ConvertComparison(samplerState.compareFunc); samplerDesc.ComparisonFunc = gl_d3d11::ConvertComparison(samplerState.compareFunc);
samplerDesc.BorderColor[0] = 0.0f; samplerDesc.BorderColor[0] = 0.0f;
samplerDesc.BorderColor[1] = 0.0f; samplerDesc.BorderColor[1] = 0.0f;
samplerDesc.BorderColor[2] = 0.0f; samplerDesc.BorderColor[2] = 0.0f;
samplerDesc.BorderColor[3] = 0.0f; samplerDesc.BorderColor[3] = 0.0f;
samplerDesc.MinLOD = gl_d3d11::ConvertMinLOD(samplerState.minFilter, samplerState.lodOffset); samplerDesc.MinLOD = -FLT_MAX;
samplerDesc.MaxLOD = gl_d3d11::ConvertMaxLOD(samplerState.minFilter, samplerState.lodOffset); samplerDesc.MaxLOD = +FLT_MAX;
ID3D11SamplerState *dx11SamplerState = NULL; ID3D11SamplerState *dx11SamplerState = NULL;
HRESULT result = mDevice->CreateSamplerState(&samplerDesc, &dx11SamplerState); HRESULT result = mDevice->CreateSamplerState(&samplerDesc, &dx11SamplerState);
......
...@@ -288,11 +288,9 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch ...@@ -288,11 +288,9 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
{ {
mTexture = swapchain->getOffscreenTexture(); mTexture = swapchain->getOffscreenTexture();
mTexture->AddRef(); mTexture->AddRef();
mSRV = swapchain->getRenderTargetShaderResource();
mSRV->AddRef();
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
mSwizzleSRV = NULL;
memset(mSRV, NULL, sizeof(mSRV));
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{ {
...@@ -309,8 +307,9 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch ...@@ -309,8 +307,9 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
mTextureHeight = texDesc.Height; mTextureHeight = texDesc.Height;
mTextureDepth = 1; mTextureDepth = 1;
ID3D11ShaderResourceView *srv = swapchain->getRenderTargetShaderResource();
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
mSRV->GetDesc(&srvDesc); srv->GetDesc(&srvDesc);
mShaderResourceFormat = srvDesc.Format; mShaderResourceFormat = srvDesc.Format;
ID3D11RenderTargetView* offscreenRTV = swapchain->getRenderTarget(); ID3D11RenderTargetView* offscreenRTV = swapchain->getRenderTarget();
...@@ -330,9 +329,10 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int baseLevel, int ...@@ -330,9 +329,10 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int baseLevel, int
: TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget)) : TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mSRV = NULL;
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
mSwizzleSRV = NULL;
memset(mSRV, NULL, sizeof(mSRV));
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{ {
mLevelSRVs[i] = NULL; mLevelSRVs[i] = NULL;
...@@ -400,9 +400,11 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int baseLevel, int ...@@ -400,9 +400,11 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int baseLevel, int
TextureStorage11_2D::~TextureStorage11_2D() TextureStorage11_2D::~TextureStorage11_2D()
{ {
SafeRelease(mTexture); SafeRelease(mTexture);
SafeRelease(mSRV);
SafeRelease(mSwizzleTexture); SafeRelease(mSwizzleTexture);
SafeRelease(mSwizzleSRV);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
SafeRelease(mSRV[i][j]);
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{ {
...@@ -501,7 +503,8 @@ ID3D11ShaderResourceView *TextureStorage11_2D::getSRV(const gl::SamplerState &sa ...@@ -501,7 +503,8 @@ ID3D11ShaderResourceView *TextureStorage11_2D::getSRV(const gl::SamplerState &sa
{ {
bool swizzleRequired = samplerState.swizzleRed != GL_RED || samplerState.swizzleGreen != GL_GREEN || bool swizzleRequired = samplerState.swizzleRed != GL_RED || samplerState.swizzleGreen != GL_GREEN ||
samplerState.swizzleBlue != GL_BLUE || samplerState.swizzleAlpha != GL_ALPHA; samplerState.swizzleBlue != GL_BLUE || samplerState.swizzleAlpha != GL_ALPHA;
ID3D11ShaderResourceView **resultSRV = swizzleRequired ? &mSwizzleSRV : &mSRV; bool mipmapping = gl::IsMipmapFiltered(samplerState);
ID3D11ShaderResourceView **resultSRV = &mSRV[swizzleRequired][mipmapping];
if (swizzleRequired) if (swizzleRequired)
{ {
...@@ -515,8 +518,8 @@ ID3D11ShaderResourceView *TextureStorage11_2D::getSRV(const gl::SamplerState &sa ...@@ -515,8 +518,8 @@ ID3D11ShaderResourceView *TextureStorage11_2D::getSRV(const gl::SamplerState &sa
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat); srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat);
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
srvDesc.Texture2D.MipLevels = (mMipLevels == 0 ? -1 : mMipLevels); srvDesc.Texture2D.MipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1;
srvDesc.Texture2D.MostDetailedMip = 0; srvDesc.Texture2D.MostDetailedMip = mLodOffset;
ID3D11Texture2D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture; ID3D11Texture2D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture;
HRESULT result = device->CreateShaderResourceView(sourceTexture, &srvDesc, resultSRV); HRESULT result = device->CreateShaderResourceView(sourceTexture, &srvDesc, resultSRV);
...@@ -643,9 +646,10 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int baseLevel, ...@@ -643,9 +646,10 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int baseLevel,
: TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget)) : TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mSRV = NULL;
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
mSwizzleSRV = NULL;
memset(mSRV, NULL, sizeof(mSRV));
for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++) for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
{ {
mLevelSRVs[level] = NULL; mLevelSRVs[level] = NULL;
...@@ -711,9 +715,11 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int baseLevel, ...@@ -711,9 +715,11 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int baseLevel,
TextureStorage11_Cube::~TextureStorage11_Cube() TextureStorage11_Cube::~TextureStorage11_Cube()
{ {
SafeRelease(mTexture); SafeRelease(mTexture);
SafeRelease(mSRV);
SafeRelease(mSwizzleTexture); SafeRelease(mSwizzleTexture);
SafeRelease(mSwizzleSRV);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
SafeRelease(mSRV[i][j]);
for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++) for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
{ {
...@@ -833,7 +839,8 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRV(const gl::SamplerState & ...@@ -833,7 +839,8 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRV(const gl::SamplerState &
{ {
bool swizzleRequired = samplerState.swizzleRed != GL_RED || samplerState.swizzleGreen != GL_GREEN || bool swizzleRequired = samplerState.swizzleRed != GL_RED || samplerState.swizzleGreen != GL_GREEN ||
samplerState.swizzleBlue != GL_BLUE || samplerState.swizzleAlpha != GL_ALPHA; samplerState.swizzleBlue != GL_BLUE || samplerState.swizzleAlpha != GL_ALPHA;
ID3D11ShaderResourceView **resultSRV = swizzleRequired ? &mSwizzleSRV : &mSRV; bool mipmapping = gl::IsMipmapFiltered(samplerState);
ID3D11ShaderResourceView **resultSRV = &mSRV[swizzleRequired][mipmapping];
if (swizzleRequired) if (swizzleRequired)
{ {
...@@ -852,7 +859,7 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRV(const gl::SamplerState & ...@@ -852,7 +859,7 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRV(const gl::SamplerState &
d3d11::GetComponentType(mTextureFormat) == GL_UNSIGNED_INT) d3d11::GetComponentType(mTextureFormat) == GL_UNSIGNED_INT)
{ {
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = 0; srvDesc.Texture2DArray.MostDetailedMip = mLodOffset;
srvDesc.Texture2DArray.MipLevels = 1; srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.FirstArraySlice = 0; srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = 6; srvDesc.Texture2DArray.ArraySize = 6;
...@@ -860,8 +867,8 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRV(const gl::SamplerState & ...@@ -860,8 +867,8 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRV(const gl::SamplerState &
else else
{ {
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
srvDesc.TextureCube.MipLevels = (mMipLevels == 0 ? -1 : mMipLevels); srvDesc.TextureCube.MipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1;
srvDesc.TextureCube.MostDetailedMip = 0; srvDesc.TextureCube.MostDetailedMip = mLodOffset;
} }
ID3D11Texture2D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture; ID3D11Texture2D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture;
...@@ -994,9 +1001,9 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int baseLevel, int ...@@ -994,9 +1001,9 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int baseLevel, int
: TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget)) : TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mSRV = NULL;
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
mSwizzleSRV = NULL;
memset(mSRV, NULL, sizeof(mSRV));
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{ {
...@@ -1063,9 +1070,11 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int baseLevel, int ...@@ -1063,9 +1070,11 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int baseLevel, int
TextureStorage11_3D::~TextureStorage11_3D() TextureStorage11_3D::~TextureStorage11_3D()
{ {
SafeRelease(mTexture); SafeRelease(mTexture);
SafeRelease(mSRV);
SafeRelease(mSwizzleTexture); SafeRelease(mSwizzleTexture);
SafeRelease(mSwizzleSRV);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
SafeRelease(mSRV[i][j]);
for (RenderTargetMap::iterator i = mLevelLayerRenderTargets.begin(); i != mLevelLayerRenderTargets.end(); i++) for (RenderTargetMap::iterator i = mLevelLayerRenderTargets.begin(); i != mLevelLayerRenderTargets.end(); i++)
{ {
...@@ -1096,7 +1105,8 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV(const gl::SamplerState &sa ...@@ -1096,7 +1105,8 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV(const gl::SamplerState &sa
{ {
bool swizzleRequired = samplerState.swizzleRed != GL_RED || samplerState.swizzleGreen != GL_GREEN || bool swizzleRequired = samplerState.swizzleRed != GL_RED || samplerState.swizzleGreen != GL_GREEN ||
samplerState.swizzleBlue != GL_BLUE || samplerState.swizzleAlpha != GL_ALPHA; samplerState.swizzleBlue != GL_BLUE || samplerState.swizzleAlpha != GL_ALPHA;
ID3D11ShaderResourceView **resultSRV = swizzleRequired ? &mSwizzleSRV : &mSRV; bool mipmapping = gl::IsMipmapFiltered(samplerState);
ID3D11ShaderResourceView **resultSRV = &mSRV[swizzleRequired][mipmapping];
if (swizzleRequired) if (swizzleRequired)
{ {
...@@ -1110,8 +1120,8 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV(const gl::SamplerState &sa ...@@ -1110,8 +1120,8 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV(const gl::SamplerState &sa
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat); srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat);
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
srvDesc.Texture3D.MipLevels = (mMipLevels == 0 ? -1 : mMipLevels); srvDesc.Texture3D.MipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1;
srvDesc.Texture3D.MostDetailedMip = 0; srvDesc.Texture3D.MostDetailedMip = mLodOffset;
ID3D11Texture3D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture; ID3D11Texture3D *sourceTexture = swizzleRequired ? getSwizzleTexture() : mTexture;
HRESULT result = device->CreateShaderResourceView(sourceTexture, &srvDesc, resultSRV); HRESULT result = device->CreateShaderResourceView(sourceTexture, &srvDesc, resultSRV);
...@@ -1344,9 +1354,9 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int baseL ...@@ -1344,9 +1354,9 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int baseL
: TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget)) : TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mSRV = NULL;
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
mSwizzleSRV = NULL;
memset(mSRV, NULL, sizeof(mSRV));
for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++) for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
{ {
...@@ -1414,9 +1424,11 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int baseL ...@@ -1414,9 +1424,11 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int baseL
TextureStorage11_2DArray::~TextureStorage11_2DArray() TextureStorage11_2DArray::~TextureStorage11_2DArray()
{ {
SafeRelease(mTexture); SafeRelease(mTexture);
SafeRelease(mSRV);
SafeRelease(mSwizzleTexture); SafeRelease(mSwizzleTexture);
SafeRelease(mSwizzleSRV);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
SafeRelease(mSRV[i][j]);
for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++) for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
{ {
...@@ -1446,7 +1458,8 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRV(const gl::SamplerStat ...@@ -1446,7 +1458,8 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRV(const gl::SamplerStat
{ {
bool swizzleRequired = samplerState.swizzleRed != GL_RED || samplerState.swizzleGreen != GL_GREEN || bool swizzleRequired = samplerState.swizzleRed != GL_RED || samplerState.swizzleGreen != GL_GREEN ||
samplerState.swizzleBlue != GL_BLUE || samplerState.swizzleAlpha != GL_ALPHA; samplerState.swizzleBlue != GL_BLUE || samplerState.swizzleAlpha != GL_ALPHA;
ID3D11ShaderResourceView **resultSRV = swizzleRequired ? &mSwizzleSRV : &mSRV; bool mipmapping = gl::IsMipmapFiltered(samplerState);
ID3D11ShaderResourceView **resultSRV = &mSRV[swizzleRequired][mipmapping];
if (swizzleRequired) if (swizzleRequired)
{ {
...@@ -1460,8 +1473,8 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRV(const gl::SamplerStat ...@@ -1460,8 +1473,8 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRV(const gl::SamplerStat
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat); srvDesc.Format = (swizzleRequired ? mSwizzleShaderResourceFormat : mShaderResourceFormat);
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = 0; srvDesc.Texture2DArray.MostDetailedMip = mLodOffset;
srvDesc.Texture2DArray.MipLevels = (mMipLevels == 0 ? -1 : mMipLevels); srvDesc.Texture2DArray.MipLevels = mipmapping ? (mMipLevels == 0 ? -1 : mMipLevels) : 1;
srvDesc.Texture2DArray.FirstArraySlice = 0; srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = mTextureDepth; srvDesc.Texture2DArray.ArraySize = mTextureDepth;
......
...@@ -134,13 +134,13 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -134,13 +134,13 @@ class TextureStorage11_2D : public TextureStorage11
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D);
ID3D11Texture2D *mTexture; ID3D11Texture2D *mTexture;
ID3D11ShaderResourceView *mSRV;
ID3D11ShaderResourceView *mLevelSRVs[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11Texture2D *mSwizzleTexture; ID3D11Texture2D *mSwizzleTexture;
ID3D11ShaderResourceView *mSwizzleSRV;
ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11ShaderResourceView *mSRV[2][2]; // [swizzle][mipmapping]
ID3D11ShaderResourceView *mLevelSRVs[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
class TextureStorage11_Cube : public TextureStorage11 class TextureStorage11_Cube : public TextureStorage11
...@@ -169,13 +169,13 @@ class TextureStorage11_Cube : public TextureStorage11 ...@@ -169,13 +169,13 @@ class TextureStorage11_Cube : public TextureStorage11
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube);
ID3D11Texture2D *mTexture; ID3D11Texture2D *mTexture;
ID3D11ShaderResourceView *mSRV;
ID3D11ShaderResourceView *mLevelSRVs[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
RenderTarget11 *mRenderTarget[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; RenderTarget11 *mRenderTarget[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11Texture2D *mSwizzleTexture; ID3D11Texture2D *mSwizzleTexture;
ID3D11ShaderResourceView *mSwizzleSRV;
ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11ShaderResourceView *mSRV[2][2]; // [swizzle][mipmapping]
ID3D11ShaderResourceView *mLevelSRVs[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
class TextureStorage11_3D : public TextureStorage11 class TextureStorage11_3D : public TextureStorage11
...@@ -212,12 +212,11 @@ class TextureStorage11_3D : public TextureStorage11 ...@@ -212,12 +212,11 @@ class TextureStorage11_3D : public TextureStorage11
RenderTarget11 *mLevelRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; RenderTarget11 *mLevelRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11Texture3D *mTexture; ID3D11Texture3D *mTexture;
ID3D11ShaderResourceView *mSRV;
ID3D11ShaderResourceView *mLevelSRVs[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11Texture3D *mSwizzleTexture; ID3D11Texture3D *mSwizzleTexture;
ID3D11ShaderResourceView *mSwizzleSRV;
ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11ShaderResourceView *mSRV[2][2]; // [swizzle][mipmapping]
ID3D11ShaderResourceView *mLevelSRVs[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
class TextureStorage11_2DArray : public TextureStorage11 class TextureStorage11_2DArray : public TextureStorage11
...@@ -251,12 +250,12 @@ class TextureStorage11_2DArray : public TextureStorage11 ...@@ -251,12 +250,12 @@ class TextureStorage11_2DArray : public TextureStorage11
RenderTargetMap mRenderTargets; RenderTargetMap mRenderTargets;
ID3D11Texture2D *mTexture; ID3D11Texture2D *mTexture;
ID3D11ShaderResourceView *mSRV;
ID3D11ShaderResourceView *mLevelSRVs[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11Texture2D *mSwizzleTexture; ID3D11Texture2D *mSwizzleTexture;
ID3D11ShaderResourceView *mSwizzleSRV;
ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ID3D11ShaderResourceView *mSRV[2][2]; // [swizzle][mipmapping]
ID3D11ShaderResourceView *mLevelSRVs[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
} }
......
...@@ -203,16 +203,6 @@ D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap) ...@@ -203,16 +203,6 @@ D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap)
return D3D11_TEXTURE_ADDRESS_WRAP; return D3D11_TEXTURE_ADDRESS_WRAP;
} }
FLOAT ConvertMinLOD(GLenum minFilter, unsigned int lodOffset)
{
return (minFilter == GL_NEAREST || minFilter == GL_LINEAR) ? static_cast<float>(lodOffset) : -FLT_MAX;
}
FLOAT ConvertMaxLOD(GLenum minFilter, unsigned int lodOffset)
{
return (minFilter == GL_NEAREST || minFilter == GL_LINEAR) ? static_cast<float>(lodOffset) : FLT_MAX;
}
D3D11_QUERY ConvertQueryType(GLenum queryType) D3D11_QUERY ConvertQueryType(GLenum queryType)
{ {
switch (queryType) switch (queryType)
......
...@@ -31,8 +31,6 @@ D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp); ...@@ -31,8 +31,6 @@ D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp);
D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy, GLenum comparisonMode); D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy, GLenum comparisonMode);
D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap); D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap);
FLOAT ConvertMinLOD(GLenum minFilter, unsigned int lodOffset);
FLOAT ConvertMaxLOD(GLenum minFilter, unsigned int lodOffset);
D3D11_QUERY ConvertQueryType(GLenum queryType); D3D11_QUERY ConvertQueryType(GLenum queryType);
......
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