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

问题描述 投票:0回答:1

我正在使用 C++ 和 DirectX12 开发这个项目,这个问题让我抓狂。问题是,在发布模式下它有效,但在调试模式下无效。如果我使用 NVidia nsight(发行版)运行,它工作正常。我在向 Constant Buffer 添加更复杂的数据时遇到了麻烦而没有出现奇怪的故障(但仍然只是调试或发布模式,而不是两者)。我现在很茫然。

我构建了这些 HLSL 文件:

在“Shared.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;

}

文件在运行时使用 D3DCompileFromFile() 编译,其中一些相关参数为:

D3D_COMPILE_STANDARD_FILE_INCLUDE 着色器版本:“vs_5_1” 标志:D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION

图形循环使用:

SetGraphicsRoot32BitConstants() 上传常量缓冲区。目前它只是一个简单的 IdentityMatrix。

希望有人能帮助我

发布模式一切正常,但调试模式不正常。如果我将“VS.hlsl”的返回值更改为“return float4(.....);”使用适当的矢量数据,它在调试模式下再次正常工作,所以它似乎与 mul() 函数有关。

当我将更复杂的矩阵上传到 mul 函数时,我也遇到了问题。

c++ debugging hlsl directx-12
1个回答
0
投票

始终记住使用正确的值正确初始化矩阵及其所有行,这样您就不会由于错误的内存分配而出现随机错误。抱歉浪费您的时间!

© www.soinside.com 2019 - 2024. All rights reserved.