yum-archive/TaSTT-Whisper
High-performance GPGPU inference of OpenAI's Whisper automatic speech recognition (ASR) model
git clone https://git.yummers.dev/yum-archive/TaSTT-Whisper
8c4603c
master
1#include "stdafx.h" 2#include "downloadBuffer.h" 3#include "device.h" 4#include "MappedResource.h" 5 6namespace 7{ 8struct BufferInfo 9 { 10D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc ; 11D3D11_BUFFER_DESC bufferDesc ; 12CComPtr < ID3D11Buffer > source ; 13 14HRESULT create (ID3D11ShaderResourceView * srv ) 15 { 16srv -> GetDesc (& viewDesc ); 17if (viewDesc .ViewDimension != D3D_SRV_DIMENSION_BUFFER ) 18return E_INVALIDARG ; 19 20CComPtr < ID3D11Resource > res ; 21srv -> GetResource (& res ); 22CHECK (res .QueryInterface (& source ) ); 23 24source -> GetDesc (& bufferDesc ); 25return S_OK ; 26 } 27 28HRESULT download (void * rdi ) 29 { 30bufferDesc .BindFlags = 0 ; 31bufferDesc .CPUAccessFlags = D3D11_CPU_ACCESS_READ ; 32bufferDesc .Usage = D3D11_USAGE_STAGING ; 33CComPtr < ID3D11Buffer > staging ; 34using namespace DirectCompute ; 35CHECK (device ()-> CreateBuffer (& bufferDesc ,nullptr ,& staging ) ); 36 37context ()-> CopyResource (staging ,source ); 38 39MappedResource mapped ; 40mapped .map (staging , true ); 41memcpy (rdi ,mapped .data (),bufferDesc .ByteWidth ); 42return S_OK ; 43 } 44 }; 45 46size_t dxgiSizeof (DXGI_FORMAT fmt ) 47 { 48switch (fmt ) 49 { 50case DXGI_FORMAT_R16_FLOAT :return 2 ; 51case DXGI_FORMAT_R32_FLOAT :return 4 ; 52 } 53return 0 ; 54 } 55} 56 57template < class E > 58HRESULT DirectCompute ::downloadBuffer (ID3D11ShaderResourceView * srv , std::vector < E >& vec ) 59{ 60BufferInfo bi ; 61CHECK (bi .create (srv ) ); 62 63const size_t cb = dxgiSizeof (bi .viewDesc .Format ); 64if (cb != sizeof (E ) ) 65return E_INVALIDARG ; 66 67vec .resize (bi .bufferDesc .ByteWidth /cb ); 68return bi .download (vec .data () ); 69} 70 71template HRESULT DirectCompute ::downloadBuffer (ID3D11ShaderResourceView * srv , std::vector < uint16_t >& vec ); 72template HRESULT DirectCompute ::downloadBuffer (ID3D11ShaderResourceView * srv , std::vector < float >& vec );