GetBufferData
	
		
			
	
		
	
	
		
			
				
	
				continuous-integration/drone/pr Build is failing
				
					Details
				
			
		
	
				
					
				
			
				
	
				continuous-integration/drone/pr Build is failing
				
					Details
				
			
		
	
							parent
							
								
									17bc9f90eb
								
							
						
					
					
						commit
						463c298c96
					
				|  | @ -1852,7 +1852,73 @@ static void D3D11_GetBufferData( | ||||||
| 	void* data, | 	void* data, | ||||||
| 	uint32_t dataLengthInBytes | 	uint32_t dataLengthInBytes | ||||||
| ) { | ) { | ||||||
| 	NOT_IMPLEMENTED | 	D3D11Renderer *renderer = (D3D11Renderer*) driverData; | ||||||
|  | 	D3D11Buffer *d3d11Buffer = (D3D11Buffer*) buffer; | ||||||
|  | 	D3D11_BUFFER_DESC stagingBufferDesc; | ||||||
|  | 	ID3D11Resource *stagingBuffer; | ||||||
|  | 	D3D11_BOX srcBox = { 0, 0, 0, dataLengthInBytes, 1, 1 }; | ||||||
|  | 	D3D11_MAPPED_SUBRESOURCE mappedSubresource; | ||||||
|  | 	HRESULT res; | ||||||
|  | 
 | ||||||
|  | 	/* Create staging buffer */ | ||||||
|  | 	stagingBufferDesc.ByteWidth = dataLengthInBytes; | ||||||
|  | 	stagingBufferDesc.Usage = D3D11_USAGE_STAGING; | ||||||
|  | 	stagingBufferDesc.BindFlags = 0; | ||||||
|  | 	stagingBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; | ||||||
|  | 	stagingBufferDesc.MiscFlags = 0; | ||||||
|  | 	stagingBufferDesc.StructureByteStride = 0; | ||||||
|  | 
 | ||||||
|  | 	res = ID3D11Device_CreateBuffer( | ||||||
|  | 		renderer->device, | ||||||
|  | 		&stagingBufferDesc, | ||||||
|  | 		NULL, | ||||||
|  | 		(ID3D11Buffer**) &stagingBuffer | ||||||
|  | 	); | ||||||
|  | 	ERROR_CHECK_RETURN("Could not create staging buffer for readback", ); | ||||||
|  | 
 | ||||||
|  | 	/* Copy data into staging buffer */ | ||||||
|  | 	ID3D11DeviceContext_CopySubresourceRegion( | ||||||
|  | 		renderer->immediateContext, | ||||||
|  | 		stagingBuffer, | ||||||
|  | 		0, | ||||||
|  | 		0, | ||||||
|  | 		0, | ||||||
|  | 		0, | ||||||
|  | 		(ID3D11Resource*) d3d11Buffer->handle, | ||||||
|  | 		0, | ||||||
|  | 		&srcBox | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	/* Read from the staging buffer */ | ||||||
|  | 	res = ID3D11DeviceContext_Map( | ||||||
|  | 		renderer->immediateContext, | ||||||
|  | 		stagingBuffer, | ||||||
|  | 		0, | ||||||
|  | 		D3D11_MAP_READ, | ||||||
|  | 		0, | ||||||
|  | 		&mappedSubresource | ||||||
|  | 	); | ||||||
|  | 	if (FAILED(res)) | ||||||
|  | 	{ | ||||||
|  | 		D3D11_INTERNAL_LogError( | ||||||
|  | 			renderer->device, | ||||||
|  | 			"Failed to map staging buffer for read!", | ||||||
|  | 			res | ||||||
|  | 		); | ||||||
|  | 		ID3D11Buffer_Release(stagingBuffer); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	SDL_memcpy(data, mappedSubresource.pData, dataLengthInBytes); | ||||||
|  | 
 | ||||||
|  | 	ID3D11DeviceContext_Unmap( | ||||||
|  | 		renderer->immediateContext, | ||||||
|  | 		stagingBuffer, | ||||||
|  | 		0 | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	/* Clean up the staging buffer */ | ||||||
|  | 	ID3D11Resource_Release(stagingBuffer); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Uniforms */ | /* Uniforms */ | ||||||
|  | @ -3741,7 +3807,7 @@ tryCreateDevice: | ||||||
| 	Refresh_LogInfo("D3D11 Adapter: %S", adapterDesc.Description); | 	Refresh_LogInfo("D3D11 Adapter: %S", adapterDesc.Description); | ||||||
| 
 | 
 | ||||||
| 	/* Create mutexes */ | 	/* Create mutexes */ | ||||||
| 	renderer->contextLock = SDL_CreateMutex(); | 	renderer->contextLock = SDL_CreateMutex(); /* FIXME: We should be using this *everywhere* the immediate context is accessed! */ | ||||||
| 	renderer->acquireCommandBufferLock = SDL_CreateMutex(); | 	renderer->acquireCommandBufferLock = SDL_CreateMutex(); | ||||||
| 	renderer->uniformBufferLock = SDL_CreateMutex(); | 	renderer->uniformBufferLock = SDL_CreateMutex(); | ||||||
| 	renderer->fenceLock = SDL_CreateMutex(); | 	renderer->fenceLock = SDL_CreateMutex(); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue