debugging C++和DirectX12平台中的HLSL文件出现问题,但仅在调试模式下出现

ecbunoof  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(169)

我正在用C++和DirectX 12做这个项目,这个问题快把我逼疯了。问题是,在发布模式下它能工作,但在调试模式下不能。如果我用NVidia nsight运行(发布版本)它工作正常。我在添加更复杂的数据到常量缓冲区时遇到了麻烦,而没有得到奇怪的小故障(但仍然只是调试或发布模式,而不是两者).我目前在亏损.
我创建了这些HLSL文件:
在“共享.hlsli”中

#define ROOTSIG "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT),"\
"RootConstants(num32BitConstants=16,b0)"

在“VS.hlsl”中

#include "Shared.hlsli"

struct ModelViewProjection
{
    float4x4 MVP;
    
};

ConstantBuffer<ModelViewProjection> ModelViewProjectionCB : register(b0);

[RootSignature(ROOTSIG)]
float4 main(float3 pos: POSITION) : SV_POSITION {

    float4 newPosition = mul(ModelViewProjectionCB.MVP, float4(pos.x,pos.y,pos.z,1.0f));
    return newPosition;

}

这些文件在运行时使用D3 DCompileFromFile()编译,其中一些相关参数为:
D3D_COMPILE_STANDARD_FILE_INCLUDE着色器版本:“vs_5_1”标志:D3 D编译_调试|D3DCOMPILE_SKIP_OPTIMIZATION
图形循环使用:
SetGraphicsRoot 32 BitConstants()上传constantbuffer。目前它只是一个简单的IdentityMatrix。
希望有人能帮帮我
在发布模式下一切正常,但在调试模式下就不行了。如果我把“VS.hlsl”的返回值改为“return float 4(.....);“有了正确的向量数据,它在调试模式下又正常工作了,所以看起来是关于穆尔()函数的一些事情。
当我上传一个更复杂的矩阵到穆尔函数时,我也会遇到问题。

qacovj5a

qacovj5a1#

永远记得正确初始化你的矩阵和它们的所有行,这样你就不会因为错误的内存分配而得到随机错误。

相关问题