Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Fielder <jason_apple>2022-04-27 14:00:36 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-04-27 14:00:51 +0300
commitdb622b5a0bea32cb3a78c0a4c7d4372a9178d27e (patch)
treeb00c3b497d694929ef3d342fb0973ee9a27bc3e0 /source/blender/draw/engines
parentcdd4354c81f6f9ae3bc72b7abd5dbcfd74fa548e (diff)
Metal: GLSL Compatibility - Hosting default uniform values.
There are a number of shaders, most notably grid_frag.glsl, which rely on default assignments to uniform values within shaders. This is not currently supported by the shader uniform push model implemented for the Metal backend, wherein uniform updates are pushed as a singular block of data. Any default assignment would become over-written. As such, adding assignments of these default values in the high-level, to ensure the correct value is written for all APIs. This likely impacts Vulkan push-constants as well. Authored by Apple: Michael Parkin-White Ref T96261 Reviewed By: fclem Maniphest Tasks: T96261 Differential Revision: https://developer.blender.org/D14555
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r--source/blender/draw/engines/eevee/eevee_lookdev.c2
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c3
-rw-r--r--source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl4
-rw-r--r--source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl4
-rw-r--r--source/blender/draw/engines/overlay/overlay_edit_mesh.c4
-rw-r--r--source/blender/draw/engines/overlay/overlay_grid.c7
-rw-r--r--source/blender/draw/engines/overlay/overlay_outline.c1
-rw-r--r--source/blender/draw/engines/overlay/shaders/grid_frag.glsl2
8 files changed, 20 insertions, 7 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c
index 874c2815b8b..e6c33feeeb9 100644
--- a/source/blender/draw/engines/eevee/eevee_lookdev.c
+++ b/source/blender/draw/engines/eevee/eevee_lookdev.c
@@ -233,6 +233,7 @@ void EEVEE_lookdev_cache_init(EEVEE_Data *vedata,
DRW_shgroup_uniform_texture_ex(grp, "studioLight", sl->equirect_radiance_gputexture, state);
/* Do not fade-out when doing probe rendering, only when drawing the background. */
DRW_shgroup_uniform_float_copy(grp, "backgroundAlpha", 1.0f);
+ DRW_shgroup_uniform_float_copy(grp, "studioLightBlur", 0.0f);
}
else {
float background_alpha = g_data->background_alpha * shading->studiolight_background;
@@ -240,6 +241,7 @@ void EEVEE_lookdev_cache_init(EEVEE_Data *vedata,
DRW_shgroup_uniform_float_copy(grp, "backgroundAlpha", background_alpha);
DRW_shgroup_uniform_float_copy(grp, "studioLightBlur", studiolight_blur);
DRW_shgroup_uniform_texture(grp, "probeCubes", txl->lookdev_cube_tx);
+ DRW_shgroup_uniform_float_copy(grp, "studioLightIntensity", 1.0f);
}
/* Common UBOs are setup latter. */
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index c46e5dd75d6..a81d3e56673 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -113,6 +113,9 @@ void EEVEE_material_bind_resources(DRWShadingGroup *shgrp,
DRW_shgroup_uniform_texture_ref(shgrp, "probePlanars", &vedata->txl->planar_pool);
DRW_shgroup_uniform_int_copy(shgrp, "outputSsrId", ssr_id ? *ssr_id : 0);
}
+ else {
+ DRW_shgroup_uniform_int_copy(shgrp, "outputSsrId", 1);
+ }
if (use_refract) {
DRW_shgroup_uniform_float_copy(
shgrp, "refractionDepth", (refract_depth) ? *refract_depth : 0.0);
diff --git a/source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl
index 0096cd1747f..492b78a20b6 100644
--- a/source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl
@@ -6,8 +6,8 @@
#ifndef VOLUMETRICS
-uniform int outputSsrId = 1;
-uniform int outputSssId = 1;
+uniform int outputSsrId; /*Default = 1;*/
+uniform int outputSssId; /*Default = 1;*/
#endif
diff --git a/source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl b/source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl
index 7ab532ea0fb..d8a80e89df7 100644
--- a/source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl
@@ -8,8 +8,8 @@ uniform sampler2D studioLight;
uniform float backgroundAlpha;
uniform mat3 StudioLightMatrix;
-uniform float studioLightIntensity = 1.0;
-uniform float studioLightBlur = 0.0;
+uniform float studioLightIntensity; /* Default 1.0; */
+uniform float studioLightBlur; /* Default 0.0; */
out vec4 FragColor;
diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.c b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
index e0671eac156..4d65cbc04ff 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_mesh.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
@@ -179,10 +179,9 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
/* Verts */
state |= DRW_STATE_WRITE_DEPTH;
DRW_PASS_CREATE(psl->edit_mesh_verts_ps[i], state | pd->clipping_state);
+ int vert_mask[4] = {0xFF, 0xFF, 0xFF, 0xFF};
if (select_vert) {
- int vert_mask[4] = {0xFF, 0xFF, 0xFF, 0xFF};
-
sh = OVERLAY_shader_edit_mesh_vert();
grp = pd->edit_mesh_verts_grp[i] = DRW_shgroup_create(sh, psl->edit_mesh_verts_ps[i]);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
@@ -201,6 +200,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
DRW_shgroup_uniform_float_copy(grp, "alpha", backwire_opacity);
DRW_shgroup_uniform_texture_ref(grp, "depthTex", depth_tex);
+ DRW_shgroup_uniform_ivec4_copy(grp, "dataMask", vert_mask);
DRW_shgroup_state_enable(grp, DRW_STATE_WRITE_DEPTH);
}
else {
diff --git a/source/blender/draw/engines/overlay/overlay_grid.c b/source/blender/draw/engines/overlay/overlay_grid.c
index ed6db459696..2d74bd53528 100644
--- a/source/blender/draw/engines/overlay/overlay_grid.c
+++ b/source/blender/draw/engines/overlay/overlay_grid.c
@@ -226,6 +226,9 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
GPUShader *sh;
struct GPUBatch *geom = DRW_cache_grid_get();
+ const float line_zero = 0;
+ const float grid_steps_default[8] = {0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0, 10000.0};
+
if (pd->space_type == SPACE_IMAGE) {
float mat[4][4];
@@ -254,6 +257,7 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_vec3(grp, "gridSize", shd->grid_size, 1);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_float(grp, "gridSteps", grid_steps_default, 8);
if (shd->zneg_flag & SHOW_AXIS_Z) {
DRW_shgroup_call(grp, geom, NULL);
}
@@ -264,6 +268,7 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_vec3(grp, "planeAxes", shd->grid_axes, 1);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_float_copy(grp, "lineKernel", line_zero);
DRW_shgroup_uniform_float(grp, "gridSteps", shd->grid_steps, ARRAY_SIZE(shd->grid_steps));
if (shd->grid_flag) {
DRW_shgroup_call(grp, geom, NULL);
@@ -274,6 +279,8 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_vec3(grp, "planeAxes", shd->zplane_axes, 1);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_float_copy(grp, "lineKernel", line_zero);
+ DRW_shgroup_uniform_float(grp, "gridSteps", grid_steps_default, 8);
if (shd->zpos_flag & SHOW_AXIS_Z) {
DRW_shgroup_call(grp, geom, NULL);
}
diff --git a/source/blender/draw/engines/overlay/overlay_outline.c b/source/blender/draw/engines/overlay/overlay_outline.c
index 8010319e3fa..47d9d19cad2 100644
--- a/source/blender/draw/engines/overlay/overlay_outline.c
+++ b/source/blender/draw/engines/overlay/overlay_outline.c
@@ -132,6 +132,7 @@ void OVERLAY_outline_cache_init(OVERLAY_Data *vedata)
pd->outlines_gpencil_grp = grp = DRW_shgroup_create(sh_gpencil, psl->outlines_prepass_ps);
DRW_shgroup_uniform_bool_copy(grp, "isTransform", (G.moving & G_TRANSFORM_OBJ) != 0);
+ DRW_shgroup_uniform_float_copy(grp, "strokeIndexOffset", 0.0);
}
/* outlines_prepass_ps is still needed for selection of probes. */
diff --git a/source/blender/draw/engines/overlay/shaders/grid_frag.glsl b/source/blender/draw/engines/overlay/shaders/grid_frag.glsl
index 4a9b8d15528..f1fcc3ad8fa 100644
--- a/source/blender/draw/engines/overlay/shaders/grid_frag.glsl
+++ b/source/blender/draw/engines/overlay/shaders/grid_frag.glsl
@@ -18,7 +18,7 @@ uniform int gridFlag;
uniform float zoomFactor;
#define STEPS_LEN 8 /* Match: #SI_GRID_STEPS_LEN */
-uniform float gridSteps[STEPS_LEN] = float[](0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0, 10000.0);
+uniform float gridSteps[STEPS_LEN];
#define AXIS_X (1 << 0)
#define AXIS_Y (1 << 1)