blob: 3e1b614e6ffffdb9c86543ba43f414b0d16598f8 [file] [log] [blame]
daniel@transgaming.comfeae9b32012-11-28 19:34:56 +00001//
2// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// renderer11_utils.h: Conversion functions and other utility routines
8// specific to the D3D11 renderer.
9
shannon.woods@transgaming.comf5f59492013-02-28 23:04:40 +000010#ifndef LIBGLESV2_RENDERER_RENDERER11_UTILS_H
11#define LIBGLESV2_RENDERER_RENDERER11_UTILS_H
12
daniel@transgaming.comfa34b342012-11-28 19:38:01 +000013#include "libGLESv2/angletypes.h"
14
shannonwoods@chromium.orged0adcf2013-05-30 00:08:20 +000015namespace rx
16{
17
daniel@transgaming.comfa34b342012-11-28 19:38:01 +000018namespace gl_d3d11
19{
20
daniel@transgaming.com90c634a2013-01-11 04:10:01 +000021D3D11_BLEND ConvertBlendFunc(GLenum glBlend, bool isAlpha);
daniel@transgaming.comfa34b342012-11-28 19:38:01 +000022D3D11_BLEND_OP ConvertBlendOp(GLenum glBlendOp);
23UINT8 ConvertColorMask(bool maskRed, bool maskGreen, bool maskBlue, bool maskAlpha);
24
25D3D11_CULL_MODE ConvertCullMode(bool cullEnabled, GLenum cullMode);
26
daniel@transgaming.comc820c122012-11-28 19:38:30 +000027D3D11_COMPARISON_FUNC ConvertComparison(GLenum comparison);
28D3D11_DEPTH_WRITE_MASK ConvertDepthMask(bool depthWriteEnabled);
29UINT8 ConvertStencilMask(GLuint stencilmask);
30D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp);
31
daniel@transgaming.com3d34a8a2013-01-11 04:07:48 +000032D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy);
33D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap);
shannon.woods@transgaming.com86758652013-02-28 23:20:26 +000034FLOAT ConvertMinLOD(GLenum minFilter, unsigned int lodOffset);
35FLOAT ConvertMaxLOD(GLenum minFilter, unsigned int lodOffset);
daniel@transgaming.com3d34a8a2013-01-11 04:07:48 +000036
daniel@transgaming.com8fb65c82012-12-20 21:07:49 +000037DXGI_FORMAT ConvertRenderbufferFormat(GLenum format);
daniel@transgaming.coma8aac672012-12-20 21:08:00 +000038DXGI_FORMAT ConvertTextureFormat(GLenum format);
daniel@transgaming.comfa34b342012-11-28 19:38:01 +000039}
daniel@transgaming.com6b147712012-11-28 19:37:24 +000040
daniel@transgaming.comfeae9b32012-11-28 19:34:56 +000041namespace d3d11_gl
42{
43
44GLenum ConvertBackBufferFormat(DXGI_FORMAT format);
45GLenum ConvertDepthStencilFormat(DXGI_FORMAT format);
46GLenum ConvertRenderbufferFormat(DXGI_FORMAT format);
47GLenum ConvertTextureInternalFormat(DXGI_FORMAT format);
daniel@transgaming.com8fb65c82012-12-20 21:07:49 +000048
daniel@transgaming.comfeae9b32012-11-28 19:34:56 +000049}
50
daniel@transgaming.com8fb65c82012-12-20 21:07:49 +000051namespace d3d11
daniel@transgaming.comfeae9b32012-11-28 19:34:56 +000052{
shannon.woods@transgaming.comf3d82072013-01-25 21:50:43 +000053
54struct PositionTexCoordVertex
55{
56 float x, y;
57 float u, v;
58};
59void SetPositionTexCoordVertex(PositionTexCoordVertex* vertex, float x, float y, float u, float v);
60
shannonwoods@chromium.org7b61d5c2013-05-30 00:04:12 +000061struct PositionLayerTexCoord3DVertex
62{
63 float x, y;
64 unsigned int l;
65 float u, v, s;
66};
67void SetPositionLayerTexCoord3DVertex(PositionLayerTexCoord3DVertex* vertex, float x, float y,
68 unsigned int layer, float u, float v, float s);
69
shannon.woods@transgaming.com34f507c2013-01-25 21:52:15 +000070struct PositionDepthColorVertex
71{
72 float x, y, z;
73 float r, g, b, a;
74};
75void SetPositionDepthColorVertex(PositionDepthColorVertex* vertex, float x, float y, float z,
76 const gl::Color &color);
77
daniel@transgaming.com8fb65c82012-12-20 21:07:49 +000078size_t ComputePixelSizeBits(DXGI_FORMAT format);
79size_t ComputeBlockSizeBits(DXGI_FORMAT format);
daniel@transgaming.com00f2d9c2013-01-11 04:11:08 +000080
shannon.woods@transgaming.com25072782013-02-28 23:20:33 +000081bool IsCompressed(DXGI_FORMAT format);
shannon.woods@transgaming.coma24d6462013-02-28 23:13:14 +000082unsigned int GetTextureFormatDimensionAlignment(DXGI_FORMAT format);
83
shannon.woods@transgaming.comeec5c632013-02-28 23:04:21 +000084bool IsDepthStencilFormat(DXGI_FORMAT format);
shannon.woods@transgaming.com955014d2013-02-28 23:12:24 +000085DXGI_FORMAT GetDepthTextureFormat(DXGI_FORMAT format);
86DXGI_FORMAT GetDepthShaderResourceFormat(DXGI_FORMAT format);
87
daniel@transgaming.com00f2d9c2013-01-11 04:11:08 +000088HRESULT SetDebugName(ID3D11DeviceChild *resource, const char *name);
daniel@transgaming.coma60160b2012-11-28 19:41:15 +000089
shannon.woods%transgaming.com@gtempaccount.com27ac40e2013-04-13 03:43:17 +000090template <typename outType>
91outType* DynamicCastComObject(IUnknown* object)
92{
93 outType *outObject = NULL;
94 HRESULT result = object->QueryInterface(__uuidof(outType), reinterpret_cast<void**>(&outObject));
95 if (SUCCEEDED(result))
96 {
97 return outObject;
98 }
99 else
100 {
101 if (outObject)
102 {
103 outObject->Release();
104 }
105 return NULL;
106 }
107}
108
daniel@transgaming.coma60160b2012-11-28 19:41:15 +0000109inline bool isDeviceLostError(HRESULT errorCode)
110{
111 switch (errorCode)
112 {
113 case DXGI_ERROR_DEVICE_HUNG:
114 case DXGI_ERROR_DEVICE_REMOVED:
115 case DXGI_ERROR_DEVICE_RESET:
116 case DXGI_ERROR_DRIVER_INTERNAL_ERROR:
117 case DXGI_ERROR_NOT_CURRENTLY_AVAILABLE:
118 return true;
119 default:
120 return false;
121 }
daniel@transgaming.come3e826d2012-11-28 19:42:35 +0000122}
shannon.woods@transgaming.comf5f59492013-02-28 23:04:40 +0000123
124}
125
shannonwoods@chromium.orged0adcf2013-05-30 00:08:20 +0000126}
127
shannon.woods@transgaming.comf5f59492013-02-28 23:04:40 +0000128#endif // LIBGLESV2_RENDERER_RENDERER11_UTILS_H