HLSLで計算シェーダを使用してテクスチャを書き込もうとしています。テクスチャのDirectX:Compute Shaderでテクスチャに書き込む
作成:UAVの
D3D11_TEXTURE2D_DESC textureDesc;
ZeroMemory(&textureDesc, sizeof(textureDesc));
textureDesc.Width = 512;
textureDesc.Height = 512;
textureDesc.MipLevels = 1;
textureDesc.ArraySize = 1;
textureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
textureDesc.SampleDesc.Count = 1;
textureDesc.SampleDesc.Quality = 0;
textureDesc.Usage = D3D11_USAGE_DEFAULT;
textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS;
textureDesc.CPUAccessFlags = 0;
textureDesc.MiscFlags = 0;
m_tex = 0;
hr = device->CreateTexture2D(&textureDesc, 0, &m_tex);
作成:
D3D11_UNORDERED_ACCESS_VIEW_DESC descUAV;
ZeroMemory(&descUAV, sizeof(descUAV));
descUAV.Format = DXGI_FORMAT_UNKNOWN;
descUAV.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D;
descUAV.Texture2D.MipSlice = 0;
hr = device->CreateUnorderedAccessView(m_tex, &descUAV, &m_uavAccess);
SRV(テクスチャを参照する)の作成: `
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = textureDesc.Format;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
srvDesc.Texture2D.MostDetailedMip = 0;
srvDesc.Texture2D.MipLevels = 1;
hr = device->CreateShaderResourceView(m_tex, &srvDesc, &m_srvTexOutput);
シェーダ。
RWTexture2D<float4> gOutput : register(u0);
[numthreads(16, 16, 1)]
void main(int3 dispatchThreadID : SV_DispatchThreadID) // Thread ID
{
gOutput[dispatchThreadID.xy] = float4(0.0f, 1.0f, 0.0f, 1.0f);
}
テクスチャが常に黒い(計算シェーダはテクスチャに書き込まない)という問題があります。
ありがとうございました! :D
あなたの 'dispatch'呼び出しはどこですか? – Ap31
deviceContext - > VSSetShader(NULL、NULL、0); deviceContext-> PSSetShader(NULL、NULL、0); deviceContext-> CSSetShader(m_computeShader、NULL、0); deviceContext-> CSSetUnorderedAccessViews(0、1、&m_uavAccess、0); deviceContext-> Dispatch(16,16,1); –
'D3D11_CREATE_DEVICE_DEBUG'を試しましたか? UAVとSRVを使用した後、UAVとSRVをアンマウントしますか? – Ap31