首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用象素着色器在无人机上写入

用象素着色器在无人机上写入
EN

Stack Overflow用户
提问于 2014-04-03 13:55:39
回答 1查看 8.5K关注 0票数 1

我在像素着色器中用UAV的纹理做了一些实验,在上面写了一些值,但当我再次绑定与SRV相同的纹理时,我并没有看到它在下一次绘图调用中的效果。

示例着色器:

代码语言:javascript
运行
复制
RWTexture2D<unsigned int> uav;
Texture2D tex : register(t0);

// Vertex Shader
float4 VS( float4 Pos : POSITION ) : SV_POSITION
{
      return Pos;
}

// Pixel Shader, draw1 warm up 
float4 PS( float4 Pos : SV_POSITION ) : SV_Target
{
     return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1
}

// Pixel Shader, we are writing onto the texture by binding it as an UAV, draw2
float4 PS1( float4 Pos : SV_POSITION ) : SV_Target
{
     if((Pos.x %2) && (Pos.y %2))
     {
            uav[Pos.xy]=0xFF000000; //some color
     }
     else
     {
            uav[Pos.xy]=0x00FF0000; //some color
     }

     return float4( 1.0f, 0.0f, 0.0f, 1.0f );
}

// Pixel Shader, here we are accessing texture as an SRV, draw3
float4 PS2( float4 Pos : SV_POSITION ) : SV_Target
{
       float4 x = tex[Pos.xy];
       return x;   
}

如果需要的话,我可以提供应用程序源代码。

EN

Stack Overflow用户

回答已采纳

发布于 2014-04-04 05:49:53

我启用了调试层。这是无人机格式不匹配的错误。在UAV描述中,我将R8G8B8A8_UNORM声明为格式,并在着色器中以UINT的形式访问元素。

description:D3D11错误:ID3D11DeviceContext::D3D11DeviceContext::D3D11DeviceContext::DID3D11DeviceContext::D3D11DeviceContext::D3D11DeviceContext::如果着色器实际使用视图执行错误#2097372: DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH,则此不匹配无效。

代码语言:javascript
运行
复制
Source code: 

        D3D11_UNORDERED_ACCESS_VIEW_DESC UAVdesc;
        ZeroMemory( &SRVdesc, sizeof(SRVdesc));
        UAVdesc.Format=DXGI_FORMAT_R8G8B8A8_UNORM;
        UAVdesc.ViewDimension=D3D11_UAV_DIMENSION_TEXTURE2D;
        UAVdesc.Texture2D.MipSlice=0;
        g_pd3dDevice->CreateUnorderedAccessView( g_pTexture, &UAVdesc, &g_pUAV);


Texture created : 

    D3D11_TEXTURE2D_DESC TextureData;
    ZeroMemory( &TextureData, sizeof(TextureData) );
    TextureData.ArraySize=1;
    TextureData.Height=height;
    TextureData.Width=width;
    TextureData.Format=DXGI_FORMAT_R8G8B8A8_TYPELESS;
    TextureData.CPUAccessFlags=0;
    TextureData.BindFlags=D3D11_BIND_SHADER_RESOURCE|D3D11_BIND_RENDER_TARGET|D3D11_BIND_UNORDERED_ACCESS;
    TextureData.MipLevels=1;
    TextureData.MiscFlags=0;
    TextureData.SampleDesc.Count=1;
    TextureData.SampleDesc.Quality=0;
    TextureData.Usage=D3D11_USAGE_DEFAULT;


    D3D11_SUBRESOURCE_DATA InitialData;
    ZeroMemory( &InitialData, sizeof(InitialData));
    InitialData.pSysMem=pData;
    InitialData.SysMemPitch=width * sizeof(UINT);
    InitialData.SysMemSlicePitch=width * sizeof(UINT) * height;
    g_pd3dDevice->CreateTexture2D( &TextureData, &InitialData, &g_pTexture);

Shader code is already given above. 

Fix:    
        D3D11_UNORDERED_ACCESS_VIEW_DESC UAVdesc;
        ZeroMemory( &SRVdesc, sizeof(SRVdesc));
        **UAVdesc.Format=DXGI_FORMAT_R32_UINT;**
        UAVdesc.ViewDimension=D3D11_UAV_DIMENSION_TEXTURE2D;
        UAVdesc.Texture2D.MipSlice=0;
        g_pd3dDevice->CreateUnorderedAccessView( g_pTexture, &UAVdesc, &g_pUAV); 

通过在暂存资源中转储纹理来确认。谢谢你们。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22839957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档