Workbench: Fix missing geometry on Iris 640/630 GPUs
For some reason 32c5972653
broke display of
solid meshes in workbench.
After some investigation, it seems that the vertex coordinate output is
degenerated even if the input is correct and the matrix too.
Removing dead code seems to fix the problem. So maybe the GLSL preprocessor
is not doing what it should?
This commit is contained in:
parent
7f7e51161f
commit
c924f6f53f
|
@ -142,9 +142,12 @@ static char *workbench_build_prepass_frag(void)
|
|||
return str;
|
||||
}
|
||||
|
||||
static char *workbench_build_prepass_vert(void)
|
||||
static char *workbench_build_prepass_vert(bool is_hair)
|
||||
{
|
||||
char *str = NULL;
|
||||
if (!is_hair) {
|
||||
return BLI_strdup(datatoc_workbench_prepass_vert_glsl);
|
||||
}
|
||||
|
||||
DynStr *ds = BLI_dynstr_new();
|
||||
|
||||
|
@ -176,7 +179,7 @@ static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, bool
|
|||
if (e_data.prepass_sh_cache[index] == NULL) {
|
||||
char *defines = workbench_material_build_defines(wpd, use_textures, is_hair);
|
||||
char *composite_frag = workbench_build_composite_frag(wpd);
|
||||
char *prepass_vert = workbench_build_prepass_vert();
|
||||
char *prepass_vert = workbench_build_prepass_vert(is_hair);
|
||||
char *prepass_frag = workbench_build_prepass_frag();
|
||||
e_data.prepass_sh_cache[index] = DRW_shader_create(
|
||||
prepass_vert, NULL,
|
||||
|
|
|
@ -80,9 +80,12 @@ extern char datatoc_workbench_common_lib_glsl[];
|
|||
extern char datatoc_workbench_world_light_lib_glsl[];
|
||||
|
||||
/* static functions */
|
||||
static char *workbench_build_forward_vert(void)
|
||||
static char *workbench_build_forward_vert(bool is_hair)
|
||||
{
|
||||
char *str = NULL;
|
||||
if (!is_hair) {
|
||||
return BLI_strdup(datatoc_workbench_prepass_vert_glsl);
|
||||
}
|
||||
|
||||
DynStr *ds = BLI_dynstr_new();
|
||||
|
||||
|
@ -206,7 +209,7 @@ static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, bool u
|
|||
|
||||
if (e_data.transparent_accum_sh_cache[index] == NULL) {
|
||||
char *defines = workbench_material_build_defines(wpd, use_textures, is_hair);
|
||||
char *transparent_accum_vert = workbench_build_forward_vert();
|
||||
char *transparent_accum_vert = workbench_build_forward_vert(is_hair);
|
||||
char *transparent_accum_frag = workbench_build_forward_transparent_accum_frag();
|
||||
e_data.transparent_accum_sh_cache[index] = DRW_shader_create(
|
||||
transparent_accum_vert, NULL,
|
||||
|
@ -267,7 +270,8 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
|
|||
char *defines = workbench_material_build_defines(wpd, false, false);
|
||||
char *defines_texture = workbench_material_build_defines(wpd, true, false);
|
||||
char *defines_hair = workbench_material_build_defines(wpd, false, true);
|
||||
char *forward_vert = workbench_build_forward_vert();
|
||||
char *forward_vert = workbench_build_forward_vert(false);
|
||||
char *forward_hair_vert = workbench_build_forward_vert(true);
|
||||
e_data.object_outline_sh = DRW_shader_create(
|
||||
forward_vert, NULL,
|
||||
datatoc_workbench_forward_depth_frag_glsl, defines);
|
||||
|
@ -275,12 +279,13 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
|
|||
forward_vert, NULL,
|
||||
datatoc_workbench_forward_depth_frag_glsl, defines_texture);
|
||||
e_data.object_outline_hair_sh = DRW_shader_create(
|
||||
forward_vert, NULL,
|
||||
forward_hair_vert, NULL,
|
||||
datatoc_workbench_forward_depth_frag_glsl, defines_hair);
|
||||
|
||||
|
||||
e_data.checker_depth_sh = DRW_shader_create_fullscreen(
|
||||
datatoc_workbench_checkerboard_depth_frag_glsl, NULL);
|
||||
MEM_freeN(forward_hair_vert);
|
||||
MEM_freeN(forward_vert);
|
||||
MEM_freeN(defines);
|
||||
MEM_freeN(defines_texture);
|
||||
|
|
Loading…
Reference in New Issue