mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-09 23:35:40 +00:00
Move common code into DXGI out of D3D11, to share with D3D12
This commit is contained in:
@@ -30,640 +30,6 @@
|
||||
#include "serialise/serialiser.h"
|
||||
#include "serialise/string_utils.h"
|
||||
|
||||
D3D11_PRIMITIVE_TOPOLOGY MakeD3D11PrimitiveTopology(PrimitiveTopology Topo)
|
||||
{
|
||||
switch(Topo)
|
||||
{
|
||||
case eTopology_LineLoop:
|
||||
case eTopology_TriangleFan: RDCWARN("Unsupported primitive topology on D3D11: %x", Topo); break;
|
||||
default:
|
||||
case eTopology_Unknown: return D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED;
|
||||
case eTopology_PointList: return D3D11_PRIMITIVE_TOPOLOGY_POINTLIST;
|
||||
case eTopology_LineList: return D3D11_PRIMITIVE_TOPOLOGY_LINELIST;
|
||||
case eTopology_LineStrip: return D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP;
|
||||
case eTopology_TriangleList: return D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
|
||||
case eTopology_TriangleStrip: return D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP;
|
||||
case eTopology_LineList_Adj: return D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ;
|
||||
case eTopology_LineStrip_Adj: return D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ;
|
||||
case eTopology_TriangleList_Adj: return D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ;
|
||||
case eTopology_TriangleStrip_Adj: return D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ;
|
||||
case eTopology_PatchList_1CPs:
|
||||
case eTopology_PatchList_2CPs:
|
||||
case eTopology_PatchList_3CPs:
|
||||
case eTopology_PatchList_4CPs:
|
||||
case eTopology_PatchList_5CPs:
|
||||
case eTopology_PatchList_6CPs:
|
||||
case eTopology_PatchList_7CPs:
|
||||
case eTopology_PatchList_8CPs:
|
||||
case eTopology_PatchList_9CPs:
|
||||
case eTopology_PatchList_10CPs:
|
||||
case eTopology_PatchList_11CPs:
|
||||
case eTopology_PatchList_12CPs:
|
||||
case eTopology_PatchList_13CPs:
|
||||
case eTopology_PatchList_14CPs:
|
||||
case eTopology_PatchList_15CPs:
|
||||
case eTopology_PatchList_16CPs:
|
||||
case eTopology_PatchList_17CPs:
|
||||
case eTopology_PatchList_18CPs:
|
||||
case eTopology_PatchList_19CPs:
|
||||
case eTopology_PatchList_20CPs:
|
||||
case eTopology_PatchList_21CPs:
|
||||
case eTopology_PatchList_22CPs:
|
||||
case eTopology_PatchList_23CPs:
|
||||
case eTopology_PatchList_24CPs:
|
||||
case eTopology_PatchList_25CPs:
|
||||
case eTopology_PatchList_26CPs:
|
||||
case eTopology_PatchList_27CPs:
|
||||
case eTopology_PatchList_28CPs:
|
||||
case eTopology_PatchList_29CPs:
|
||||
case eTopology_PatchList_30CPs:
|
||||
case eTopology_PatchList_31CPs:
|
||||
case eTopology_PatchList_32CPs:
|
||||
return D3D11_PRIMITIVE_TOPOLOGY(D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST +
|
||||
(Topo - eTopology_PatchList_1CPs));
|
||||
}
|
||||
|
||||
return D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED;
|
||||
}
|
||||
|
||||
PrimitiveTopology MakePrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY Topo)
|
||||
{
|
||||
switch(Topo)
|
||||
{
|
||||
default:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_UNDEFINED: break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_POINTLIST: return eTopology_PointList; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_LINELIST: return eTopology_LineList; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_LINESTRIP: return eTopology_LineStrip; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST: return eTopology_TriangleList; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP: return eTopology_TriangleStrip; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ: return eTopology_LineList_Adj; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ: return eTopology_LineStrip_Adj; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ: return eTopology_TriangleList_Adj; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ: return eTopology_TriangleStrip_Adj; break;
|
||||
case D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST:
|
||||
case D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST:
|
||||
return PrimitiveTopology(eTopology_PatchList_1CPs +
|
||||
(Topo - D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST));
|
||||
break;
|
||||
}
|
||||
|
||||
return eTopology_Unknown;
|
||||
}
|
||||
|
||||
DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt)
|
||||
{
|
||||
DXGI_FORMAT ret = DXGI_FORMAT_UNKNOWN;
|
||||
|
||||
if(fmt.special)
|
||||
{
|
||||
switch(fmt.specialFormat)
|
||||
{
|
||||
case eSpecial_BC1: ret = DXGI_FORMAT_BC1_UNORM; break;
|
||||
case eSpecial_BC2: ret = DXGI_FORMAT_BC2_UNORM; break;
|
||||
case eSpecial_BC3: ret = DXGI_FORMAT_BC3_UNORM; break;
|
||||
case eSpecial_BC4: ret = DXGI_FORMAT_BC4_UNORM; break;
|
||||
case eSpecial_BC5: ret = DXGI_FORMAT_BC5_UNORM; break;
|
||||
case eSpecial_BC6: ret = DXGI_FORMAT_BC6H_UF16; break;
|
||||
case eSpecial_BC7: ret = DXGI_FORMAT_BC7_UNORM; break;
|
||||
case eSpecial_R10G10B10A2:
|
||||
if(fmt.compType == eCompType_UNorm)
|
||||
ret = DXGI_FORMAT_R10G10B10A2_UNORM;
|
||||
else
|
||||
ret = DXGI_FORMAT_R10G10B10A2_UINT;
|
||||
break;
|
||||
case eSpecial_R11G11B10: ret = DXGI_FORMAT_R11G11B10_FLOAT; break;
|
||||
case eSpecial_R5G6B5:
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
ret = DXGI_FORMAT_B5G6R5_UNORM;
|
||||
break;
|
||||
case eSpecial_R5G5B5A1:
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
ret = DXGI_FORMAT_B5G5R5A1_UNORM;
|
||||
break;
|
||||
case eSpecial_R9G9B9E5: ret = DXGI_FORMAT_R9G9B9E5_SHAREDEXP; break;
|
||||
case eSpecial_R4G4B4A4:
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
ret = DXGI_FORMAT_B4G4R4A4_UNORM;
|
||||
break;
|
||||
case eSpecial_D24S8: ret = DXGI_FORMAT_R24G8_TYPELESS; break;
|
||||
case eSpecial_D32S8: ret = DXGI_FORMAT_R32G8X24_TYPELESS; break;
|
||||
case eSpecial_YUV:
|
||||
RDCERR("Video format not unambiguously encoded");
|
||||
ret = DXGI_FORMAT_AYUV;
|
||||
break;
|
||||
case eSpecial_S8: RDCERR("D3D11 has no stencil-only format"); break;
|
||||
case eSpecial_D16S8: RDCERR("D3D11 has no D16S8 format"); break;
|
||||
default: RDCERR("Unrecognised/unsupported special format %u", fmt.specialFormat); break;
|
||||
}
|
||||
}
|
||||
else if(fmt.compCount == 4)
|
||||
{
|
||||
if(fmt.compByteWidth == 4)
|
||||
ret = DXGI_FORMAT_R32G32B32A32_TYPELESS;
|
||||
else if(fmt.compByteWidth == 2)
|
||||
ret = DXGI_FORMAT_R16G16B16A16_TYPELESS;
|
||||
else if(fmt.compByteWidth == 1)
|
||||
ret = DXGI_FORMAT_R8G8B8A8_TYPELESS;
|
||||
else
|
||||
RDCERR("Unrecognised 4-component byte width: %d", fmt.compByteWidth);
|
||||
|
||||
if(fmt.bgraOrder)
|
||||
ret = DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||
}
|
||||
else if(fmt.compCount == 3)
|
||||
{
|
||||
if(fmt.compByteWidth == 4)
|
||||
ret = DXGI_FORMAT_R32G32B32_TYPELESS;
|
||||
// else if(fmt.compByteWidth == 2) ret = DXGI_FORMAT_R16G16B16_TYPELESS; // format doesn't exist
|
||||
// else if(fmt.compByteWidth == 1) ret = DXGI_FORMAT_R8G8B8_TYPELESS; // format doesn't exist
|
||||
else
|
||||
RDCERR("Unrecognised 3-component byte width: %d", fmt.compByteWidth);
|
||||
}
|
||||
else if(fmt.compCount == 2)
|
||||
{
|
||||
if(fmt.compByteWidth == 4)
|
||||
ret = DXGI_FORMAT_R32G32_TYPELESS;
|
||||
else if(fmt.compByteWidth == 2)
|
||||
ret = DXGI_FORMAT_R16G16_TYPELESS;
|
||||
else if(fmt.compByteWidth == 1)
|
||||
ret = DXGI_FORMAT_R8G8_TYPELESS;
|
||||
else
|
||||
RDCERR("Unrecognised 2-component byte width: %d", fmt.compByteWidth);
|
||||
}
|
||||
else if(fmt.compCount == 1)
|
||||
{
|
||||
if(fmt.compByteWidth == 4)
|
||||
ret = DXGI_FORMAT_R32_TYPELESS;
|
||||
else if(fmt.compByteWidth == 2)
|
||||
ret = DXGI_FORMAT_R16_TYPELESS;
|
||||
else if(fmt.compByteWidth == 1)
|
||||
ret = DXGI_FORMAT_R8_TYPELESS;
|
||||
else
|
||||
RDCERR("Unrecognised 1-component byte width: %d", fmt.compByteWidth);
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCERR("Unrecognised component count: %d", fmt.compCount);
|
||||
}
|
||||
|
||||
if(fmt.compType == eCompType_None)
|
||||
ret = GetTypelessFormat(ret);
|
||||
else if(fmt.compType == eCompType_Float)
|
||||
ret = GetFloatTypedFormat(ret);
|
||||
else if(fmt.compType == eCompType_Depth)
|
||||
ret = GetDepthTypedFormat(ret);
|
||||
else if(fmt.compType == eCompType_UNorm)
|
||||
ret = GetUnormTypedFormat(ret);
|
||||
else if(fmt.compType == eCompType_SNorm)
|
||||
ret = GetSnormTypedFormat(ret);
|
||||
else if(fmt.compType == eCompType_UInt)
|
||||
ret = GetUIntTypedFormat(ret);
|
||||
else if(fmt.compType == eCompType_SInt)
|
||||
ret = GetSIntTypedFormat(ret);
|
||||
else
|
||||
RDCERR("Unrecognised component type");
|
||||
|
||||
if(fmt.srgbCorrected)
|
||||
ret = GetSRGBFormat(ret);
|
||||
|
||||
if(ret == DXGI_FORMAT_UNKNOWN)
|
||||
RDCERR("No known DXGI_FORMAT corresponding to resource format!");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
{
|
||||
ResourceFormat ret;
|
||||
|
||||
ret.rawType = fmt;
|
||||
ret.special = false;
|
||||
ret.strname = ToStr::Get(fmt).substr(12); // 12 == strlen("DXGI_FORMAT_")
|
||||
|
||||
ret.compCount = ret.compByteWidth = 0;
|
||||
ret.compType = eCompType_Float;
|
||||
|
||||
ret.srgbCorrected = IsSRGBFormat(fmt);
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT: ret.compCount = 4; break;
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT: ret.compCount = 3; break;
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SINT: ret.compCount = 2; break;
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R32_SINT:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_FLOAT:
|
||||
case DXGI_FORMAT_D16_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R16_SINT:
|
||||
case DXGI_FORMAT_R8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_R8_UINT:
|
||||
case DXGI_FORMAT_R8_SNORM:
|
||||
case DXGI_FORMAT_R8_SINT:
|
||||
case DXGI_FORMAT_A8_UNORM: ret.compCount = 1; break;
|
||||
|
||||
case DXGI_FORMAT_R32G8X24_TYPELESS:
|
||||
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
|
||||
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
|
||||
case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
|
||||
case DXGI_FORMAT_R24G8_TYPELESS:
|
||||
case DXGI_FORMAT_D24_UNORM_S8_UINT:
|
||||
case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
|
||||
case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
|
||||
|
||||
case DXGI_FORMAT_BC5_TYPELESS:
|
||||
case DXGI_FORMAT_BC5_UNORM:
|
||||
case DXGI_FORMAT_BC5_SNORM: ret.compCount = 2; break;
|
||||
|
||||
case DXGI_FORMAT_R11G11B10_FLOAT:
|
||||
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
|
||||
case DXGI_FORMAT_R8G8_B8G8_UNORM:
|
||||
case DXGI_FORMAT_G8R8_G8B8_UNORM:
|
||||
case DXGI_FORMAT_B5G6R5_UNORM:
|
||||
|
||||
case DXGI_FORMAT_BC6H_TYPELESS:
|
||||
case DXGI_FORMAT_BC6H_UF16:
|
||||
case DXGI_FORMAT_BC6H_SF16: ret.compCount = 3; break;
|
||||
|
||||
case DXGI_FORMAT_R10G10B10A2_TYPELESS:
|
||||
case DXGI_FORMAT_R10G10B10A2_UNORM:
|
||||
case DXGI_FORMAT_R10G10B10A2_UINT:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B5G5R5A1_UNORM:
|
||||
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
|
||||
|
||||
case DXGI_FORMAT_BC1_TYPELESS:
|
||||
case DXGI_FORMAT_BC1_UNORM:
|
||||
case DXGI_FORMAT_BC1_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC2_TYPELESS:
|
||||
case DXGI_FORMAT_BC2_UNORM:
|
||||
case DXGI_FORMAT_BC2_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC3_TYPELESS:
|
||||
case DXGI_FORMAT_BC3_UNORM:
|
||||
case DXGI_FORMAT_BC3_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC7_TYPELESS:
|
||||
case DXGI_FORMAT_BC7_UNORM:
|
||||
case DXGI_FORMAT_BC7_UNORM_SRGB: ret.compCount = 4; break;
|
||||
|
||||
case DXGI_FORMAT_R1_UNORM:
|
||||
|
||||
case DXGI_FORMAT_BC4_TYPELESS:
|
||||
case DXGI_FORMAT_BC4_UNORM:
|
||||
case DXGI_FORMAT_BC4_SNORM: ret.compCount = 1; break;
|
||||
|
||||
case DXGI_FORMAT_UNKNOWN: ret.compCount = 0;
|
||||
|
||||
default: ret.special = true;
|
||||
}
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT:
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R32_SINT: ret.compByteWidth = 4; break;
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_FLOAT:
|
||||
case DXGI_FORMAT_D16_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R16_SINT: ret.compByteWidth = 2; break;
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SINT:
|
||||
case DXGI_FORMAT_R8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_R8_UINT:
|
||||
case DXGI_FORMAT_R8_SNORM:
|
||||
case DXGI_FORMAT_R8_SINT:
|
||||
case DXGI_FORMAT_A8_UNORM: ret.compByteWidth = 1; break;
|
||||
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: ret.compByteWidth = 1; break;
|
||||
|
||||
case DXGI_FORMAT_UNKNOWN: ret.compByteWidth = 0;
|
||||
|
||||
default: ret.special = true;
|
||||
}
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_TYPELESS: ret.compType = eCompType_None; break;
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R16_FLOAT: ret.compType = eCompType_Float; break;
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_A8_UNORM: ret.compType = eCompType_UNorm; break;
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R8_SNORM: ret.compType = eCompType_SNorm; break;
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R8_UINT: ret.compType = eCompType_UInt; break;
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R32_SINT:
|
||||
case DXGI_FORMAT_R8G8_SINT:
|
||||
case DXGI_FORMAT_R16_SINT:
|
||||
case DXGI_FORMAT_R8_SINT: ret.compType = eCompType_SInt; break;
|
||||
|
||||
case DXGI_FORMAT_R10G10B10A2_UINT:
|
||||
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: ret.compType = eCompType_UInt; break;
|
||||
|
||||
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
|
||||
case DXGI_FORMAT_R11G11B10_FLOAT: ret.compType = eCompType_Float; break;
|
||||
|
||||
case DXGI_FORMAT_BC4_SNORM:
|
||||
case DXGI_FORMAT_BC5_SNORM:
|
||||
case DXGI_FORMAT_BC6H_SF16: ret.compType = eCompType_SNorm; break;
|
||||
|
||||
case DXGI_FORMAT_R24G8_TYPELESS:
|
||||
case DXGI_FORMAT_R32G8X24_TYPELESS: ret.compType = eCompType_None; break;
|
||||
case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
|
||||
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
|
||||
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
|
||||
case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
|
||||
case DXGI_FORMAT_D24_UNORM_S8_UINT:
|
||||
case DXGI_FORMAT_D16_UNORM: ret.compType = eCompType_Depth; break;
|
||||
|
||||
case DXGI_FORMAT_R10G10B10A2_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
case DXGI_FORMAT_BC1_TYPELESS:
|
||||
case DXGI_FORMAT_BC2_TYPELESS:
|
||||
case DXGI_FORMAT_BC3_TYPELESS:
|
||||
case DXGI_FORMAT_BC4_TYPELESS:
|
||||
case DXGI_FORMAT_BC5_TYPELESS:
|
||||
case DXGI_FORMAT_BC6H_TYPELESS:
|
||||
case DXGI_FORMAT_BC7_TYPELESS: ret.compType = eCompType_None; break;
|
||||
case DXGI_FORMAT_R8G8_B8G8_UNORM:
|
||||
case DXGI_FORMAT_G8R8_G8B8_UNORM:
|
||||
case DXGI_FORMAT_R10G10B10A2_UNORM:
|
||||
case DXGI_FORMAT_B5G6R5_UNORM:
|
||||
case DXGI_FORMAT_B5G5R5A1_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R1_UNORM:
|
||||
case DXGI_FORMAT_BC1_UNORM:
|
||||
case DXGI_FORMAT_BC2_UNORM:
|
||||
case DXGI_FORMAT_BC3_UNORM:
|
||||
case DXGI_FORMAT_BC4_UNORM:
|
||||
case DXGI_FORMAT_BC5_UNORM:
|
||||
case DXGI_FORMAT_BC6H_UF16:
|
||||
case DXGI_FORMAT_BC7_UNORM:
|
||||
case DXGI_FORMAT_BC1_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC2_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC3_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC7_UNORM_SRGB: ret.compType = eCompType_UNorm; break;
|
||||
|
||||
case DXGI_FORMAT_UNKNOWN: ret.compType = eCompType_None;
|
||||
|
||||
default: ret.special = true;
|
||||
}
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: ret.bgraOrder = true; break;
|
||||
}
|
||||
|
||||
ret.specialFormat = eSpecial_Unknown;
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
|
||||
case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
|
||||
case DXGI_FORMAT_D24_UNORM_S8_UINT:
|
||||
case DXGI_FORMAT_R24G8_TYPELESS: ret.specialFormat = eSpecial_D24S8; break;
|
||||
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
|
||||
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
|
||||
case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
|
||||
case DXGI_FORMAT_R32G8X24_TYPELESS: ret.specialFormat = eSpecial_D32S8; break;
|
||||
|
||||
case DXGI_FORMAT_BC1_TYPELESS:
|
||||
case DXGI_FORMAT_BC1_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC1_UNORM: ret.specialFormat = eSpecial_BC1; break;
|
||||
case DXGI_FORMAT_BC2_TYPELESS:
|
||||
case DXGI_FORMAT_BC2_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC2_UNORM: ret.specialFormat = eSpecial_BC2; break;
|
||||
case DXGI_FORMAT_BC3_TYPELESS:
|
||||
case DXGI_FORMAT_BC3_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC3_UNORM: ret.specialFormat = eSpecial_BC3; break;
|
||||
case DXGI_FORMAT_BC4_TYPELESS:
|
||||
case DXGI_FORMAT_BC4_UNORM:
|
||||
case DXGI_FORMAT_BC4_SNORM: ret.specialFormat = eSpecial_BC4; break;
|
||||
case DXGI_FORMAT_BC5_TYPELESS:
|
||||
case DXGI_FORMAT_BC5_UNORM:
|
||||
case DXGI_FORMAT_BC5_SNORM: ret.specialFormat = eSpecial_BC5; break;
|
||||
case DXGI_FORMAT_BC6H_UF16:
|
||||
case DXGI_FORMAT_BC6H_SF16:
|
||||
case DXGI_FORMAT_BC6H_TYPELESS: ret.specialFormat = eSpecial_BC6; break;
|
||||
case DXGI_FORMAT_BC7_TYPELESS:
|
||||
case DXGI_FORMAT_BC7_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC7_UNORM: ret.specialFormat = eSpecial_BC7; break;
|
||||
case DXGI_FORMAT_R10G10B10A2_TYPELESS:
|
||||
case DXGI_FORMAT_R10G10B10A2_UINT:
|
||||
case DXGI_FORMAT_R10G10B10A2_UNORM:
|
||||
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: ret.specialFormat = eSpecial_R10G10B10A2; break;
|
||||
case DXGI_FORMAT_R11G11B10_FLOAT: ret.specialFormat = eSpecial_R11G11B10; break;
|
||||
case DXGI_FORMAT_B5G6R5_UNORM:
|
||||
ret.specialFormat = eSpecial_R5G6B5;
|
||||
ret.bgraOrder = true;
|
||||
break;
|
||||
case DXGI_FORMAT_B5G5R5A1_UNORM:
|
||||
ret.specialFormat = eSpecial_R5G5B5A1;
|
||||
ret.bgraOrder = true;
|
||||
break;
|
||||
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: ret.specialFormat = eSpecial_R9G9B9E5; break;
|
||||
|
||||
case DXGI_FORMAT_AYUV:
|
||||
case DXGI_FORMAT_Y410:
|
||||
case DXGI_FORMAT_Y416:
|
||||
case DXGI_FORMAT_NV12:
|
||||
case DXGI_FORMAT_P010:
|
||||
case DXGI_FORMAT_P016:
|
||||
case DXGI_FORMAT_420_OPAQUE:
|
||||
case DXGI_FORMAT_YUY2:
|
||||
case DXGI_FORMAT_Y210:
|
||||
case DXGI_FORMAT_Y216:
|
||||
case DXGI_FORMAT_NV11:
|
||||
case DXGI_FORMAT_AI44:
|
||||
case DXGI_FORMAT_IA44:
|
||||
case DXGI_FORMAT_P8:
|
||||
case DXGI_FORMAT_A8P8:
|
||||
case DXGI_FORMAT_P208:
|
||||
case DXGI_FORMAT_V208:
|
||||
case DXGI_FORMAT_V408: ret.specialFormat = eSpecial_YUV; break;
|
||||
|
||||
case DXGI_FORMAT_B4G4R4A4_UNORM:
|
||||
ret.specialFormat = eSpecial_R4G4B4A4;
|
||||
ret.bgraOrder = true;
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
|
||||
if(ret.specialFormat != eSpecial_Unknown)
|
||||
{
|
||||
ret.special = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ShaderConstant MakeConstantBufferVariable(const DXBC::CBufferVariable &var, uint32_t &offset);
|
||||
|
||||
static ShaderVariableType MakeShaderVariableType(DXBC::CBufferVariableType type, uint32_t &offset)
|
||||
@@ -1655,14 +1021,6 @@ string ToStrHelper<false, D3D11_BOX>::Get(const D3D11_BOX &el)
|
||||
return tostrBuf;
|
||||
}
|
||||
|
||||
string ToStrHelper<false, DXGI_SAMPLE_DESC>::Get(const DXGI_SAMPLE_DESC &el)
|
||||
{
|
||||
char tostrBuf[256] = {0};
|
||||
StringFormat::snprintf(tostrBuf, 255, "DXGI_SAMPLE_DESC<%d,%d>", el.Count, el.Quality);
|
||||
|
||||
return tostrBuf;
|
||||
}
|
||||
|
||||
string ToStrHelper<false, D3D11_BIND_FLAG>::Get(const D3D11_BIND_FLAG &el)
|
||||
{
|
||||
string ret;
|
||||
@@ -2026,46 +1384,6 @@ string ToStrHelper<false, D3D11_DSV_DIMENSION>::Get(const D3D11_DSV_DIMENSION &e
|
||||
return tostrBuf;
|
||||
}
|
||||
|
||||
string ToStrHelper<false, D3D_FEATURE_LEVEL>::Get(const D3D_FEATURE_LEVEL &el)
|
||||
{
|
||||
switch(el)
|
||||
{
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_9_1)
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_9_2)
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_9_3)
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_10_0)
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_10_1)
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_11_0)
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_11_1)
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_12_0)
|
||||
TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_12_1)
|
||||
default: break;
|
||||
}
|
||||
|
||||
char tostrBuf[256] = {0};
|
||||
StringFormat::snprintf(tostrBuf, 255, "D3D_FEATURE_LEVEL<%d>", el);
|
||||
|
||||
return tostrBuf;
|
||||
}
|
||||
|
||||
string ToStrHelper<false, D3D_DRIVER_TYPE>::Get(const D3D_DRIVER_TYPE &el)
|
||||
{
|
||||
switch(el)
|
||||
{
|
||||
TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_HARDWARE)
|
||||
TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_REFERENCE)
|
||||
TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_NULL)
|
||||
TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_SOFTWARE)
|
||||
TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_WARP)
|
||||
default: break;
|
||||
}
|
||||
|
||||
char tostrBuf[256] = {0};
|
||||
StringFormat::snprintf(tostrBuf, 255, "D3D_DRIVER_TYPE<%d>", el);
|
||||
|
||||
return tostrBuf;
|
||||
}
|
||||
|
||||
string ToStrHelper<false, D3D11_CONTEXT_TYPE>::Get(const D3D11_CONTEXT_TYPE &el)
|
||||
{
|
||||
switch(el)
|
||||
@@ -2241,136 +1559,3 @@ string ToStrHelper<false, long>::Get(const long &el)
|
||||
{
|
||||
return ToStr::Get((uint64_t)el);
|
||||
}
|
||||
|
||||
string ToStrHelper<false, DXGI_FORMAT>::Get(const DXGI_FORMAT &el)
|
||||
{
|
||||
switch(el)
|
||||
{
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32A32_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32A32_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32A32_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32A32_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_SNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G8X24_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_D32_FLOAT_S8X24_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_X32_TYPELESS_G8X24_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R10G10B10A2_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R10G10B10A2_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R10G10B10A2_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R11G11B10_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_SNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_SNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_D32_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R24G8_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_D24_UNORM_S8_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R24_UNORM_X8_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_X24_TYPELESS_G8_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_SNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_FLOAT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_D16_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_SNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_UINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_SNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_SINT)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_A8_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R1_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R9G9B9E5_SHAREDEXP)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_B8G8_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_G8R8_G8B8_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC1_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC1_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC1_UNORM_SRGB)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC2_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC2_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC2_UNORM_SRGB)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC3_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC3_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC3_UNORM_SRGB)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC4_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC4_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC4_SNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC5_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC5_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC5_SNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B5G6R5_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B5G5R5A1_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8A8_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8X8_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8A8_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8A8_UNORM_SRGB)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8X8_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8X8_UNORM_SRGB)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC6H_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC6H_UF16)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC6H_SF16)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC7_TYPELESS)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC7_UNORM)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC7_UNORM_SRGB)
|
||||
// D3D11.1 formats
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_AYUV)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_Y410)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_Y416)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_NV12)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_P010)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_P016)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_420_OPAQUE)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_YUY2)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_Y210)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_Y216)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_NV11)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_AI44)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_IA44)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_P8)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_A8P8)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B4G4R4A4_UNORM)
|
||||
// D3D11.2 formats
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_P208)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_V208)
|
||||
TOSTR_CASE_STRINGIZE(DXGI_FORMAT_V408)
|
||||
default: break;
|
||||
}
|
||||
|
||||
char tostrBuf[256] = {0};
|
||||
StringFormat::snprintf(tostrBuf, 255, "DXGI_FORMAT<%d>", el);
|
||||
|
||||
return tostrBuf;
|
||||
}
|
||||
|
||||
@@ -31,16 +31,12 @@
|
||||
#include "core/core.h"
|
||||
#include "driver/dx/official/d3d11_4.h"
|
||||
#include "driver/dx/official/dxgi1_3.h"
|
||||
#include "driver/dxgi/dxgi_common.h"
|
||||
#include "driver/shaders/dxbc/dxbc_compile.h"
|
||||
|
||||
class WrappedID3D11Device;
|
||||
struct D3D11RenderState;
|
||||
|
||||
ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt);
|
||||
DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt);
|
||||
PrimitiveTopology MakePrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY Topo);
|
||||
D3D11_PRIMITIVE_TOPOLOGY MakeD3D11PrimitiveTopology(PrimitiveTopology Topo);
|
||||
|
||||
ShaderReflection *MakeShaderReflection(DXBC::DXBCFile *dxbc);
|
||||
|
||||
template <class T>
|
||||
|
||||
@@ -4702,7 +4702,7 @@ void D3D11DebugManager::RenderMesh(uint32_t eventID, const vector<MeshFormat> &s
|
||||
DXGI_FORMAT ifmt = DXGI_FORMAT_R16_UINT;
|
||||
UINT ioffs = (UINT)cfg.position.idxoffs;
|
||||
|
||||
D3D11_PRIMITIVE_TOPOLOGY topo = MakeD3D11PrimitiveTopology(cfg.position.topo);
|
||||
D3D11_PRIMITIVE_TOPOLOGY topo = MakeD3DPrimitiveTopology(cfg.position.topo);
|
||||
|
||||
// render the mesh itself (solid, then wireframe)
|
||||
{
|
||||
@@ -4756,7 +4756,7 @@ void D3D11DebugManager::RenderMesh(uint32_t eventID, const vector<MeshFormat> &s
|
||||
FillCBuffer(m_DebugRender.GenericPSCBuffer, (float *)&pixelData,
|
||||
sizeof(DebugPixelCBufferData));
|
||||
|
||||
m_pImmediateContext->IASetPrimitiveTopology(MakeD3D11PrimitiveTopology(fmt.topo));
|
||||
m_pImmediateContext->IASetPrimitiveTopology(MakeD3DPrimitiveTopology(fmt.topo));
|
||||
|
||||
auto it = WrappedID3D11Buffer::m_BufferList.find(fmt.buf);
|
||||
|
||||
|
||||
@@ -62,35 +62,12 @@ enum ResourceType
|
||||
ResourceType IdentifyTypeByPtr(IUnknown *ptr);
|
||||
ResourceId GetIDForResource(ID3D11DeviceChild *ptr);
|
||||
|
||||
UINT GetByteSize(int Width, int Height, int Depth, DXGI_FORMAT Format, int mip);
|
||||
UINT GetByteSize(ID3D11Texture1D *tex, int SubResource);
|
||||
UINT GetByteSize(ID3D11Texture2D *tex, int SubResource);
|
||||
UINT GetByteSize(ID3D11Texture3D *tex, int SubResource);
|
||||
|
||||
UINT GetMipForSubresource(ID3D11Resource *res, int Subresource);
|
||||
|
||||
// returns block size for block-compressed formats
|
||||
UINT GetFormatBPP(DXGI_FORMAT f);
|
||||
|
||||
DXGI_FORMAT GetTypelessFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetTypedFormat(DXGI_FORMAT f, FormatComponentType hint);
|
||||
DXGI_FORMAT GetDepthTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetFloatTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetUnormTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetSnormTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetUIntTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetSIntTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetSRGBFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetNonSRGBFormat(DXGI_FORMAT f);
|
||||
bool IsBlockFormat(DXGI_FORMAT f);
|
||||
bool IsDepthFormat(DXGI_FORMAT f);
|
||||
|
||||
bool IsUIntFormat(DXGI_FORMAT f);
|
||||
bool IsTypelessFormat(DXGI_FORMAT f);
|
||||
bool IsIntFormat(DXGI_FORMAT f);
|
||||
bool IsSRGBFormat(DXGI_FORMAT f);
|
||||
|
||||
template <typename derived, typename base>
|
||||
bool CanQuery(base *b)
|
||||
{
|
||||
@@ -115,365 +92,6 @@ private:
|
||||
ResourceId m_ID;
|
||||
};
|
||||
|
||||
template <typename NestedType>
|
||||
class WrappedDXGIInterface : public RefCounter,
|
||||
public IDXGIKeyedMutex,
|
||||
public IDXGISurface2,
|
||||
public IDXGIResource1
|
||||
{
|
||||
public:
|
||||
WrappedID3D11Device *m_pDevice;
|
||||
NestedType *m_pWrapped;
|
||||
|
||||
WrappedDXGIInterface(NestedType *wrapped, WrappedID3D11Device *device)
|
||||
: RefCounter(NULL), m_pDevice(device), m_pWrapped(wrapped)
|
||||
{
|
||||
m_pWrapped->AddRef();
|
||||
m_pDevice->AddRef();
|
||||
}
|
||||
|
||||
virtual ~WrappedDXGIInterface()
|
||||
{
|
||||
m_pWrapped->Release();
|
||||
m_pDevice->Release();
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IUnknown
|
||||
ULONG STDMETHODCALLTYPE AddRef() { return RefCounter::AddRef(); }
|
||||
ULONG STDMETHODCALLTYPE Release() { return RefCounter::Release(); }
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
|
||||
{
|
||||
// ensure the real object has this interface
|
||||
void *outObj;
|
||||
HRESULT hr = m_pWrapped->QueryInterface(riid, &outObj);
|
||||
|
||||
IUnknown *unk = (IUnknown *)outObj;
|
||||
SAFE_RELEASE(unk);
|
||||
|
||||
if(FAILED(hr))
|
||||
{
|
||||
return hr;
|
||||
}
|
||||
|
||||
if(riid == __uuidof(IUnknown))
|
||||
{
|
||||
*ppvObject = (IUnknown *)(IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIObject))
|
||||
{
|
||||
*ppvObject = (IDXGIObject *)(IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIDeviceSubObject))
|
||||
{
|
||||
*ppvObject = (IDXGIDeviceSubObject *)(IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIResource))
|
||||
{
|
||||
*ppvObject = (IDXGIResource *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIKeyedMutex))
|
||||
{
|
||||
*ppvObject = (IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGISurface))
|
||||
{
|
||||
*ppvObject = (IDXGISurface *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGISurface1))
|
||||
{
|
||||
*ppvObject = (IDXGISurface1 *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIResource1))
|
||||
{
|
||||
*ppvObject = (IDXGIResource1 *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGISurface2))
|
||||
{
|
||||
*ppvObject = (IDXGISurface2 *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return m_pWrapped->QueryInterface(riid, ppvObject);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIObject
|
||||
HRESULT STDMETHODCALLTYPE SetPrivateData(REFGUID Name, UINT DataSize, const void *pData)
|
||||
{
|
||||
return m_pWrapped->SetPrivateData(Name, DataSize, pData);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE SetPrivateDataInterface(REFGUID Name, const IUnknown *pUnknown)
|
||||
{
|
||||
return m_pWrapped->SetPrivateDataInterface(Name, pUnknown);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE GetPrivateData(REFGUID Name, UINT *pDataSize, void *pData)
|
||||
{
|
||||
return m_pWrapped->GetPrivateData(Name, pDataSize, pData);
|
||||
}
|
||||
|
||||
// this should only be called for adapters, devices, factories etc
|
||||
// so we pass it onto the device
|
||||
HRESULT STDMETHODCALLTYPE GetParent(REFIID riid, void **ppParent)
|
||||
{
|
||||
return m_pDevice->QueryInterface(riid, ppParent);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIDeviceSubObject
|
||||
|
||||
// same as GetParent
|
||||
HRESULT STDMETHODCALLTYPE GetDevice(REFIID riid, void **ppDevice)
|
||||
{
|
||||
return m_pDevice->QueryInterface(riid, ppDevice);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIKeyedMutex
|
||||
HRESULT STDMETHODCALLTYPE AcquireSync(UINT64 Key, DWORD dwMilliseconds)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIKeyedMutex *mutex = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIKeyedMutex), (void **)&mutex);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(mutex);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = mutex->AcquireSync(Key, dwMilliseconds);
|
||||
SAFE_RELEASE(mutex);
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE ReleaseSync(UINT64 Key)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIKeyedMutex *mutex = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIKeyedMutex), (void **)&mutex);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(mutex);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = mutex->ReleaseSync(Key);
|
||||
SAFE_RELEASE(mutex);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIResource
|
||||
virtual HRESULT STDMETHODCALLTYPE GetSharedHandle(HANDLE *pSharedHandle)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->GetSharedHandle(pSharedHandle);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetUsage(DXGI_USAGE *pUsage)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->GetUsage(pUsage);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->SetEvictionPriority(EvictionPriority);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetEvictionPriority(UINT *pEvictionPriority)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->GetEvictionPriority(pEvictionPriority);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGISurface
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDesc(DXGI_SURFACE_DESC *pDesc)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->GetDesc(pDesc);
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Map(DXGI_MAPPED_RECT *pLockedRect, UINT MapFlags)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->Map(pLockedRect, MapFlags);
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Unmap(void)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->Unmap();
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGISurface1
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDC(BOOL Discard, HDC *phdc)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface1 *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface1), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->GetDC(Discard, phdc);
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE ReleaseDC(RECT *pDirtyRect)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface1 *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface1), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->ReleaseDC(pDirtyRect);
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIResource1
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateSubresourceSurface(UINT index, IDXGISurface2 **ppSurface)
|
||||
{
|
||||
if(ppSurface == NULL)
|
||||
return E_INVALIDARG;
|
||||
|
||||
// maybe this will work?!?
|
||||
AddRef();
|
||||
*ppSurface = (IDXGISurface2 *)this;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateSharedHandle(const SECURITY_ATTRIBUTES *pAttributes,
|
||||
DWORD dwAccess, LPCWSTR lpName,
|
||||
HANDLE *pHandle)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource1 *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource1), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->CreateSharedHandle(pAttributes, dwAccess, lpName, pHandle);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGISurface2
|
||||
virtual HRESULT STDMETHODCALLTYPE GetResource(REFIID riid, void **ppParentResource,
|
||||
UINT *pSubresourceIndex)
|
||||
{
|
||||
// not really sure how to implement this :(.
|
||||
if(pSubresourceIndex)
|
||||
pSubresourceIndex = 0;
|
||||
return QueryInterface(riid, ppParentResource);
|
||||
}
|
||||
};
|
||||
|
||||
extern const GUID RENDERDOC_ID3D11ShaderGUID_ShaderDebugMagicValue;
|
||||
|
||||
template <typename NestedType, typename NestedType1 = NestedType, typename NestedType2 = NestedType1>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,60 @@
|
||||
/******************************************************************************
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2016 Baldur Karlsson
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "api/replay/renderdoc_replay.h"
|
||||
#include "driver/dx/official/d3dcommon.h"
|
||||
#include "driver/dx/official/dxgi1_5.h"
|
||||
|
||||
ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt);
|
||||
DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt);
|
||||
|
||||
UINT GetByteSize(int Width, int Height, int Depth, DXGI_FORMAT Format, int mip);
|
||||
|
||||
// returns block size for block-compressed formats
|
||||
UINT GetFormatBPP(DXGI_FORMAT f);
|
||||
|
||||
DXGI_FORMAT GetTypelessFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetTypedFormat(DXGI_FORMAT f, FormatComponentType hint);
|
||||
DXGI_FORMAT GetDepthTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetFloatTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetUnormTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetSnormTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetUIntTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetSIntTypedFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetSRGBFormat(DXGI_FORMAT f);
|
||||
DXGI_FORMAT GetNonSRGBFormat(DXGI_FORMAT f);
|
||||
bool IsBlockFormat(DXGI_FORMAT f);
|
||||
bool IsDepthFormat(DXGI_FORMAT f);
|
||||
|
||||
bool IsUIntFormat(DXGI_FORMAT f);
|
||||
bool IsTypelessFormat(DXGI_FORMAT f);
|
||||
bool IsIntFormat(DXGI_FORMAT f);
|
||||
bool IsSRGBFormat(DXGI_FORMAT f);
|
||||
|
||||
// not technically DXGI, but makes more sense to have it here common between D3D versions
|
||||
PrimitiveTopology MakePrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY Topo);
|
||||
D3D_PRIMITIVE_TOPOLOGY MakeD3DPrimitiveTopology(PrimitiveTopology Topo);
|
||||
@@ -155,8 +155,11 @@ class WrappedIDXGISwapChain3;
|
||||
|
||||
struct ID3DDevice
|
||||
{
|
||||
// re-use IUnknown
|
||||
virtual ULONG STDMETHODCALLTYPE AddRef() = 0;
|
||||
virtual ULONG STDMETHODCALLTYPE Release() = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject) = 0;
|
||||
|
||||
virtual IUnknown *GetRealIUnknown() = 0;
|
||||
|
||||
virtual IID GetBackbufferUUID() = 0;
|
||||
@@ -177,6 +180,365 @@ struct ID3DDevice
|
||||
|
||||
typedef ID3DDevice *(*D3DDeviceCallback)(IUnknown *dev);
|
||||
|
||||
template <typename NestedType>
|
||||
class WrappedDXGIInterface : public RefCountDXGIObject,
|
||||
public IDXGIKeyedMutex,
|
||||
public IDXGISurface2,
|
||||
public IDXGIResource1
|
||||
{
|
||||
public:
|
||||
ID3DDevice *m_pDevice;
|
||||
NestedType *m_pWrapped;
|
||||
|
||||
WrappedDXGIInterface(NestedType *wrapped, ID3DDevice *device)
|
||||
: RefCountDXGIObject(NULL), m_pDevice(device), m_pWrapped(wrapped)
|
||||
{
|
||||
m_pWrapped->AddRef();
|
||||
m_pDevice->AddRef();
|
||||
}
|
||||
|
||||
virtual ~WrappedDXGIInterface()
|
||||
{
|
||||
m_pWrapped->Release();
|
||||
m_pDevice->Release();
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IUnknown
|
||||
ULONG STDMETHODCALLTYPE AddRef() { return RefCountDXGIObject::AddRef(); }
|
||||
ULONG STDMETHODCALLTYPE Release() { return RefCountDXGIObject::Release(); }
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
|
||||
{
|
||||
// ensure the real object has this interface
|
||||
void *outObj;
|
||||
HRESULT hr = m_pWrapped->QueryInterface(riid, &outObj);
|
||||
|
||||
IUnknown *unk = (IUnknown *)outObj;
|
||||
SAFE_RELEASE(unk);
|
||||
|
||||
if(FAILED(hr))
|
||||
{
|
||||
return hr;
|
||||
}
|
||||
|
||||
if(riid == __uuidof(IUnknown))
|
||||
{
|
||||
*ppvObject = (IUnknown *)(IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIObject))
|
||||
{
|
||||
*ppvObject = (IDXGIObject *)(IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIDeviceSubObject))
|
||||
{
|
||||
*ppvObject = (IDXGIDeviceSubObject *)(IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIResource))
|
||||
{
|
||||
*ppvObject = (IDXGIResource *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIKeyedMutex))
|
||||
{
|
||||
*ppvObject = (IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGISurface))
|
||||
{
|
||||
*ppvObject = (IDXGISurface *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGISurface1))
|
||||
{
|
||||
*ppvObject = (IDXGISurface1 *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIResource1))
|
||||
{
|
||||
*ppvObject = (IDXGIResource1 *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGISurface2))
|
||||
{
|
||||
*ppvObject = (IDXGISurface2 *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return m_pWrapped->QueryInterface(riid, ppvObject);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIObject
|
||||
HRESULT STDMETHODCALLTYPE SetPrivateData(REFGUID Name, UINT DataSize, const void *pData)
|
||||
{
|
||||
return m_pWrapped->SetPrivateData(Name, DataSize, pData);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE SetPrivateDataInterface(REFGUID Name, const IUnknown *pUnknown)
|
||||
{
|
||||
return m_pWrapped->SetPrivateDataInterface(Name, pUnknown);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE GetPrivateData(REFGUID Name, UINT *pDataSize, void *pData)
|
||||
{
|
||||
return m_pWrapped->GetPrivateData(Name, pDataSize, pData);
|
||||
}
|
||||
|
||||
// this should only be called for adapters, devices, factories etc
|
||||
// so we pass it onto the device
|
||||
HRESULT STDMETHODCALLTYPE GetParent(REFIID riid, void **ppParent)
|
||||
{
|
||||
return m_pDevice->QueryInterface(riid, ppParent);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIDeviceSubObject
|
||||
|
||||
// same as GetParent
|
||||
HRESULT STDMETHODCALLTYPE GetDevice(REFIID riid, void **ppDevice)
|
||||
{
|
||||
return m_pDevice->QueryInterface(riid, ppDevice);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIKeyedMutex
|
||||
HRESULT STDMETHODCALLTYPE AcquireSync(UINT64 Key, DWORD dwMilliseconds)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIKeyedMutex *mutex = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIKeyedMutex), (void **)&mutex);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(mutex);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = mutex->AcquireSync(Key, dwMilliseconds);
|
||||
SAFE_RELEASE(mutex);
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE ReleaseSync(UINT64 Key)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIKeyedMutex *mutex = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIKeyedMutex), (void **)&mutex);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(mutex);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = mutex->ReleaseSync(Key);
|
||||
SAFE_RELEASE(mutex);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIResource
|
||||
virtual HRESULT STDMETHODCALLTYPE GetSharedHandle(HANDLE *pSharedHandle)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->GetSharedHandle(pSharedHandle);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetUsage(DXGI_USAGE *pUsage)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->GetUsage(pUsage);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetEvictionPriority(UINT EvictionPriority)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->SetEvictionPriority(EvictionPriority);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetEvictionPriority(UINT *pEvictionPriority)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->GetEvictionPriority(pEvictionPriority);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGISurface
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDesc(DXGI_SURFACE_DESC *pDesc)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->GetDesc(pDesc);
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Map(DXGI_MAPPED_RECT *pLockedRect, UINT MapFlags)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->Map(pLockedRect, MapFlags);
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Unmap(void)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->Unmap();
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGISurface1
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDC(BOOL Discard, HDC *phdc)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface1 *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface1), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->GetDC(Discard, phdc);
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE ReleaseDC(RECT *pDirtyRect)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGISurface1 *surf = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGISurface1), (void **)&surf);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = surf->ReleaseDC(pDirtyRect);
|
||||
SAFE_RELEASE(surf);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGIResource1
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateSubresourceSurface(UINT index, IDXGISurface2 **ppSurface)
|
||||
{
|
||||
if(ppSurface == NULL)
|
||||
return E_INVALIDARG;
|
||||
|
||||
// maybe this will work?!?
|
||||
AddRef();
|
||||
*ppSurface = (IDXGISurface2 *)this;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateSharedHandle(const SECURITY_ATTRIBUTES *pAttributes,
|
||||
DWORD dwAccess, LPCWSTR lpName,
|
||||
HANDLE *pHandle)
|
||||
{
|
||||
// temporarily get the real interface
|
||||
IDXGIResource1 *res = NULL;
|
||||
HRESULT hr = m_pWrapped->GetReal()->QueryInterface(__uuidof(IDXGIResource1), (void **)&res);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = res->CreateSharedHandle(pAttributes, dwAccess, lpName, pHandle);
|
||||
SAFE_RELEASE(res);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Implement IDXGISurface2
|
||||
virtual HRESULT STDMETHODCALLTYPE GetResource(REFIID riid, void **ppParentResource,
|
||||
UINT *pSubresourceIndex)
|
||||
{
|
||||
// not really sure how to implement this :(.
|
||||
if(pSubresourceIndex)
|
||||
pSubresourceIndex = 0;
|
||||
return QueryInterface(riid, ppParentResource);
|
||||
}
|
||||
};
|
||||
|
||||
class WrappedIDXGISwapChain3 : public IDXGISwapChain3, public RefCountDXGIObject
|
||||
{
|
||||
IDXGISwapChain *m_pReal;
|
||||
|
||||
@@ -184,6 +184,7 @@
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="dxgi_common.cpp" />
|
||||
<ClCompile Include="dxgi_hooks.cpp" />
|
||||
<ClCompile Include="dxgi_wrapped.cpp" />
|
||||
</ItemGroup>
|
||||
@@ -195,6 +196,7 @@
|
||||
<ClInclude Include="..\dx\official\dxgi1_5.h" />
|
||||
<ClInclude Include="..\dx\official\dxgiformat.h" />
|
||||
<ClInclude Include="..\dx\official\dxgitype.h" />
|
||||
<ClInclude Include="dxgi_common.h" />
|
||||
<ClInclude Include="dxgi_wrapped.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="dxgi_wrapped.cpp" />
|
||||
<ClCompile Include="dxgi_hooks.cpp" />
|
||||
<ClCompile Include="dxgi_hooks.cpp">
|
||||
<Filter>Hooks</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="dxgi_wrapped.cpp">
|
||||
<Filter>Wrapped</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="dxgi_common.cpp">
|
||||
<Filter>Util</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="dxgi_wrapped.h" />
|
||||
<ClInclude Include="..\dx\official\dxgi.h">
|
||||
<Filter>official</Filter>
|
||||
</ClInclude>
|
||||
@@ -27,10 +33,25 @@
|
||||
<ClInclude Include="..\dx\official\dxgitype.h">
|
||||
<Filter>official</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="dxgi_wrapped.h">
|
||||
<Filter>Wrapped</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="dxgi_common.h">
|
||||
<Filter>Util</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="official">
|
||||
<UniqueIdentifier>{285b6e05-2a6b-4161-9d67-e24933eebb28}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Util">
|
||||
<UniqueIdentifier>{3f3ebf0f-cc7d-47c0-b114-a519e439e6fb}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Hooks">
|
||||
<UniqueIdentifier>{d6e37369-52fe-45c1-b4c4-9f97a0886fde}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Wrapped">
|
||||
<UniqueIdentifier>{846e54d9-08da-4d5a-aac1-250f6be13e33}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
Reference in New Issue
Block a user