Пример #1
0
D3D11CudaTexture< TD3D11ResourceType, TCudaType >::D3D11CudaTexture( ID3D11Device*        d3d11Device,
                                                                     ID3D11DeviceContext* d3d11DeviceContext,
                                                                     D3D11_TEXTURE2D_DESC resourceDesc,
                                                                     VolumeDescription    volumeDescription ) :
    mCudaGraphicsResource   ( NULL ),
    mD3D11Resource          ( NULL ),
    mD3D11ShaderResourceView( NULL ),
    mD3D11DeviceContext     ( d3d11DeviceContext )
{
    D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;
    ZeroMemory( &shaderResourceViewDesc, sizeof( D3D11_SHADER_RESOURCE_VIEW_DESC ) );

    shaderResourceViewDesc.Format              = resourceDesc.Format;
    shaderResourceViewDesc.ViewDimension       = D3D11_SRV_DIMENSION_TEXTURE2D;
    shaderResourceViewDesc.Texture2D.MipLevels = -1;

    MOJO_D3D_SAFE( d3d11Device->CreateTexture2D( &resourceDesc, NULL, &mD3D11Resource ) );
    MOJO_D3D_SAFE( d3d11Device->CreateShaderResourceView( mD3D11Resource, &shaderResourceViewDesc, &mD3D11ShaderResourceView ) );
    MOJO_CUDA_SAFE( cudaGraphicsD3D11RegisterResource( &mCudaGraphicsResource, mD3D11Resource, cudaGraphicsRegisterFlagsNone ) );

    mD3D11DeviceContext->UpdateSubresource(
        mD3D11Resource,
        0,
        NULL,
        volumeDescription.data,
        volumeDescription.numVoxels.x * volumeDescription.numBytesPerVoxel,
        volumeDescription.numVoxels.y * volumeDescription.numVoxels.x * volumeDescription.numBytesPerVoxel );
}
inline cudaArray* MallocArray2D< float2 >( VolumeDescription volumeDescription )
{
    cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc( 32, 32, 0, 0, cudaChannelFormatKindFloat ); 

    cudaArray* cuArray; 
    MOJO_CUDA_SAFE( cudaMallocArray( &cuArray, &channelDesc, volumeDescription.numVoxels.x, volumeDescription.numVoxels.y ) ); 

    return cuArray;
}
inline cudaArray* MallocArray3D< uchar4 >( VolumeDescription volumeDescription )
{
    cudaChannelFormatDesc channelDesc  = cudaCreateChannelDesc( 8, 8, 8, 8, cudaChannelFormatKindUnsigned ); 
    cudaExtent            volumeExtent = make_cudaExtent( volumeDescription.numVoxels.x, volumeDescription.numVoxels.y, volumeDescription.numVoxels.z );

    cudaArray* cuArray; 
    MOJO_CUDA_SAFE( cudaMalloc3DArray( &cuArray, &channelDesc, volumeExtent ) ); 

    return cuArray;
}
Пример #4
0
D3D11CudaTexture< TD3D11ResourceType, TCudaType >::D3D11CudaTexture( ID3D11Device*        d3d11Device,
                                                                     ID3D11DeviceContext* d3d11DeviceContext,
                                                                     D3D11_TEXTURE1D_DESC resourceDesc ) :
    mCudaGraphicsResource   ( NULL ),
    mD3D11Resource          ( NULL ),
    mD3D11ShaderResourceView( NULL ),
    mD3D11DeviceContext     ( d3d11DeviceContext )
{
    D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;
    ZeroMemory( &shaderResourceViewDesc, sizeof( D3D11_SHADER_RESOURCE_VIEW_DESC ) );

    shaderResourceViewDesc.Format              = resourceDesc.Format;
    shaderResourceViewDesc.ViewDimension       = D3D11_SRV_DIMENSION_TEXTURE1D;
    shaderResourceViewDesc.Texture1D.MipLevels = -1;

    MOJO_D3D_SAFE( d3d11Device->CreateTexture1D( &resourceDesc, NULL, &mD3D11Resource ) );
    MOJO_D3D_SAFE( d3d11Device->CreateShaderResourceView( mD3D11Resource, &shaderResourceViewDesc, &mD3D11ShaderResourceView ) );
    MOJO_CUDA_SAFE( cudaGraphicsD3D11RegisterResource( &mCudaGraphicsResource, mD3D11Resource, cudaGraphicsRegisterFlagsNone ) );
}