[Bf-blender-cvs] [b9af19ec76f] tmp-drw-callbatching: DRW: Use ARB_shader_draw_parameters when available
Clément Foucault
noreply at git.blender.org
Sat Aug 17 14:49:17 CEST 2019
Commit: b9af19ec76f2507a12d8f950e7c2b55afb100752
Author: Clément Foucault
Date: Sat Jun 1 16:43:50 2019 +0200
Branches: tmp-drw-callbatching
https://developer.blender.org/rBb9af19ec76f2507a12d8f950e7c2b55afb100752
DRW: Use ARB_shader_draw_parameters when available
This is to pass the offset of the object data to the shader
without a uniform call.
===================================================================
M source/blender/draw/intern/draw_manager_data.c
M source/blender/draw/intern/draw_manager_exec.c
M source/blender/draw/modes/shaders/common_view_lib.glsl
M source/blender/gpu/intern/gpu_shader.c
===================================================================
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index 779092cfec9..cdd9df82bdf 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -852,7 +852,11 @@ static void drw_shgroup_init(DRWShadingGroup *shgroup, GPUShader *shader)
int view_ubo_location = GPU_shader_get_uniform_block(shader, "viewBlock");
int model_ubo_location = GPU_shader_get_uniform_block(shader, "modelBlock");
int info_ubo_location = GPU_shader_get_uniform_block(shader, "infoBlock");
- int drawid_location = GPU_shader_get_uniform_ensure(shader, "drawID");
+ int drawid_location = -1;
+
+ if (!GLEW_ARB_shader_draw_parameters) {
+ drawid_location = GPU_shader_get_uniform_ensure(shader, "drawID");
+ }
if (drawid_location != -1) {
drw_shgroup_uniform_create_ex(shgroup, drawid_location, DRW_UNIFORM_DRAWID, NULL, 0, 1);
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 567dfc5e704..e3fa95610cf 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -1000,10 +1000,14 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
}
if (drawid_loc != -1) {
+ /* Fallback when ARB_shader_draw_parameters is not supported. */
int id = handle.id;
GPU_shader_uniform_vector_int(shgroup->shader, drawid_loc, 1, 1, &id);
base_inst = 0;
}
+ else {
+ base_inst = handle.id;
+ }
if (obmats_loc == -1 || obinfos_loc == -1) {
/* TODO This is Legacy. Need to be removed. */
diff --git a/source/blender/draw/modes/shaders/common_view_lib.glsl b/source/blender/draw/modes/shaders/common_view_lib.glsl
index 307ea8931fa..e235262b572 100644
--- a/source/blender/draw/modes/shaders/common_view_lib.glsl
+++ b/source/blender/draw/modes/shaders/common_view_lib.glsl
@@ -23,7 +23,11 @@ layout(std140) uniform viewBlock
_world_clip_planes_calc_clip_distance(p, clipPlanes)
#endif
+#ifdef GL_ARB_shader_draw_parameters
+# define drawID gl_BaseInstanceARB
+#else
uniform int drawID = 0;
+#endif
struct ObjectMatrices {
mat4 drw_modelMatrix;
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index 3e930d19696..98af9714580 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -249,6 +249,9 @@ static void gpu_shader_standard_extensions(char defines[MAX_EXT_DEFINE_LENGTH])
/* a #version 400 feature, but we use #version 330 maximum so use extension */
strcat(defines, "#extension GL_ARB_texture_query_lod: enable\n");
}
+ if (GLEW_ARB_shader_draw_parameters) {
+ strcat(defines, "#extension GL_ARB_shader_draw_parameters : enable\n");
+ }
}
static void gpu_shader_standard_defines(char defines[MAX_DEFINE_LENGTH])
More information about the Bf-blender-cvs
mailing list