Add sampler state conversion functions.

TRAC #22251 Signed-off-by: Nicolas Capens Signed-off-by: Daniel Koch Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1663 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 8bc304a1
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
#include "common/debug.h" #include "common/debug.h"
#include <float.h>
namespace gl_d3d11 namespace gl_d3d11
{ {
...@@ -149,6 +151,62 @@ D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp) ...@@ -149,6 +151,62 @@ D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp)
return d3dStencilOp; return d3dStencilOp;
} }
D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy)
{
if (maxAnisotropy > 1.0f)
{
return D3D11_ENCODE_ANISOTROPIC_FILTER(false);
}
else
{
D3D11_FILTER_TYPE dxMin = D3D11_FILTER_TYPE_POINT;
D3D11_FILTER_TYPE dxMip = D3D11_FILTER_TYPE_POINT;
switch (minFilter)
{
case GL_NEAREST: dxMin = D3D11_FILTER_TYPE_POINT; dxMip = D3D11_FILTER_TYPE_POINT; break;
case GL_LINEAR: dxMin = D3D11_FILTER_TYPE_LINEAR; dxMip = D3D11_FILTER_TYPE_POINT; break;
case GL_NEAREST_MIPMAP_NEAREST: dxMin = D3D11_FILTER_TYPE_POINT; dxMip = D3D11_FILTER_TYPE_POINT; break;
case GL_LINEAR_MIPMAP_NEAREST: dxMin = D3D11_FILTER_TYPE_LINEAR; dxMip = D3D11_FILTER_TYPE_POINT; break;
case GL_NEAREST_MIPMAP_LINEAR: dxMin = D3D11_FILTER_TYPE_POINT; dxMip = D3D11_FILTER_TYPE_LINEAR; break;
case GL_LINEAR_MIPMAP_LINEAR: dxMin = D3D11_FILTER_TYPE_LINEAR; dxMip = D3D11_FILTER_TYPE_LINEAR; break;
default: UNREACHABLE();
}
D3D11_FILTER_TYPE dxMag = D3D11_FILTER_TYPE_POINT;
switch (magFilter)
{
case GL_NEAREST: dxMag = D3D11_FILTER_TYPE_POINT; break;
case GL_LINEAR: dxMag = D3D11_FILTER_TYPE_LINEAR; break;
default: UNREACHABLE();
}
return D3D11_ENCODE_BASIC_FILTER(dxMin, dxMag, dxMip, false);
}
}
D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap)
{
switch (wrap)
{
case GL_REPEAT: return D3D11_TEXTURE_ADDRESS_WRAP;
case GL_CLAMP_TO_EDGE: return D3D11_TEXTURE_ADDRESS_CLAMP;
case GL_MIRRORED_REPEAT: return D3D11_TEXTURE_ADDRESS_MIRROR;
default: UNREACHABLE();
}
return D3D11_TEXTURE_ADDRESS_WRAP;
}
FLOAT ConvertMinLOD(GLenum minFilter)
{
return (minFilter == GL_NEAREST || minFilter == GL_LINEAR) ? 0.0f : -FLT_MAX;
}
FLOAT ConvertMaxLOD(GLenum minFilter)
{
return (minFilter == GL_NEAREST || minFilter == GL_LINEAR) ? 0.0f : FLT_MAX;
}
} }
namespace d3d11_gl namespace d3d11_gl
...@@ -312,10 +370,12 @@ DXGI_FORMAT ConvertTextureFormat(GLenum internalformat) ...@@ -312,10 +370,12 @@ DXGI_FORMAT ConvertTextureFormat(GLenum internalformat)
return DXGI_FORMAT_R8G8B8A8_UNORM; return DXGI_FORMAT_R8G8B8A8_UNORM;
} }
} }
namespace d3d11 namespace d3d11
{ {
size_t ComputePixelSizeBits(DXGI_FORMAT format) size_t ComputePixelSizeBits(DXGI_FORMAT format)
{ {
switch (format) switch (format)
...@@ -473,4 +533,5 @@ size_t ComputeBlockSizeBits(DXGI_FORMAT format) ...@@ -473,4 +533,5 @@ size_t ComputeBlockSizeBits(DXGI_FORMAT format)
return 0; return 0;
} }
} }
}
\ No newline at end of file }
...@@ -28,6 +28,11 @@ D3D11_DEPTH_WRITE_MASK ConvertDepthMask(bool depthWriteEnabled); ...@@ -28,6 +28,11 @@ D3D11_DEPTH_WRITE_MASK ConvertDepthMask(bool depthWriteEnabled);
UINT8 ConvertStencilMask(GLuint stencilmask); UINT8 ConvertStencilMask(GLuint stencilmask);
D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp); D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp);
D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy);
D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap);
FLOAT ConvertMinLOD(GLenum minFilter);
FLOAT ConvertMaxLOD(GLenum minFilter);
DXGI_FORMAT ConvertRenderbufferFormat(GLenum format); DXGI_FORMAT ConvertRenderbufferFormat(GLenum format);
DXGI_FORMAT ConvertTextureFormat(GLenum format); DXGI_FORMAT ConvertTextureFormat(GLenum format);
} }
......
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