Changed d3d11 desktop renderer to use d3d9 debug annotation interfaces.

The D3D11 renderer must choose the D3D9 debug annotator because the D3D11 interface
method ID3DUserDefinedAnnotation::GetStatus on desktop builds doesn't work with the Graphics
Diagnostics tools in Visual Studio 2013.
The D3D9 annotator works properly for both D3D11 and D3D9.
Incorrect status reporting can cause ANGLE to log unnecessary debug events.

Change-Id: I9a31c63cbc506904eb39577826fc4df8d503f03a
Reviewed-on: https://chromium-review.googlesource.com/278162
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cooper Partin <coopp@microsoft.com>
Tested-by: Cooper Partin <coopp@microsoft.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
This commit is contained in:
Cooper Partin 2015-06-16 15:03:14 -07:00 коммит произвёл Jamie Madill
Родитель 03786d77a6
Коммит 75da1974b9
7 изменённых файлов: 71 добавлений и 24 удалений

Просмотреть файл

@ -114,11 +114,21 @@ config("translator_static_config") {
defines = [ "ANGLE_TRANSLATOR_STATIC" ]
}
config("debug_annotations_config") {
if (is_debug) {
defines = [
"ANGLE_ENABLE_DEBUG_ANNOTATIONS",
]
}
}
static_library("angle_common") {
sources = rebase_path(gles_gypi.libangle_common_sources, ".", "src")
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [
":internal_config",
":debug_annotations_config",
"//build/config/compiler:no_chromium_code",
]
}
@ -260,13 +270,13 @@ static_library("libANGLE") {
if (is_debug) {
defines += [
"ANGLE_GENERATE_SHADER_DEBUG_INFO",
"ANGLE_ENABLE_DEBUG_ANNOTATIONS",
]
}
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [
":commit_id_config",
":debug_annotations_config",
":libANGLE_config",
":internal_config",
"//build/config/compiler:no_chromium_code",
@ -296,6 +306,7 @@ shared_library("libGLESv2") {
configs += [
":internal_config",
":commit_id_config",
":debug_annotations_config",
":libANGLE_config",
"//build/config/compiler:no_chromium_code",
]

Просмотреть файл

@ -61,6 +61,22 @@
'<(angle_path)/src',
'<(angle_path)/include',
],
'conditions':
[
['OS=="win"',
{
'configurations':
{
'Debug_Base':
{
'defines':
[
'ANGLE_ENABLE_DEBUG_ANNOTATIONS'
],
},
},
}],
],
},
'conditions':
[
@ -73,6 +89,19 @@
{
'msvs_enable_winphone' : '1',
}],
['OS=="win"',
{
'configurations':
{
'Debug_Base':
{
'defines':
[
'ANGLE_ENABLE_DEBUG_ANNOTATIONS'
],
},
},
}],
],
},

Просмотреть файл

@ -648,15 +648,15 @@ void RendererD3D::popGroupMarker()
getAnnotator()->endEvent();
}
gl::DebugAnnotator *RendererD3D::getAnnotator()
void RendererD3D::initializeDebugAnnotator()
{
if (mAnnotator == nullptr)
{
createAnnotator();
ASSERT(mAnnotator);
gl::InitializeDebugAnnotations(mAnnotator);
}
}
gl::DebugAnnotator *RendererD3D::getAnnotator()
{
ASSERT(mAnnotator);
return mAnnotator;
}

Просмотреть файл

@ -224,6 +224,7 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
egl::Display *mDisplay;
bool mDeviceLost;
void initializeDebugAnnotator();
gl::DebugAnnotator *mAnnotator;
std::vector<TranslatedAttribute> mTranslatedAttribCache;

Просмотреть файл

@ -51,6 +51,14 @@
#include "libANGLE/renderer/d3d/d3d11/dxgi_support_table.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
// Include the D3D9 debug annotator header for use by the desktop D3D11 renderer
// because the D3D11 interface method ID3DUserDefinedAnnotation::GetStatus
// doesn't work with the Graphics Diagnostics tools in Visual Studio 2013.
#ifdef ANGLE_ENABLE_D3D9
#include "libANGLE/renderer/d3d/d3d9/DebugAnnotator9.h"
#endif
#include "third_party/trace_event/trace_event.h"
// Enable ANGLE_SKIP_DXGI_1_2_CHECK if there is not a possibility of using cross-process
@ -328,6 +336,8 @@ Renderer11::Renderer11(egl::Display *display)
default:
UNREACHABLE();
}
initializeDebugAnnotator();
}
Renderer11::~Renderer11()
@ -3772,7 +3782,16 @@ void Renderer11::setShaderResource(gl::SamplerType shaderType, UINT resourceSlot
void Renderer11::createAnnotator()
{
// The D3D11 renderer must choose the D3D9 debug annotator because the D3D11 interface
// method ID3DUserDefinedAnnotation::GetStatus on desktop builds doesn't work with the Graphics
// Diagnostics tools in Visual Studio 2013.
// The D3D9 annotator works properly for both D3D11 and D3D9.
// Incorrect status reporting can cause ANGLE to log unnecessary debug events.
#ifdef ANGLE_ENABLE_D3D9
mAnnotator = new DebugAnnotator9();
#else
mAnnotator = new DebugAnnotator11();
#endif
}
gl::Error Renderer11::clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd)

Просмотреть файл

@ -131,6 +131,8 @@ Renderer9::Renderer9(egl::Display *display)
mAppliedVertexShader = NULL;
mAppliedPixelShader = NULL;
mAppliedProgramSerial = 0;
initializeDebugAnnotator();
}
Renderer9::~Renderer9()

Просмотреть файл

@ -722,27 +722,12 @@
{
'msvs_enable_winphone' : '1',
}],
['OS=="win"',
{
'configurations':
{
'Debug_Base':
{
'abstract': 1,
'defines':
[
'ANGLE_ENABLE_DEBUG_ANNOTATIONS',
'ANGLE_GENERATE_SHADER_DEBUG_INFO'
],
},
},
}],
],
},
{
'target_name': 'libGLESv2',
'type': 'shared_library',
'dependencies': [ 'libANGLE' ],
'dependencies': [ 'libANGLE', 'angle_common' ],
'includes': [ '../build/common_defines.gypi', ],
'sources':
[