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; }
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 ) ); }