OSDN Git Service

#32713 初コミット。SVNrev567時点での、ファイルはbranch/140707(ReBuild XGVersion)から移行したもの。
[dtxmaniaxg-verk/dtxmaniaxg-verk-git.git] / SlimDXc_Jun2010(VC++2008) / source / direct3d11 / ShaderResourceViewDescription11.cpp
1 #include "stdafx.h"
2 /*
3 * Copyright (c) 2007-2010 SlimDX Group
4
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 * THE SOFTWARE.
22 */
23
24 #include <d3d11.h>
25
26 #include "ShaderResourceViewDescription11.h"
27
28 namespace SlimDX
29 {
30 namespace Direct3D11
31 {
32         ShaderResourceViewDescription::ShaderResourceViewDescription( const D3D11_SHADER_RESOURCE_VIEW_DESC& native )
33         {
34                 Format = static_cast<DXGI::Format>( native.Format );
35                 Dimension = static_cast<ShaderResourceViewDimension>( native.ViewDimension );
36
37                 switch( Dimension )
38                 {
39                         case ShaderResourceViewDimension::Buffer:
40                                 ElementOffset = native.Buffer.ElementOffset;
41                                 ElementWidth = native.Buffer.ElementWidth;
42                                 break;
43
44                         case ShaderResourceViewDimension::Texture1D:
45                                 MipLevels = native.Texture1D.MipLevels;
46                                 MostDetailedMip = native.Texture1D.MostDetailedMip;
47                                 break;
48
49                         case ShaderResourceViewDimension::Texture1DArray:
50                                 ArraySize = native.Texture1DArray.ArraySize;
51                                 FirstArraySlice = native.Texture1DArray.FirstArraySlice;
52                                 MipLevels = native.Texture1DArray.MipLevels;
53                                 MostDetailedMip = native.Texture1DArray.MostDetailedMip;
54                                 break;
55
56                         case ShaderResourceViewDimension::Texture2D:
57                                 MipLevels = native.Texture2D.MipLevels;
58                                 MostDetailedMip = native.Texture2D.MostDetailedMip;
59                                 break;
60
61                         case ShaderResourceViewDimension::Texture2DArray:
62                                 ArraySize = native.Texture2DArray.ArraySize;
63                                 FirstArraySlice = native.Texture2DArray.FirstArraySlice;
64                                 MipLevels = native.Texture2DArray.MipLevels;
65                                 MostDetailedMip = native.Texture2DArray.MostDetailedMip;
66                                 break;
67
68                         case ShaderResourceViewDimension::Texture2DMultisampled:
69                                 // Nothing to do here.
70                                 break;
71
72                         case ShaderResourceViewDimension::Texture2DMultisampledArray:
73                                 ArraySize = native.Texture2DMSArray.ArraySize;
74                                 FirstArraySlice = native.Texture2DMSArray.FirstArraySlice;
75                                 break;
76
77                         case ShaderResourceViewDimension::Texture3D:
78                                 MipLevels = native.Texture3D.MipLevels;
79                                 MostDetailedMip = native.Texture3D.MostDetailedMip;
80                                 break;
81
82                         case ShaderResourceViewDimension::TextureCube:
83                                 MipLevels = native.TextureCube.MipLevels;
84                                 MostDetailedMip = native.TextureCube.MostDetailedMip;
85                                 break;
86
87                         case ShaderResourceViewDimension::TextureCubeArray:
88                                 MostDetailedMip = native.TextureCubeArray.MostDetailedMip;
89                                 MipLevels = native.TextureCubeArray.MipLevels;
90                                 First2DArrayFace = native.TextureCubeArray.First2DArrayFace;
91                                 CubeCount = native.TextureCubeArray.NumCubes;
92                                 break;
93
94                         case ShaderResourceViewDimension::ExtendedBuffer:
95                                 FirstElement = native.BufferEx.FirstElement;
96                                 ElementCount = native.BufferEx.NumElements;
97                                 Flags = static_cast<ShaderResourceViewExtendedBufferFlags>( native.BufferEx.Flags );
98                                 break;
99
100                         default:
101                                 break;
102                 }
103         }
104         
105         D3D11_SHADER_RESOURCE_VIEW_DESC ShaderResourceViewDescription::CreateNativeVersion()
106         {
107                 D3D11_SHADER_RESOURCE_VIEW_DESC native;
108                 native.Format = static_cast<DXGI_FORMAT>( Format );
109                 native.ViewDimension = static_cast<D3D11_SRV_DIMENSION>( Dimension );
110
111                 switch( Dimension )
112                 {
113                         case ShaderResourceViewDimension::Buffer:
114                                 native.Buffer.ElementOffset = ElementOffset;
115                                 native.Buffer.ElementWidth = ElementWidth;
116                                 break;
117
118                         case ShaderResourceViewDimension::Texture1D:
119                                 native.Texture1D.MipLevels = MipLevels;
120                                 native.Texture1D.MostDetailedMip = MostDetailedMip;
121                                 break;
122
123                         case ShaderResourceViewDimension::Texture1DArray:
124                                 native.Texture1DArray.ArraySize = ArraySize;
125                                 native.Texture1DArray.FirstArraySlice = FirstArraySlice;
126                                 native.Texture1DArray.MipLevels = MipLevels;
127                                 native.Texture1DArray.MostDetailedMip = MostDetailedMip;
128                                 break;
129
130                         case ShaderResourceViewDimension::Texture2D:
131                                 native.Texture2D.MipLevels = MipLevels;
132                                 native.Texture2D.MostDetailedMip = MostDetailedMip;
133                                 break;
134
135                         case ShaderResourceViewDimension::Texture2DArray:
136                                 native.Texture2DArray.ArraySize = ArraySize;
137                                 native.Texture2DArray.FirstArraySlice = FirstArraySlice;
138                                 native.Texture2DArray.MipLevels = MipLevels;
139                                 native.Texture2DArray.MostDetailedMip = MostDetailedMip;
140                                 break;
141
142                         case ShaderResourceViewDimension::Texture2DMultisampled:
143                                 // Nothing to do here.
144                                 break;
145
146                         case ShaderResourceViewDimension::Texture2DMultisampledArray:
147                                 native.Texture2DMSArray.ArraySize = ArraySize;
148                                 native.Texture2DMSArray.FirstArraySlice = FirstArraySlice;
149                                 break;
150
151                         case ShaderResourceViewDimension::Texture3D:
152                                 native.Texture3D.MipLevels = MipLevels;
153                                 native.Texture3D.MostDetailedMip = MostDetailedMip;
154                                 break;
155
156                         case ShaderResourceViewDimension::TextureCube:
157                                 native.TextureCube.MipLevels = MipLevels;
158                                 native.TextureCube.MostDetailedMip = MostDetailedMip;
159                                 break;
160
161                         case ShaderResourceViewDimension::TextureCubeArray:
162                                 native.TextureCubeArray.MostDetailedMip = MostDetailedMip;
163                                 native.TextureCubeArray.MipLevels = MipLevels;
164                                 native.TextureCubeArray.First2DArrayFace = First2DArrayFace;
165                                 native.TextureCubeArray.NumCubes = CubeCount;
166                                 break;
167
168                         case ShaderResourceViewDimension::ExtendedBuffer:
169                                 native.BufferEx.FirstElement = FirstElement;
170                                 native.BufferEx.NumElements = ElementCount;
171                                 native.BufferEx.Flags = static_cast<UINT>( Flags );
172                                 break;
173
174                         default:
175                                 break;
176                 }
177                 
178                 return native;
179         }
180
181         bool ShaderResourceViewDescription::operator == ( ShaderResourceViewDescription left, ShaderResourceViewDescription right )
182         {
183                 return ShaderResourceViewDescription::Equals( left, right );
184         }
185
186         bool ShaderResourceViewDescription::operator != ( ShaderResourceViewDescription left, ShaderResourceViewDescription right )
187         {
188                 return !ShaderResourceViewDescription::Equals( left, right );
189         }
190
191         int ShaderResourceViewDescription::GetHashCode()
192         {
193                 return Format.GetHashCode() + Dimension.GetHashCode() + ElementOffset.GetHashCode()
194                          + ElementWidth.GetHashCode() + MostDetailedMip.GetHashCode() + MipLevels.GetHashCode()
195                          + FirstArraySlice.GetHashCode() + ArraySize.GetHashCode() + FirstElement.GetHashCode()
196                          + ElementCount.GetHashCode() + Flags.GetHashCode() + CubeCount.GetHashCode() + First2DArrayFace.GetHashCode();
197         }
198
199         bool ShaderResourceViewDescription::Equals( Object^ value )
200         {
201                 if( value == nullptr )
202                         return false;
203
204                 if( value->GetType() != GetType() )
205                         return false;
206
207                 return Equals( safe_cast<ShaderResourceViewDescription>( value ) );
208         }
209
210         bool ShaderResourceViewDescription::Equals( ShaderResourceViewDescription value )
211         {
212                 return ( Format == value.Format && Dimension == value.Dimension && ElementOffset == value.ElementOffset && FirstElement == value.FirstElement && Flags == value.Flags
213                          && ElementCount == value.ElementCount && ElementWidth == value.ElementWidth && MostDetailedMip == value.MostDetailedMip && MipLevels == value.MipLevels
214                          && FirstArraySlice == value.FirstArraySlice && ArraySize == value.ArraySize && CubeCount == value.CubeCount && First2DArrayFace == value.First2DArrayFace );
215         }
216
217         bool ShaderResourceViewDescription::Equals( ShaderResourceViewDescription% value1, ShaderResourceViewDescription% value2 )
218         {
219                 return ( value1.Format == value2.Format && value1.Dimension == value2.Dimension && value1.ElementOffset == value2.ElementOffset
220                          && value1.FirstElement == value2.FirstElement && value1.Flags == value2.Flags && value1.ElementCount == value2.ElementCount 
221                          && value1.ElementWidth == value2.ElementWidth && value1.MostDetailedMip == value2.MostDetailedMip && value1.MipLevels == value2.MipLevels
222                          && value1.FirstArraySlice == value2.FirstArraySlice && value1.ArraySize == value2.ArraySize
223                          && value1.CubeCount == value2.CubeCount && value1.First2DArrayFace == value2.First2DArrayFace );
224         }
225 }
226 }