michael@0: // michael@0: // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: // michael@0: michael@0: // renderer11_utils.h: Conversion functions and other utility routines michael@0: // specific to the D3D11 renderer. michael@0: michael@0: #ifndef LIBGLESV2_RENDERER_RENDERER11_UTILS_H michael@0: #define LIBGLESV2_RENDERER_RENDERER11_UTILS_H michael@0: michael@0: #include "libGLESv2/angletypes.h" michael@0: michael@0: namespace gl_d3d11 michael@0: { michael@0: michael@0: D3D11_BLEND ConvertBlendFunc(GLenum glBlend, bool isAlpha); michael@0: D3D11_BLEND_OP ConvertBlendOp(GLenum glBlendOp); michael@0: UINT8 ConvertColorMask(bool maskRed, bool maskGreen, bool maskBlue, bool maskAlpha); michael@0: michael@0: D3D11_CULL_MODE ConvertCullMode(bool cullEnabled, GLenum cullMode); michael@0: michael@0: D3D11_COMPARISON_FUNC ConvertComparison(GLenum comparison); michael@0: D3D11_DEPTH_WRITE_MASK ConvertDepthMask(bool depthWriteEnabled); michael@0: UINT8 ConvertStencilMask(GLuint stencilmask); michael@0: D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp); michael@0: michael@0: D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy); michael@0: D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap); michael@0: FLOAT ConvertMinLOD(GLenum minFilter, unsigned int lodOffset); michael@0: FLOAT ConvertMaxLOD(GLenum minFilter, unsigned int lodOffset); michael@0: michael@0: DXGI_FORMAT ConvertRenderbufferFormat(GLenum format); michael@0: DXGI_FORMAT ConvertTextureFormat(GLenum format); michael@0: } michael@0: michael@0: namespace d3d11_gl michael@0: { michael@0: michael@0: GLenum ConvertBackBufferFormat(DXGI_FORMAT format); michael@0: GLenum ConvertDepthStencilFormat(DXGI_FORMAT format); michael@0: GLenum ConvertRenderbufferFormat(DXGI_FORMAT format); michael@0: GLenum ConvertTextureInternalFormat(DXGI_FORMAT format); michael@0: michael@0: } michael@0: michael@0: namespace d3d11 michael@0: { michael@0: michael@0: struct PositionTexCoordVertex michael@0: { michael@0: float x, y; michael@0: float u, v; michael@0: }; michael@0: void SetPositionTexCoordVertex(PositionTexCoordVertex* vertex, float x, float y, float u, float v); michael@0: michael@0: struct PositionDepthColorVertex michael@0: { michael@0: float x, y, z; michael@0: float r, g, b, a; michael@0: }; michael@0: void SetPositionDepthColorVertex(PositionDepthColorVertex* vertex, float x, float y, float z, michael@0: const gl::Color &color); michael@0: michael@0: size_t ComputePixelSizeBits(DXGI_FORMAT format); michael@0: size_t ComputeBlockSizeBits(DXGI_FORMAT format); michael@0: michael@0: bool IsCompressed(DXGI_FORMAT format); michael@0: unsigned int GetTextureFormatDimensionAlignment(DXGI_FORMAT format); michael@0: michael@0: bool IsDepthStencilFormat(DXGI_FORMAT format); michael@0: DXGI_FORMAT GetDepthTextureFormat(DXGI_FORMAT format); michael@0: DXGI_FORMAT GetDepthShaderResourceFormat(DXGI_FORMAT format); michael@0: michael@0: HRESULT SetDebugName(ID3D11DeviceChild *resource, const char *name); michael@0: michael@0: inline bool isDeviceLostError(HRESULT errorCode) michael@0: { michael@0: switch (errorCode) michael@0: { michael@0: case DXGI_ERROR_DEVICE_HUNG: michael@0: case DXGI_ERROR_DEVICE_REMOVED: michael@0: case DXGI_ERROR_DEVICE_RESET: michael@0: case DXGI_ERROR_DRIVER_INTERNAL_ERROR: michael@0: case DXGI_ERROR_NOT_CURRENTLY_AVAILABLE: michael@0: return true; michael@0: default: michael@0: return false; michael@0: } michael@0: } michael@0: michael@0: } michael@0: michael@0: #endif // LIBGLESV2_RENDERER_RENDERER11_UTILS_H