31 #include "DXGITypeConversions.h" 35 template<
typename D3D_SHADER_RESOURCE_VIEW_DESC>
36 void TextureViewDesc_to_D3D_SRV_DESC(
const TextureViewDesc& SRVDesc, D3D_SHADER_RESOURCE_VIEW_DESC &d3dSRVDesc,
Uint32 SampleCount)
38 memset(&d3dSRVDesc, 0,
sizeof(d3dSRVDesc));
41 switch (SRVDesc.TextureDim)
44 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE1D;
45 d3dSRVDesc.Texture1D.MipLevels = SRVDesc.NumMipLevels;
46 d3dSRVDesc.Texture1D.MostDetailedMip = SRVDesc.MostDetailedMip;
50 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE1DARRAY;
51 d3dSRVDesc.Texture1DArray.ArraySize = SRVDesc.NumArraySlices;
52 d3dSRVDesc.Texture1DArray.FirstArraySlice = SRVDesc.FirstArraySlice;
53 d3dSRVDesc.Texture1DArray.MipLevels = SRVDesc.NumMipLevels;
54 d3dSRVDesc.Texture1DArray.MostDetailedMip = SRVDesc.MostDetailedMip;
60 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DMS;
61 d3dSRVDesc.Texture2DMS.UnusedField_NothingToDefine = 0;
65 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2D;
66 d3dSRVDesc.Texture2D.MipLevels = SRVDesc.NumMipLevels;
67 d3dSRVDesc.Texture2D.MostDetailedMip = SRVDesc.MostDetailedMip;
74 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY;
75 d3dSRVDesc.Texture2DMSArray.ArraySize = SRVDesc.NumArraySlices;
76 d3dSRVDesc.Texture2DMSArray.FirstArraySlice = SRVDesc.FirstArraySlice;
80 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY;
81 d3dSRVDesc.Texture2DArray.ArraySize = SRVDesc.NumArraySlices;
82 d3dSRVDesc.Texture2DArray.FirstArraySlice = SRVDesc.FirstArraySlice;
83 d3dSRVDesc.Texture2DArray.MipLevels = SRVDesc.NumMipLevels;
84 d3dSRVDesc.Texture2DArray.MostDetailedMip = SRVDesc.MostDetailedMip;
89 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE3D;
90 d3dSRVDesc.Texture3D.MipLevels = SRVDesc.NumMipLevels;
91 d3dSRVDesc.Texture3D.MostDetailedMip = SRVDesc.MostDetailedMip;
95 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURECUBE;
96 d3dSRVDesc.TextureCube.MipLevels = SRVDesc.NumMipLevels;
97 d3dSRVDesc.TextureCube.MostDetailedMip = SRVDesc.MostDetailedMip;
101 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURECUBEARRAY;
102 d3dSRVDesc.TextureCubeArray.MipLevels = SRVDesc.NumMipLevels;
103 d3dSRVDesc.TextureCubeArray.MostDetailedMip = SRVDesc.MostDetailedMip;
104 d3dSRVDesc.TextureCubeArray.First2DArrayFace = SRVDesc.FirstArraySlice;
105 d3dSRVDesc.TextureCubeArray.NumCubes = SRVDesc.NumArraySlices / 6;
109 UNEXPECTED(
"Unexpected view type" );
113 template<
typename D3D_RENDER_TARGET_VIEW_DESC>
114 void TextureViewDesc_to_D3D_RTV_DESC(
const TextureViewDesc& RTVDesc, D3D_RENDER_TARGET_VIEW_DESC &d3dRTVDesc,
Uint32 SampleCount)
116 memset(&d3dRTVDesc, 0,
sizeof(d3dRTVDesc));
119 switch(RTVDesc.TextureDim)
122 d3dRTVDesc.ViewDimension = D3D_RTV_DIMENSION_TEXTURE1D;
123 d3dRTVDesc.Texture1D.MipSlice = RTVDesc.MostDetailedMip;
127 d3dRTVDesc.ViewDimension = D3D_RTV_DIMENSION_TEXTURE1DARRAY;
128 d3dRTVDesc.Texture1DArray.ArraySize = RTVDesc.NumArraySlices;
129 d3dRTVDesc.Texture1DArray.FirstArraySlice = RTVDesc.FirstArraySlice;
130 d3dRTVDesc.Texture1DArray.MipSlice = RTVDesc.MostDetailedMip;
135 if( SampleCount > 1 )
137 d3dRTVDesc.ViewDimension = D3D_RTV_DIMENSION_TEXTURE2DMS;
138 d3dRTVDesc.Texture2DMS.UnusedField_NothingToDefine = 0;
142 d3dRTVDesc.ViewDimension = D3D_RTV_DIMENSION_TEXTURE2D;
143 d3dRTVDesc.Texture2D.MipSlice = RTVDesc.MostDetailedMip;
148 if( SampleCount > 1 )
150 d3dRTVDesc.ViewDimension = D3D_RTV_DIMENSION_TEXTURE2DMSARRAY;
151 d3dRTVDesc.Texture2DMSArray.ArraySize = RTVDesc.NumArraySlices;
152 d3dRTVDesc.Texture2DMSArray.FirstArraySlice = RTVDesc.FirstArraySlice;
156 d3dRTVDesc.ViewDimension = D3D_RTV_DIMENSION_TEXTURE2DARRAY;
157 d3dRTVDesc.Texture2DArray.ArraySize = RTVDesc.NumArraySlices;
158 d3dRTVDesc.Texture2DArray.FirstArraySlice = RTVDesc.FirstArraySlice;
159 d3dRTVDesc.Texture2DArray.MipSlice = RTVDesc.MostDetailedMip;
164 d3dRTVDesc.ViewDimension = D3D_RTV_DIMENSION_TEXTURE3D;
165 d3dRTVDesc.Texture3D.FirstWSlice = RTVDesc.FirstDepthSlice;
166 d3dRTVDesc.Texture3D.WSize = RTVDesc.NumDepthSlices;
167 d3dRTVDesc.Texture3D.MipSlice = RTVDesc.MostDetailedMip;
171 UNEXPECTED(
"Unexpected view type" );
175 template<
typename D3D_DEPTH_STENCIL_VIEW_DESC>
176 void TextureViewDesc_to_D3D_DSV_DESC(
const TextureViewDesc& DSVDesc, D3D_DEPTH_STENCIL_VIEW_DESC &d3dDSVDesc,
Uint32 SampleCount)
178 memset(&d3dDSVDesc, 0,
sizeof(d3dDSVDesc));
181 switch(DSVDesc.TextureDim)
184 d3dDSVDesc.ViewDimension = D3D_DSV_DIMENSION_TEXTURE1D;
185 d3dDSVDesc.Texture1D.MipSlice = DSVDesc.MostDetailedMip;
189 d3dDSVDesc.ViewDimension = D3D_DSV_DIMENSION_TEXTURE1DARRAY;
190 d3dDSVDesc.Texture1DArray.ArraySize = DSVDesc.NumArraySlices;
191 d3dDSVDesc.Texture1DArray.FirstArraySlice = DSVDesc.FirstArraySlice;
192 d3dDSVDesc.Texture1DArray.MipSlice = DSVDesc.MostDetailedMip;
197 if( SampleCount > 1 )
199 d3dDSVDesc.ViewDimension = D3D_DSV_DIMENSION_TEXTURE2DMS;
200 d3dDSVDesc.Texture2DMS.UnusedField_NothingToDefine = 0;
204 d3dDSVDesc.ViewDimension = D3D_DSV_DIMENSION_TEXTURE2D;
205 d3dDSVDesc.Texture2D.MipSlice = DSVDesc.MostDetailedMip;
210 if( SampleCount > 1 )
212 d3dDSVDesc.ViewDimension = D3D_DSV_DIMENSION_TEXTURE2DMSARRAY;
213 d3dDSVDesc.Texture2DMSArray.ArraySize = DSVDesc.NumArraySlices;
214 d3dDSVDesc.Texture2DMSArray.FirstArraySlice = DSVDesc.FirstArraySlice;
218 d3dDSVDesc.ViewDimension = D3D_DSV_DIMENSION_TEXTURE2DARRAY;
219 d3dDSVDesc.Texture2DArray.ArraySize = DSVDesc.NumArraySlices;
220 d3dDSVDesc.Texture2DArray.FirstArraySlice = DSVDesc.FirstArraySlice;
221 d3dDSVDesc.Texture2DArray.MipSlice = DSVDesc.MostDetailedMip;
226 LOG_ERROR_AND_THROW(
"Depth stencil views are not supported for 3D textures");
230 UNEXPECTED(
"Unexpected view type" );
234 template<
typename D3D_UNORDERED_ACCESS_VIEW_DESC>
235 void TextureViewDesc_to_D3D_UAV_DESC(
const TextureViewDesc& UAVDesc, D3D_UNORDERED_ACCESS_VIEW_DESC &d3dUAVDesc)
237 memset(&d3dUAVDesc, 0,
sizeof(d3dUAVDesc));
240 switch(UAVDesc.TextureDim)
243 d3dUAVDesc.ViewDimension = D3D_UAV_DIMENSION_TEXTURE1D;
244 d3dUAVDesc.Texture1D.MipSlice = UAVDesc.MostDetailedMip;
248 d3dUAVDesc.ViewDimension = D3D_UAV_DIMENSION_TEXTURE1DARRAY;
249 d3dUAVDesc.Texture1DArray.ArraySize = UAVDesc.NumArraySlices;
250 d3dUAVDesc.Texture1DArray.FirstArraySlice = UAVDesc.FirstArraySlice;
251 d3dUAVDesc.Texture1DArray.MipSlice = UAVDesc.MostDetailedMip;
255 d3dUAVDesc.ViewDimension = D3D_UAV_DIMENSION_TEXTURE2D;
256 d3dUAVDesc.Texture2D.MipSlice = UAVDesc.MostDetailedMip;
260 d3dUAVDesc.ViewDimension = D3D_UAV_DIMENSION_TEXTURE2DARRAY;
261 d3dUAVDesc.Texture2DArray.ArraySize = UAVDesc.NumArraySlices;
262 d3dUAVDesc.Texture2DArray.FirstArraySlice = UAVDesc.FirstArraySlice;
263 d3dUAVDesc.Texture2DArray.MipSlice = UAVDesc.MostDetailedMip;
267 d3dUAVDesc.ViewDimension = D3D_UAV_DIMENSION_TEXTURE3D;
268 d3dUAVDesc.Texture3D.FirstWSlice = UAVDesc.FirstDepthSlice;
269 d3dUAVDesc.Texture3D.WSize = UAVDesc.NumDepthSlices;
270 d3dUAVDesc.Texture3D.MipSlice = UAVDesc.MostDetailedMip;
274 UNEXPECTED(
"Unexpected view type" );
278 template<
typename D3D_UNORDERED_ACCESS_VIEW_DESC>
279 void BufferViewDesc_to_D3D_SRV_DESC(
const BufferDesc &BuffDesc,
const BufferViewDesc& SRVDesc, D3D_UNORDERED_ACCESS_VIEW_DESC &d3dSRVDesc)
281 if( SRVDesc.ByteOffset != 0 )
283 VERIFY( BuffDesc.Mode ==
BUFFER_MODE_STRUCTURED,
"Non-zero byte offset is only supported for structured buffers" );
286 memset( &d3dSRVDesc, 0,
sizeof( d3dSRVDesc ) );
287 const auto &BuffFmt = BuffDesc.Format;
289 d3dSRVDesc.Format = TypeToDXGI_Format( BuffFmt.ValueType, BuffFmt.NumComponents, BuffFmt.IsNormalized );
292 VERIFY( (SRVDesc.ByteOffset % BuffDesc.ElementByteStride) == 0,
"Byte offest is not multiple of element byte stride" );
293 VERIFY( (SRVDesc.ByteWidth % BuffDesc.ElementByteStride) == 0,
"Byte width is not multiple of element byte stride" );
294 d3dSRVDesc.Buffer.FirstElement = SRVDesc.ByteOffset / BuffDesc.ElementByteStride;
295 d3dSRVDesc.Buffer.NumElements = SRVDesc.ByteWidth / BuffDesc.ElementByteStride;
296 d3dSRVDesc.ViewDimension = D3D_SRV_DIMENSION_BUFFER;
299 template<
typename D3D_UNORDERED_ACCESS_VIEW_DESC>
300 void BufferViewDesc_to_D3D_UAV_DESC(
const BufferDesc &BuffDesc,
const BufferViewDesc& UAVDesc, D3D_UNORDERED_ACCESS_VIEW_DESC &d3dUAVDesc)
302 if( UAVDesc.ByteOffset != 0 )
304 VERIFY( BuffDesc.Mode ==
BUFFER_MODE_STRUCTURED,
"Non-zero byte offset is only supported for structured buffers" );
307 memset( &d3dUAVDesc, 0,
sizeof(d3dUAVDesc) );
308 const auto &BuffFmt = BuffDesc.Format;
310 d3dUAVDesc.Format = TypeToDXGI_Format( BuffFmt.ValueType, BuffFmt.NumComponents, BuffFmt.IsNormalized );
313 VERIFY( (UAVDesc.ByteOffset % BuffDesc.ElementByteStride) == 0,
"Byte offest is not multiple of element byte stride" );
314 VERIFY( (UAVDesc.ByteWidth % BuffDesc.ElementByteStride) == 0,
"Byte width is not multiple of element byte stride" );
315 d3dUAVDesc.Buffer.FirstElement = UAVDesc.ByteOffset / BuffDesc.ElementByteStride;
316 d3dUAVDesc.Buffer.NumElements = UAVDesc.ByteWidth / BuffDesc.ElementByteStride;
317 d3dUAVDesc.ViewDimension = D3D_UAV_DIMENSION_BUFFER;
Cube-map texture.
Definition: GraphicsTypes.h:181
Two-dimensional texture.
Definition: GraphicsTypes.h:178
A texture can be bound as a render target.
Definition: GraphicsTypes.h:71
One-dimensional texture.
Definition: GraphicsTypes.h:176
Cube-map array texture.
Definition: GraphicsTypes.h:182
A buffer or a texture can be bound as a shader resource.
Definition: GraphicsTypes.h:68
Graphics engine namespace.
Definition: AdaptiveFixedBlockAllocator.h:30
A buffer view will define an unordered access view that will be used for unordered read/write operati...
Definition: GraphicsTypes.h:230
Structured buffer.
Definition: Buffer.h:50
Formated buffer.
Definition: Buffer.h:47
A texture can be bound as a depth-stencil target.
Definition: GraphicsTypes.h:72
One-dimensional texture array.
Definition: GraphicsTypes.h:177
A buffer or a texture can be bound as an unordered access view.
Definition: GraphicsTypes.h:73
uint32_t Uint32
32-bit unsigned integer
Definition: BasicTypes.h:39
A buffer view will define a shader resource view that will be used as the source for the shader read ...
Definition: GraphicsTypes.h:226
Three-dimensional texture.
Definition: GraphicsTypes.h:180
Two-dimensional texture array.
Definition: GraphicsTypes.h:179