Ver Fonte

allow to print dx error messages

Nicolas Cannasse há 7 anos atrás
pai
commit
c44a5cffd3
1 ficheiros alterados com 19 adições e 35 exclusões
  1. 19 35
      libs/directx/directx.cpp

+ 19 - 35
libs/directx/directx.cpp

@@ -7,9 +7,9 @@
 #include <D3Dcompiler.h>
 
 #ifdef HL_DEBUG
-#	define DXERR()	hl_error_msg(USTR("DXERROR line %d"),__LINE__)
+#	define DXERR(cmd)	{ HRESULT __ret = cmd; if( __ret != S_OK ) hl_error_msg(USTR("DXERROR %X line %d"),(DWORD)__ret,__LINE__); }
 #else
-#	define DXERR()	return NULL;
+#	define DXERR(cmd)	if( (cmd) != S_OK ) return NULL;
 #endif
 
 typedef struct {
@@ -58,8 +58,8 @@ HL_PRIM dx_driver *HL_NAME(create)( HWND window, int format, int flags, int rest
 	result = D3D11CreateDevice(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,flags,levels + restrictLevel,maxLevels - restrictLevel,D3D11_SDK_VERSION,&d->device,&d->feature,&d->context);
 	if( result == E_INVALIDARG ) // most likely no DX11.1 support, try again
 		result = D3D11CreateDevice(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,flags,NULL,0,D3D11_SDK_VERSION,&d->device,&d->feature,&d->context);
-	if( result != S_OK )
-		return NULL;
+
+	DXERR(result);
 
 	// create the SwapChain
 	DXGI_SWAP_CHAIN_DESC desc;
@@ -74,17 +74,14 @@ HL_PRIM dx_driver *HL_NAME(create)( HWND window, int format, int flags, int rest
 	desc.BufferCount = 1;
 	desc.Windowed = true;
 	desc.OutputWindow = window;
-	if( GetDXGI()->CreateSwapChain(d->device,&desc,&d->swapchain) != S_OK )
-		DXERR();
-
+	DXERR( GetDXGI()->CreateSwapChain(d->device,&desc,&d->swapchain) );
 	driver = d;
 	return d;
 }
 
 HL_PRIM dx_resource *HL_NAME(get_back_buffer)() {
 	ID3D11Texture2D *backBuffer;
-	if( driver->swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBuffer) != S_OK )
-		DXERR();
+	DXERR( driver->swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBuffer) );
 	return backBuffer;
 }
 
@@ -94,8 +91,7 @@ HL_PRIM bool HL_NAME(resize)( int width, int height, int format ) {
 
 HL_PRIM dx_pointer *HL_NAME(create_render_target_view)( dx_resource *r, dx_struct<D3D11_RENDER_TARGET_VIEW_DESC> *desc ) {
 	ID3D11RenderTargetView *rt;
-	if( driver->device->CreateRenderTargetView(r, desc ? &desc->value : NULL, &rt) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateRenderTargetView(r, desc ? &desc->value : NULL, &rt) );
 	return rt;
 }
 
@@ -105,8 +101,7 @@ HL_PRIM void HL_NAME(om_set_render_targets)( int count, dx_pointer **arr, dx_poi
 
 HL_PRIM dx_pointer *HL_NAME(create_rasterizer_state)( dx_struct<D3D11_RASTERIZER_DESC> *desc ) {
 	ID3D11RasterizerState *rs;
-	if( driver->device->CreateRasterizerState(&desc->value,&rs) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateRasterizerState(&desc->value,&rs) );
 	return rs;
 }
 
@@ -164,8 +159,7 @@ HL_PRIM dx_resource *HL_NAME(create_buffer)( int size, int usage, int bind, int
 	res.SysMemSlicePitch = 0;
 	if( size == 0 )
 		return NULL;
-	if( driver->device->CreateBuffer(&desc,data?&res:NULL,&buffer) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateBuffer(&desc,data?&res:NULL,&buffer) );
 	return buffer;
 }
 
@@ -175,8 +169,7 @@ HL_PRIM dx_resource *HL_NAME(create_texture_2d)( dx_struct<D3D11_TEXTURE2D_DESC>
 	res.pSysMem = data;
 	res.SysMemPitch = 0;
 	res.SysMemSlicePitch = 0;
-	if( driver->device->CreateTexture2D(&desc->value,data?&res:NULL,&tex) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateTexture2D(&desc->value,data?&res:NULL,&tex) );
 	return tex;
 }
 
@@ -190,8 +183,7 @@ HL_PRIM void HL_NAME(copy_subresource_region)( dx_resource *r, int index, int dx
 
 HL_PRIM void *HL_NAME(map)( dx_resource *r, int subRes, int type, bool waitGpu, int *pitch ) {
 	D3D11_MAPPED_SUBRESOURCE map;
-	if( driver->context->Map(r,subRes,(D3D11_MAP)type,waitGpu?0:D3D11_MAP_FLAG_DO_NOT_WAIT,&map) != S_OK )
-		DXERR();
+	DXERR( driver->context->Map(r,subRes,(D3D11_MAP)type,waitGpu?0:D3D11_MAP_FLAG_DO_NOT_WAIT,&map) );
 	if( pitch )
 		*pitch = map.RowPitch;
 	return map.pData;
@@ -232,15 +224,13 @@ HL_PRIM vbyte *HL_NAME(disassemble_shader)( vbyte *data, int dataSize, int flags
 
 HL_PRIM dx_pointer *HL_NAME(create_vertex_shader)( vbyte *code, int size ) {
 	ID3D11VertexShader *shader;
-	if( driver->device->CreateVertexShader(code, size, NULL, &shader) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateVertexShader(code, size, NULL, &shader) );
 	return shader;
 }
 
 HL_PRIM dx_pointer *HL_NAME(create_pixel_shader)( vbyte *code, int size ) {
 	ID3D11PixelShader *shader;
-	if( driver->device->CreatePixelShader(code, size, NULL, &shader) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreatePixelShader(code, size, NULL, &shader) );
 	return shader;
 }
 
@@ -295,8 +285,7 @@ HL_PRIM dx_pointer *HL_NAME(create_input_layout)( varray *arr, vbyte *bytecode,
 	if( arr->size > 32 ) return NULL;
 	for(i=0;i<arr->size;i++)
 		desc[i] = hl_aptr(arr,dx_struct<D3D11_INPUT_ELEMENT_DESC>*)[i]->value;
-	if( driver->device->CreateInputLayout(desc,arr->size,bytecode,bytecodeLength,&input) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateInputLayout(desc,arr->size,bytecode,bytecodeLength,&input) );
 	return input;
 }
 
@@ -306,15 +295,13 @@ HL_PRIM dx_pointer *HL_NAME(create_depth_stencil_view)( dx_resource *tex, int fo
 	ZeroMemory(&desc, sizeof(desc));
 	desc.Format = (DXGI_FORMAT)format;
 	desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
-	if( driver->device->CreateDepthStencilView(tex,&desc,&view) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateDepthStencilView(tex,&desc,&view) );
 	return view;
 }
 
 HL_PRIM dx_pointer *HL_NAME(create_depth_stencil_state)( dx_struct<D3D11_DEPTH_STENCIL_DESC> *desc ) {
 	ID3D11DepthStencilState *state;
-	if( driver->device->CreateDepthStencilState(&desc->value,&state) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateDepthStencilState(&desc->value,&state) );
 	return state;
 }
 
@@ -339,22 +326,19 @@ HL_PRIM dx_pointer *HL_NAME(create_blend_state)( bool alphaToCoverage, bool inde
 	desc.IndependentBlendEnable = independentBlend;
 	for(i=0;i<count;i++)
 		desc.RenderTarget[i] = hl_aptr(arr,dx_struct<D3D11_RENDER_TARGET_BLEND_DESC>*)[i]->value;
-	if( driver->device->CreateBlendState(&desc,&s) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateBlendState(&desc,&s) );
 	return s;
 }
 
 HL_PRIM dx_pointer *HL_NAME(create_sampler_state)( dx_struct<D3D11_SAMPLER_DESC> *desc ) {
 	ID3D11SamplerState *s;
-	if( driver->device->CreateSamplerState(&desc->value,&s) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateSamplerState(&desc->value,&s) );
 	return s;
 }
 
 HL_PRIM dx_pointer *HL_NAME(create_shader_resource_view)( dx_resource *res, dx_struct<D3D11_SHADER_RESOURCE_VIEW_DESC> *desc ) {
 	ID3D11ShaderResourceView *view;
-	if( driver->device->CreateShaderResourceView(res,&desc->value,&view) != S_OK )
-		DXERR();
+	DXERR( driver->device->CreateShaderResourceView(res,&desc->value,&view) );
 	return view;
 }