小编Svi*_*mpe的帖子

DirectX 11 - 计算着色器:写入输出资源

我刚刚开始在DirectX 11中使用Compute着色器阶段,并且在Compute着色器中写入输出资源时遇到了一些不需要的行为.我似乎只得到零作为输出,据我的理解,这意味着已在Compute着色器中执行了越界读取.(越界写入导致无操作)

创建Compute着色器组件

输入资源

首先,我创建一个ID3D11Buffer*输入数据.在创建用于输入Compute着色器阶段的SRV时,它将作为资源传递.如果输入数据永远不会改变,那么我们可以ID3D11Buffer*在创建SRV之后释放该对象,因为SRV将充当资源的句柄.

但是,我想每帧更新输入数据,所以我只是将缓冲区留给我处理以进行映射.

// Create a buffer to be bound as Compute Shader input (D3D11_BIND_SHADER_RESOURCE).
D3D11_BUFFER_DESC constantDataDesc;
constantDataDesc.Usage                  = D3D11_USAGE_DYNAMIC;
constantDataDesc.ByteWidth              = sizeof(ParticleConstantData) * NUM_PARTICLES;
constantDataDesc.BindFlags              = D3D11_BIND_SHADER_RESOURCE;
constantDataDesc.CPUAccessFlags         = D3D11_CPU_ACCESS_WRITE;
constantDataDesc.StructureByteStride    = sizeof(ParticleConstantData);
constantDataDesc.MiscFlags              = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;

hr =  device->CreateBuffer ( &constantDataDesc, 0, &mInputBuffer );
Run Code Online (Sandbox Code Playgroud)

使用新创建的缓冲区作为资源创建SRV

D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format                  = DXGI_FORMAT_UNKNOWN;
srvDesc.ViewDimension           = D3D11_SRV_DIMENSION_BUFFEREX;
srvDesc.BufferEx.FirstElement   = 0;
srvDesc.BufferEx.Flags          = 0;
srvDesc.BufferEx.NumElements    = NUM_PARTICLES;

hr = device->CreateShaderResourceView( mInputBuffer, &srvDesc, &mInputView );
Run Code Online (Sandbox Code Playgroud)

输出资源

现在我需要为Compute着色器创建一个要写入的资源.我还将创建一个系统内存版本的缓冲区来读取.我将使用ID3D11DeviceContext …

c++ hlsl directx-11 compute-shader directcompute

7
推荐指数
1
解决办法
4536
查看次数

错误X3000:着色器文件中的非法字符

我从SO粘贴了一行着色器代码,现在我的项目拒绝工作.

  • 我删除了污染的代码行.

  • 我在Unity论坛上建议使用VS,Notepad和Notepad ++从头开始多次重写着色器.

  • 我在Notepad ++中使用了十六进制编辑器视图来排除前两个字节不是0xFE 0xFF这个gamedev问题上的建议.

我真的无法想出这个.我很感激您的任何建议.

cbuffer CB_PER_FRAME : register(b0)
{
    column_major float4x4 view;
    column_major float4x4 proj;
    float4 eyePosition;
};

struct VertexInput
{
    float3 position : POSITION;
    float3 normal   : NORMAL;
    float2 texCoord : TEXCOORD;

    row_major float4x4 world : WORLD;
    float4 color : COLOR;
    uint instanceID : SV_InstanceID;
};

struct PixelInput
{
    float4 position : SV_POSITION;
    float3 normal   : NORMAL;
    float2 texCoord : TEXCOORD;
    float4 color    : COLOR;
};

PixelInput VertexShaderMain( VertexInput …
Run Code Online (Sandbox Code Playgroud)

shader character-encoding directx-11

6
推荐指数
1
解决办法
2058
查看次数

在 SIMD 操作上下文中,非压缩指令和压缩指令有什么区别?

在 SIMD 操作上下文中,非压缩指令和压缩指令有什么区别?

我正在阅读一篇关于优化 SSE 代码的文章:

http://www.cortstratton.org/articles/OptimizingForSSE.php#batch

当我读到这个问题时出现了

“作为额外的好处,movss 是一种非压缩指令,它使我们能够更好地利用并行指令解码器。”

那么区别是什么呢?

sse simd

5
推荐指数
1
解决办法
1462
查看次数

HLSL 中的 printf 函数有什么作用?

MSDN HLSL 参考对 printf 进行了说明:

“向信息队列提交自定义着色器消息。”

https://msdn.microsoft.com/en-us/library/windows/desktop/ff728755%28v=vs.85%29.aspx

什么是信息队列以及如何查看着色器消息?这是否意味着在像素着色器中使用时它会输出宽度*高度(屏幕像素)消息?

谢谢!

c++ shader hlsl

5
推荐指数
1
解决办法
2632
查看次数

无法在 Windows 10 上构建 Boost 1.60.0


我使用了Boost提供的入门指南

许多具有某种相关性质的现有问题似乎发生在 Visual Studio 中,并且是由于错误的项目设置和特别是链接造成的。

我的问题在于实际使用
VS2015开发人员命令提示符构建 Boost并以管理员身份运行它。

首先,我只是解压缩了文件夹并从根文件夹中运行了 VS2015 命令提示符

bootstrap.bat
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出

C:\Program Files (x86)\boost\boost_1_60_0>bootstrap.bat
Building Boost.Build engine

Failed to build Boost.Build engine.
Please consult bootstrap.log for further diagnostics.

You can try to obtain a prebuilt binary from

http://sf.net/project/showfiles.php?group_id=7586&package_id=72941

Also, you can file an issue at http://svn.boost.org
Please attach bootstrap.log in that case.
Run Code Online (Sandbox Code Playgroud)

根据bootstrap.log没有找到很多必需的头文件。根据Visual C++ 团队博客,标题、源代码和库现在分布在用户计算机上的不同位置。这发生在我身上!为了找到它们,我不得不移动大量的头文件和 lib 文件。

但是......我无法弄清楚如何从这一点开始。

c++ boost visual-studio-2015

4
推荐指数
1
解决办法
8970
查看次数