Пример #1
0
	/****************************************************
	 * 				DESERIALIZATION HELPERS				*
	 ****************************************************/
	static uint8_t deserialize(uint8_t* buffer, float& value){
		deserialize_float(buffer, value);
	}
AMD_AOFX_DLL_API AOFX_RETURN_CODE AOFX_DebugDeserialize(AOFX_Desc& desc,
                                                        const char*                                            params,
                                                        ID3D11Texture2D**                                      ppT2D[],
                                                        ID3D11ShaderResourceView**                             ppSRV[])
{
    AMD_OUTPUT_DEBUG_STRING("CALL: " AMD_FUNCTION_NAME " \n");

    HRESULT hr = S_OK;
    std::string strParams(params);
    std::wstring wstrParams(strParams.begin(), strParams.end());

    if (ppT2D != NULL && ppSRV != NULL &&
        ppT2D[0] != NULL && ppSRV[0] != NULL)
    {
        std::wstring depth = wstrParams + L".depth.dds";
        hr = DirectX::CreateDDSTextureFromFile(desc.m_pDevice, depth.c_str(), (ID3D11Resource**)ppT2D[0], ppSRV[0]);
        desc.m_pDepthSRV = *ppSRV[0];
    }
    if (ppT2D != NULL && ppSRV != NULL &&
        ppT2D[1] != NULL && ppSRV[1] != NULL)
    {
        std::wstring normal = wstrParams + L".normal.dds";
        hr = DirectX::CreateDDSTextureFromFile(desc.m_pDevice, normal.c_str(), (ID3D11Resource**)ppT2D[1], ppSRV[1]);
        desc.m_pNormalSRV = *ppSRV[1];
    }

    strParams += ".txt";
    FILE * file = fopen(strParams.c_str(), "rt");
    if (file != NULL)
    {
        char readStr[1024];
        uint multiResLayerCount = 0;

        deserialize_uint(file, readStr, (uint *)&multiResLayerCount);
        assert(multiResLayerCount == desc.m_MultiResLayerCount);

        for (uint i = 0; i < desc.m_MultiResLayerCount; i++)
        {
            deserialize_uint(file, readStr, (uint *)&desc.m_LayerProcess[i]);
            deserialize_uint(file, readStr, (uint *)&desc.m_BilateralBlurRadius[i]);
            deserialize_uint(file, readStr, (uint *)&desc.m_SampleCount[i]);
            deserialize_uint(file, readStr, (uint *)&desc.m_NormalOption[i]);
            deserialize_uint(file, readStr, (uint *)&desc.m_TapType[i]);
            deserialize_float(file, readStr, (float *)&desc.m_MultiResLayerScale[i]);
            deserialize_float(file, readStr, (float *)&desc.m_PowIntensity[i]);
            deserialize_float(file, readStr, (float *)&desc.m_RejectRadius[i]);
            deserialize_float(file, readStr, (float *)&desc.m_AcceptRadius[i]);
            deserialize_float(file, readStr, (float *)&desc.m_RecipFadeOutDist[i]);
            deserialize_float(file, readStr, (float *)&desc.m_LinearIntensity[i]);
            deserialize_float(file, readStr, (float *)&desc.m_NormalScale[i]);
            deserialize_float(file, readStr, (float *)&desc.m_ViewDistanceDiscard[i]);
            deserialize_float(file, readStr, (float *)&desc.m_ViewDistanceFade[i]);
            deserialize_float(file, readStr, (float *)&desc.m_DepthUpsampleThreshold[i]);
        }

        deserialize_uint(file, readStr, (uint *)&desc.m_Implementation);

        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_View.r[0]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_View.r[1]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_View.r[2]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_View.r[3]);

        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Projection.r[0]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Projection.r[1]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Projection.r[2]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Projection.r[3]);

        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_ViewProjection.r[0]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_ViewProjection.r[1]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_ViewProjection.r[2]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_ViewProjection.r[3]);

        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_View_Inv.r[0]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_View_Inv.r[1]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_View_Inv.r[2]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_View_Inv.r[3]);

        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Projection_Inv.r[0]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Projection_Inv.r[1]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Projection_Inv.r[2]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Projection_Inv.r[3]);

        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_ViewProjection_Inv.r[0]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_ViewProjection_Inv.r[1]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_ViewProjection_Inv.r[2]);
        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_ViewProjection_Inv.r[3]);

        deserialize_float3(file, readStr, (float *)&desc.m_Camera.m_Position);
        deserialize_float3(file, readStr, (float *)&desc.m_Camera.m_Direction);
        deserialize_float3(file, readStr, (float *)&desc.m_Camera.m_Right);
        deserialize_float3(file, readStr, (float *)&desc.m_Camera.m_Up);

        deserialize_float(file, readStr, (float *)&desc.m_Camera.m_Aspect);
        deserialize_float(file, readStr, (float *)&desc.m_Camera.m_FarPlane);
        deserialize_float(file, readStr, (float *)&desc.m_Camera.m_NearPlane);
        deserialize_float(file, readStr, (float *)&desc.m_Camera.m_Fov);

        deserialize_float4(file, readStr, (float *)&desc.m_Camera.m_Color);

        deserialize_uint2(file, readStr, (uint*)&desc.m_InputSize);

        deserialize_uint(file, readStr, (uint *)&desc.m_OutputChannelsFlag);

        fclose(file);
    }

    return AOFX_RETURN_CODE_SUCCESS;
}