내가 shader.Here 내 코드의 일부 픽셀에서 그것을 달성하기 위해 생각하고있다 : 첫째전체 픽셀 쉐이더 스테이지에서 컬러가 사용 된 시간을 효율적으로 계산하는 방법은 무엇입니까?
, 나는 색상 테이블로
D3D11_TEXTURE1D_DESC t1d;
t1d.Width = ModelInfo::ColorCount;
t1d.ArraySize = 1;
t1d.MipLevels = 1;
t1d.CPUAccessFlags = 0;
t1d.MiscFlags = 0;
t1d.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
t1d.Usage = D3D11_USAGE_DEFAULT;
t1d.BindFlags = D3D11_BIND_SHADER_RESOURCE;
ZeroMemory(&InitData, sizeof(InitData));
InitData.pSysMem = ModelInfo::Colors;
hr = m_D3DDevice->CreateTexture1D(&t1d, &InitData, &m_ColorTable);
if (FAILED(hr))
return hr;
D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc;
viewDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
viewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE1D;
viewDesc.Texture1D.MostDetailedMip = 0;
viewDesc.Texture1D.MipLevels = 1;
hr = m_D3DDevice->CreateShaderResourceView(m_ColorTable, &viewDesc, &m_ColorResView);
if (FAILED(hr))
return hr;
을 Texture1D를 만든 다음 나는 픽셀 쉐이더에 전달 픽셀 셰이더
m_ImmediateContext->PSSetShaderResources(0, 1, &m_ColorResView);
나는 색상이 전체 픽셀 쉐이더 단계에서 사용하는 횟수를 계산하려면이 색상 표에서 각 색상의 알파 채널을 사용하려면 ...
나는 픽셀 쉐이더에서 색상 표를 수정하려면 아래 코드와 같습니다.하지만 실행 불가능한 것 같습니다.
나는 텍스처를 렌더링하고 C++을 사용하여 CPU에서 카운트하는 대신 효율적으로 색상을 계산하는 방법을 찾고 있습니다.
내가 생각한 모든 방법은 텍스처를 렌더링해야한다고 생각하는 메소드 외에도 x ++ (gpu의 일부 병렬 문제)와 같은 작업을 수행하기가 어렵 기 때문에 CPU에서 일부 계산 작업을 수행해야한다고 생각했습니다. 두 번 속도가 느려질 수 있습니다 cpu에 그것을 바로 계산합니다.
오랫동안 파고 있습니다.하지만 사용하지 마십시오. 도움을 주거나이를 달성하는 방법을 알려주십시오.
셰이더 입력을 변경할 수있는 방법이 없습니다. 출력을 지정할 수는 있지만 사용자의 경우에는 작동하지 않습니다. 하나의 옵션은 인덱스를 특수 렌더 타겟에 렌더링 한 다음 CPU에서 인덱스를 계산하지만 오버 드로는 고려하지 않을 수도 있습니다. – Gnietschow
@ Gnietschow 나는 계산 과정을 가속화 할 수 있다고 생각하면서 지수를 계산하기 위해 GPU를 사용하려고했습니다. 어떻게 든 병렬 문제는 x ++ (변수 읽기 및 증가)와 같은 연산을 수행하는 것이 어렵다는 것을 발견했습니다. 좌절했다. (..... – BlauHimmel
픽셀 쉐이더에서 버퍼에 쓰려면 UAV를 사용해야합니다. AtomicIncrement를 사용하면 셀 수를 계산할 수 있습니다. – galop1n