OpenGL: add support for GL_ANGLE_base_vertex_base_instance.
Change-Id: Ib327cb2e66bd5f02cce9c5321207483e16b40a40 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/121500 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Stephen White <senorblanco@chromium.org>
This commit is contained in:
parent
70e45a4263
commit
25e1f12228
|
@ -240,6 +240,10 @@ class OpenGLLoaderGenerator(Generator):
|
||||||
required=True,
|
required=True,
|
||||||
type=str,
|
type=str,
|
||||||
help='The Khronos gl.xml to use.')
|
help='The Khronos gl.xml to use.')
|
||||||
|
parser.add_argument('--gl-angle-ext-xml',
|
||||||
|
required=True,
|
||||||
|
type=str,
|
||||||
|
help='The ANGLE gl_angle_ext.xml to use.')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--supported-extensions',
|
'--supported-extensions',
|
||||||
required=True,
|
required=True,
|
||||||
|
@ -250,14 +254,24 @@ class OpenGLLoaderGenerator(Generator):
|
||||||
|
|
||||||
def get_file_renders(self, args):
|
def get_file_renders(self, args):
|
||||||
supported_extensions = []
|
supported_extensions = []
|
||||||
|
supported_angle_extensions = []
|
||||||
with open(args.supported_extensions) as f:
|
with open(args.supported_extensions) as f:
|
||||||
supported_extensions_json = json.loads(f.read())
|
supported_extensions_json = json.loads(f.read())
|
||||||
supported_extensions = supported_extensions_json[
|
supported_extensions = supported_extensions_json[
|
||||||
'supported_extensions']
|
'supported_extensions']
|
||||||
|
supported_angle_extensions = supported_extensions_json[
|
||||||
|
'supported_angle_extensions']
|
||||||
|
|
||||||
params = compute_params(
|
params = compute_params(
|
||||||
etree.parse(args.gl_xml).getroot(), supported_extensions)
|
etree.parse(args.gl_xml).getroot(), supported_extensions)
|
||||||
|
|
||||||
|
angle_params = compute_params(
|
||||||
|
etree.parse(args.gl_angle_ext_xml).getroot(),
|
||||||
|
supported_angle_extensions)
|
||||||
|
|
||||||
|
for key, value in params.items():
|
||||||
|
params[key] += angle_params[key]
|
||||||
|
|
||||||
return [
|
return [
|
||||||
FileRender(
|
FileRender(
|
||||||
'opengl/OpenGLFunctionsBase.cpp',
|
'opengl/OpenGLFunctionsBase.cpp',
|
||||||
|
@ -274,6 +288,7 @@ class OpenGLLoaderGenerator(Generator):
|
||||||
def get_dependencies(self, args):
|
def get_dependencies(self, args):
|
||||||
return [
|
return [
|
||||||
os.path.abspath(args.gl_xml),
|
os.path.abspath(args.gl_xml),
|
||||||
|
os.path.abspath(args.gl_angle_ext_xml),
|
||||||
os.path.abspath(args.supported_extensions)
|
os.path.abspath(args.supported_extensions)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,8 @@ if (dawn_enable_opengl) {
|
||||||
args = [
|
args = [
|
||||||
"--gl-xml",
|
"--gl-xml",
|
||||||
rebase_path("${dawn_root}/third_party/khronos/gl.xml", root_build_dir),
|
rebase_path("${dawn_root}/third_party/khronos/gl.xml", root_build_dir),
|
||||||
|
"--gl-angle-ext-xml",
|
||||||
|
rebase_path("${dawn_angle_dir}/scripts/gl_angle_ext.xml", root_build_dir),
|
||||||
"--supported-extensions",
|
"--supported-extensions",
|
||||||
rebase_path("opengl/supported_extensions.json", root_build_dir),
|
rebase_path("opengl/supported_extensions.json", root_build_dir),
|
||||||
]
|
]
|
||||||
|
|
|
@ -413,6 +413,8 @@ if (DAWN_ENABLE_OPENGL)
|
||||||
PRINT_NAME "OpenGL function loader"
|
PRINT_NAME "OpenGL function loader"
|
||||||
ARGS "--gl-xml"
|
ARGS "--gl-xml"
|
||||||
"${Dawn_SOURCE_DIR}/third_party/khronos/gl.xml"
|
"${Dawn_SOURCE_DIR}/third_party/khronos/gl.xml"
|
||||||
|
"--gl-angle-ext-xml"
|
||||||
|
"${Dawn_SOURCE_DIR}/third_party/angle/scripts/gl_angle_ext.xml"
|
||||||
"--supported-extensions"
|
"--supported-extensions"
|
||||||
"${Dawn_SOURCE_DIR}/src/dawn/native/opengl/supported_extensions.json"
|
"${Dawn_SOURCE_DIR}/src/dawn/native/opengl/supported_extensions.json"
|
||||||
RESULT_VARIABLE "DAWN_NATIVE_OPENGL_AUTOGEN_SOURCES"
|
RESULT_VARIABLE "DAWN_NATIVE_OPENGL_AUTOGEN_SOURCES"
|
||||||
|
|
|
@ -194,6 +194,11 @@ void Adapter::SetupBackendDeviceToggles(TogglesState* deviceToggles) const {
|
||||||
// (gl.IsAtLeastGLES(3, 1) && gl.IsGLExtensionSupported("EXT_base_instance")) ||
|
// (gl.IsAtLeastGLES(3, 1) && gl.IsGLExtensionSupported("EXT_base_instance")) ||
|
||||||
// (gl.IsAtLeastGL(3, 1) && gl.IsGLExtensionSupported("ARB_base_instance"));
|
// (gl.IsAtLeastGL(3, 1) && gl.IsGLExtensionSupported("ARB_base_instance"));
|
||||||
|
|
||||||
|
if (gl.IsAtLeastGLES(3, 1) && gl.IsGLExtensionSupported("GL_ANGLE_base_vertex_base_instance")) {
|
||||||
|
supportsBaseVertex = true;
|
||||||
|
supportsBaseInstance = true;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(crbug.com/dawn/343): Investigate emulation.
|
// TODO(crbug.com/dawn/343): Investigate emulation.
|
||||||
deviceToggles->Default(Toggle::DisableBaseVertex, !supportsBaseVertex);
|
deviceToggles->Default(Toggle::DisableBaseVertex, !supportsBaseVertex);
|
||||||
deviceToggles->Default(Toggle::DisableBaseInstance, !supportsBaseInstance);
|
deviceToggles->Default(Toggle::DisableBaseInstance, !supportsBaseInstance);
|
||||||
|
|
|
@ -1007,7 +1007,11 @@ MaybeError CommandBuffer::ExecuteRenderPass(BeginRenderPassCmd* renderPass) {
|
||||||
vertexStateBufferBindingTracker.Apply(gl);
|
vertexStateBufferBindingTracker.Apply(gl);
|
||||||
bindGroupTracker.Apply(gl);
|
bindGroupTracker.Apply(gl);
|
||||||
|
|
||||||
if (draw->firstInstance > 0) {
|
if (gl.DrawArraysInstancedBaseInstanceANGLE) {
|
||||||
|
gl.DrawArraysInstancedBaseInstanceANGLE(
|
||||||
|
lastPipeline->GetGLPrimitiveTopology(), draw->firstVertex,
|
||||||
|
draw->vertexCount, draw->instanceCount, draw->firstInstance);
|
||||||
|
} else if (draw->firstInstance > 0) {
|
||||||
gl.DrawArraysInstancedBaseInstance(lastPipeline->GetGLPrimitiveTopology(),
|
gl.DrawArraysInstancedBaseInstance(lastPipeline->GetGLPrimitiveTopology(),
|
||||||
draw->firstVertex, draw->vertexCount,
|
draw->firstVertex, draw->vertexCount,
|
||||||
draw->instanceCount, draw->firstInstance);
|
draw->instanceCount, draw->firstInstance);
|
||||||
|
@ -1025,7 +1029,13 @@ MaybeError CommandBuffer::ExecuteRenderPass(BeginRenderPassCmd* renderPass) {
|
||||||
vertexStateBufferBindingTracker.Apply(gl);
|
vertexStateBufferBindingTracker.Apply(gl);
|
||||||
bindGroupTracker.Apply(gl);
|
bindGroupTracker.Apply(gl);
|
||||||
|
|
||||||
if (draw->firstInstance > 0) {
|
if (gl.DrawElementsInstancedBaseVertexBaseInstanceANGLE) {
|
||||||
|
gl.DrawElementsInstancedBaseVertexBaseInstanceANGLE(
|
||||||
|
lastPipeline->GetGLPrimitiveTopology(), draw->indexCount, indexBufferFormat,
|
||||||
|
reinterpret_cast<void*>(draw->firstIndex * indexFormatSize +
|
||||||
|
indexBufferBaseOffset),
|
||||||
|
draw->instanceCount, draw->baseVertex, draw->firstInstance);
|
||||||
|
} else if (draw->firstInstance > 0) {
|
||||||
gl.DrawElementsInstancedBaseVertexBaseInstance(
|
gl.DrawElementsInstancedBaseVertexBaseInstance(
|
||||||
lastPipeline->GetGLPrimitiveTopology(), draw->indexCount, indexBufferFormat,
|
lastPipeline->GetGLPrimitiveTopology(), draw->indexCount, indexBufferFormat,
|
||||||
reinterpret_cast<void*>(draw->firstIndex * indexFormatSize +
|
reinterpret_cast<void*>(draw->firstIndex * indexFormatSize +
|
||||||
|
|
|
@ -21,5 +21,9 @@
|
||||||
"GL_OES_EGL_image",
|
"GL_OES_EGL_image",
|
||||||
"GL_EXT_texture_format_BGRA8888",
|
"GL_EXT_texture_format_BGRA8888",
|
||||||
"GL_APPLE_texture_format_BGRA8888"
|
"GL_APPLE_texture_format_BGRA8888"
|
||||||
|
],
|
||||||
|
|
||||||
|
"supported_angle_extensions": [
|
||||||
|
"GL_ANGLE_base_vertex_base_instance"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue