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 "createBuffer.h" 3 4#define CHECK (hr ) { const HRESULT __hr = ( hr ); if( FAILED( __hr ) ) return __hr; } 5 6HRESULT DirectCompute ::createBuffer (eBufferUse use ,size_t totalBytes ,ID3D11Buffer ** ppGpuBuffer ,const void * rsi ,ID3D11Buffer ** ppStagingBuffer ) 7{ 8if (totalBytes > INT_MAX ) 9return DISP_E_OVERFLOW ; 10if (nullptr == ppGpuBuffer ) 11return E_POINTER ; 12 13CD3D11_BUFFER_DESC bufferDesc { (UINT )totalBytes ,D3D11_BIND_SHADER_RESOURCE }; 14switch (use ) 15 { 16case eBufferUse::Immutable : 17if (nullptr == rsi ) 18return E_INVALIDARG ; 19bufferDesc .Usage = D3D11_USAGE_IMMUTABLE ; 20break ; 21case eBufferUse::ReadWrite : 22case eBufferUse::ReadWriteDownload : 23bufferDesc .BindFlags |=D3D11_BIND_UNORDERED_ACCESS ; 24break ; 25case eBufferUse::Dynamic : 26bufferDesc .Usage = D3D11_USAGE_DYNAMIC ; 27bufferDesc .CPUAccessFlags = D3D11_CPU_ACCESS_WRITE ; 28break ; 29 } 30 31D3D11_SUBRESOURCE_DATA srd ; 32D3D11_SUBRESOURCE_DATA * pSrd = nullptr ; 33if (nullptr != rsi ) 34 { 35srd .pSysMem = rsi ; 36srd .SysMemPitch = srd .SysMemSlicePitch = 0 ; 37pSrd = & srd ; 38 } 39 40CHECK (device ()-> CreateBuffer (& bufferDesc ,pSrd ,ppGpuBuffer ) ); 41 42if (nullptr != ppStagingBuffer && use == eBufferUse::ReadWriteDownload ) 43 { 44bufferDesc .Usage = D3D11_USAGE_STAGING ; 45bufferDesc .BindFlags = 0 ; 46bufferDesc .CPUAccessFlags = D3D11_CPU_ACCESS_READ ; 47CHECK (device ()-> CreateBuffer (& bufferDesc ,nullptr ,ppStagingBuffer ) ); 48 } 49 50return S_OK ; 51}