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

KonstantinSource codes8c4603c

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