blob: ab03b65da2c825460f26b9994319c97bb29e7253 [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.cpp: Conversion functions and other utility routines
8// specific to the D3D11 renderer.
9
10#include "libGLESv2/renderer/renderer11_utils.h"
11
12#include "common/debug.h"
13
14namespace d3d11_gl
15{
16
17GLenum ConvertBackBufferFormat(DXGI_FORMAT format)
18{
19 switch (format)
20 {
21 case DXGI_FORMAT_R8G8B8A8_UNORM: return GL_RGBA8_OES;
22 default:
23 UNREACHABLE();
24 }
25
26 return GL_RGBA8_OES;
27}
28
29GLenum ConvertDepthStencilFormat(DXGI_FORMAT format)
30{
31 switch (format)
32 {
33 case DXGI_FORMAT_D24_UNORM_S8_UINT: return GL_DEPTH24_STENCIL8_OES;
34 default:
35 UNREACHABLE();
36 }
37
38 return GL_DEPTH24_STENCIL8_OES;
39}
40
41GLenum ConvertRenderbufferFormat(DXGI_FORMAT format)
42{
43 switch (format)
44 {
45 case DXGI_FORMAT_R8G8B8A8_UNORM:
46 return GL_RGBA8_OES;
47 case DXGI_FORMAT_D24_UNORM_S8_UINT:
48 return GL_DEPTH24_STENCIL8_OES;
49 default:
50 UNREACHABLE();
51 }
52
53 return GL_RGBA8_OES;
54}
55
56GLenum ConvertTextureInternalFormat(DXGI_FORMAT format)
57{
58 switch (format)
59 {
60 case DXGI_FORMAT_R8G8B8A8_UNORM:
61 return GL_RGBA8_OES;
62 case DXGI_FORMAT_A8_UNORM:
63 return GL_ALPHA8_EXT;
64 case DXGI_FORMAT_BC1_UNORM:
65 return GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
66 case DXGI_FORMAT_BC2_UNORM:
67 return GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE;
68 case DXGI_FORMAT_BC3_UNORM:
69 return GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE;
70 case DXGI_FORMAT_R32G32B32A32_FLOAT:
71 return GL_RGBA32F_EXT;
72 case DXGI_FORMAT_R32G32B32_FLOAT:
73 return GL_RGB32F_EXT;
74 case DXGI_FORMAT_R16G16B16A16_FLOAT:
75 return GL_RGBA16F_EXT;
76 case DXGI_FORMAT_B8G8R8A8_UNORM:
77 return GL_BGRA8_EXT;
78 case DXGI_FORMAT_R8_UNORM:
79 return GL_R8_EXT;
80 case DXGI_FORMAT_R8G8_UNORM:
81 return GL_RG8_EXT;
82 case DXGI_FORMAT_R16_FLOAT:
83 return GL_R16F_EXT;
84 case DXGI_FORMAT_R16G16_FLOAT:
85 return GL_RG16F_EXT;
86 case DXGI_FORMAT_D24_UNORM_S8_UINT:
87 return GL_DEPTH24_STENCIL8_OES;
88 default:
89 UNREACHABLE();
90 }
91
92 return GL_RGBA8_OES;
93}
94
95}
96
97namespace gl_d3d11
98{
99
100DXGI_FORMAT ConvertRenderbufferFormat(GLenum format)
101{
102 switch (format)
103 {
104 case GL_RGBA4:
105 case GL_RGB5_A1:
106 case GL_RGBA8_OES:
107 case GL_RGB565:
108 case GL_RGB8_OES:
109 return DXGI_FORMAT_R8G8B8A8_UNORM;
110 case GL_DEPTH_COMPONENT16:
111 case GL_STENCIL_INDEX8:
112 case GL_DEPTH24_STENCIL8_OES:
113 return DXGI_FORMAT_D24_UNORM_S8_UINT;
114 default:
115 UNREACHABLE();
116 }
117
118 return DXGI_FORMAT_R8G8B8A8_UNORM;
119}
120
121DXGI_FORMAT ConvertTextureFormat(GLenum internalformat)
122{
123 switch (internalformat)
124 {
125 case GL_RGB565:
126 case GL_RGBA4:
127 case GL_RGB5_A1:
128 case GL_RGB8_OES:
129 case GL_RGBA8_OES:
130 case GL_LUMINANCE8_EXT:
131 case GL_LUMINANCE8_ALPHA8_EXT:
132 return DXGI_FORMAT_R8G8B8A8_UNORM;
133 case GL_ALPHA8_EXT:
134 return DXGI_FORMAT_A8_UNORM;
135 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
136 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
137 return DXGI_FORMAT_BC1_UNORM;
138 case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
139 return DXGI_FORMAT_BC2_UNORM;
140 case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
141 return DXGI_FORMAT_BC3_UNORM;
142 case GL_RGBA32F_EXT:
143 case GL_ALPHA32F_EXT:
144 case GL_LUMINANCE_ALPHA32F_EXT:
145 return DXGI_FORMAT_R32G32B32A32_FLOAT;
146 case GL_RGB32F_EXT:
147 case GL_LUMINANCE32F_EXT:
148 return DXGI_FORMAT_R32G32B32_FLOAT;
149 case GL_RGBA16F_EXT:
150 case GL_ALPHA16F_EXT:
151 case GL_LUMINANCE_ALPHA16F_EXT:
152 case GL_RGB16F_EXT:
153 case GL_LUMINANCE16F_EXT:
154 return DXGI_FORMAT_R16G16B16A16_FLOAT;
155 case GL_BGRA8_EXT:
156 return DXGI_FORMAT_B8G8R8A8_UNORM;
157 case GL_R8_EXT:
158 return DXGI_FORMAT_R8_UNORM;
159 case GL_RG8_EXT:
160 return DXGI_FORMAT_R8G8_UNORM;
161 case GL_R16F_EXT:
162 return DXGI_FORMAT_R16_FLOAT;
163 case GL_RG16F_EXT:
164 return DXGI_FORMAT_R16G16_FLOAT;
165 case GL_DEPTH_COMPONENT16:
166 case GL_DEPTH_COMPONENT32_OES:
167 case GL_DEPTH24_STENCIL8_OES:
168 return DXGI_FORMAT_D24_UNORM_S8_UINT;
169 default:
170 UNREACHABLE();
171 }
172
173 return DXGI_FORMAT_R8G8B8A8_UNORM;
174}
175}