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);
......
...@@ -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