]> git.cworth.org Git - apitrace/blobdiff - retrace/dxgistate.cpp
Implement grouping of calls.
[apitrace] / retrace / dxgistate.cpp
index 0b1bf76a291aa0aef19857a51aa964ac5a701d91..3cf4c746bdd4b32dda52a202c5a32075005d22e8 100644 (file)
@@ -42,8 +42,11 @@ namespace d3dstate {
 
 
 static DXGI_FORMAT
-ChooseConversionFormat(DXGI_FORMAT Format)
+ChooseConversionFormat(DXGI_FORMAT Format, unsigned &numChannels, image::ChannelType &channelType)
 {
+    numChannels = 4;
+    channelType = image::TYPE_UNORM8;
+
     switch (Format) {
 
     // Float
@@ -58,7 +61,8 @@ ChooseConversionFormat(DXGI_FORMAT Format)
     case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
     case DXGI_FORMAT_BC6H_UF16:
     case DXGI_FORMAT_BC6H_SF16:
-        return DXGI_FORMAT_R8G8B8A8_UNORM;
+        channelType = image::TYPE_FLOAT;
+        return DXGI_FORMAT_R32G32B32A32_FLOAT;
 
     // Unsigned normalized
     case DXGI_FORMAT_R16G16B16A16_UNORM:
@@ -138,7 +142,9 @@ ChooseConversionFormat(DXGI_FORMAT Format)
     case DXGI_FORMAT_D24_UNORM_S8_UINT:
     case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
     case DXGI_FORMAT_D16_UNORM:
-        return DXGI_FORMAT_R8G8B8A8_UNORM;
+        numChannels = 1;
+        channelType = image::TYPE_FLOAT;
+        return DXGI_FORMAT_D32_FLOAT;
 
     // Typeless
     case DXGI_FORMAT_UNKNOWN:
@@ -243,13 +249,15 @@ ConvertImage(DXGI_FORMAT SrcFormat,
              UINT SrcPitch,
              UINT Width, UINT Height)
 {
+    unsigned numChannels;
+    image::ChannelType channelType;
 
-    DXGI_FORMAT DstFormat = ChooseConversionFormat(SrcFormat);
+    DXGI_FORMAT DstFormat = ChooseConversionFormat(SrcFormat, numChannels, channelType);
     if (DstFormat == DXGI_FORMAT_UNKNOWN) {
         return NULL;
     }
 
-    image::Image *image = new image::Image(Width, Height, 4);
+    image::Image *image = new image::Image(Width, Height, numChannels, false, channelType);
     if (!image) {
         return NULL;
     }