diff options
15 files changed, 21 insertions, 112 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl index ab0f4d6bec8..5295a05b965 100644 --- a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl @@ -71,16 +71,6 @@ vec4 attr_load_tangent(samplerBuffer cd_buf) return vec4(0.0, 0.0, 0.0, 1.0); } -vec3 attr_load_uv(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, hairStrandID).rgb; -} - -vec4 attr_load_color(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, hairStrandID).rgba; -} - vec4 attr_load_vec4(samplerBuffer cd_buf) { return texelFetch(cd_buf, hairStrandID).rgba; @@ -135,14 +125,6 @@ vec2 attr_load_float(vec2 attr) { return attr; } -vec4 attr_load_color(vec4 attr) -{ - return attr; -} -vec3 attr_load_uv(vec3 attr) -{ - return attr; -} #endif /* Passthrough. */ diff --git a/source/blender/draw/engines/eevee/shaders/surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/surface_frag.glsl index 79ec3807d0b..ace6c7d788d 100644 --- a/source/blender/draw/engines/eevee/shaders/surface_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/surface_frag.glsl @@ -171,14 +171,6 @@ vec2 attr_load_vec2(vec2 attr) { return vec2(0); } -vec4 attr_load_color(vec4 attr) -{ - return vec4(0); -} -vec3 attr_load_uv(vec3 attr) -{ - return vec3(0); -} /* Passthrough. */ float attr_load_temperature_post(float attr) diff --git a/source/blender/draw/engines/eevee/shaders/surface_vert.glsl b/source/blender/draw/engines/eevee/shaders/surface_vert.glsl index 49c18832f72..7cb4d7ac25c 100644 --- a/source/blender/draw/engines/eevee/shaders/surface_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/surface_vert.glsl @@ -77,16 +77,6 @@ vec4 attr_load_tangent(samplerBuffer cd_buf) return vec4(hairTangent, 1.0); } -vec3 attr_load_uv(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, hairStrandID).rgb; -} - -vec4 attr_load_color(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, hairStrandID).rgba; -} - vec4 attr_load_vec4(samplerBuffer cd_buf) { return texelFetch(cd_buf, hairStrandID).rgba; @@ -148,14 +138,6 @@ float attr_load_float(float attr) { return attr; } -vec4 attr_load_color(vec4 attr) -{ - return attr; -} -vec3 attr_load_uv(vec3 attr) -{ - return attr; -} #endif /* Passthrough. */ diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl index 914261d7f59..d6eeedd8640 100644 --- a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl @@ -155,15 +155,6 @@ float attr_load_float(sampler3D tex) { return texture(tex, grid_coordinates()).r; } -vec4 attr_load_color(sampler3D tex) -{ - return texture(tex, grid_coordinates()); -} -vec3 attr_load_uv(sampler3D attr) -{ - attr_id += 1; - return vec3(0); -} /* TODO(@fclem): These implementation details should concern the DRWManager and not be a fix on * the engine side. But as of now, the engines are reponsible for loading the attributes. */ diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c index 0f1ab967ca5..a1c0a42ba6f 100644 --- a/source/blender/draw/intern/draw_cache_impl_particles.c +++ b/source/blender/draw/intern/draw_cache_impl_particles.c @@ -875,14 +875,13 @@ static void particle_batch_cache_ensure_procedural_strand_data(PTCacheEdit *edit GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); int n = 0; - BLI_snprintf(cache->uv_layer_names[i][n++], MAX_LAYER_NAME_LEN, "u%s", attr_safe_name); BLI_snprintf(cache->uv_layer_names[i][n++], MAX_LAYER_NAME_LEN, "a%s", attr_safe_name); if (i == active_uv) { BLI_strncpy(cache->uv_layer_names[i][n++], "au", MAX_LAYER_NAME_LEN); } if (i == render_uv) { - BLI_strncpy(cache->uv_layer_names[i][n++], "u", MAX_LAYER_NAME_LEN); + BLI_strncpy(cache->uv_layer_names[i][n++], "a", MAX_LAYER_NAME_LEN); } } /* Vertex colors */ @@ -896,12 +895,7 @@ static void particle_batch_cache_ensure_procedural_strand_data(PTCacheEdit *edit GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); int n = 0; - BLI_snprintf(cache->col_layer_names[i][n++], MAX_LAYER_NAME_LEN, "c%s", attr_safe_name); - - /* We only do vcols auto name that are not overridden by uvs */ - if (CustomData_get_named_layer_index(&psmd->mesh_final->ldata, CD_MLOOPUV, name) == -1) { - BLI_snprintf(cache->col_layer_names[i][n++], MAX_LAYER_NAME_LEN, "a%s", attr_safe_name); - } + BLI_snprintf(cache->col_layer_names[i][n++], MAX_LAYER_NAME_LEN, "a%s", attr_safe_name); if (i == active_col) { BLI_strncpy(cache->col_layer_names[i][n++], "ac", MAX_LAYER_NAME_LEN); @@ -1186,11 +1180,11 @@ static void particle_batch_cache_ensure_pos_and_seg(PTCacheEdit *edit, const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPUV, i); GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); - BLI_snprintf(uuid, sizeof(uuid), "u%s", attr_safe_name); + BLI_snprintf(uuid, sizeof(uuid), "a%s", attr_safe_name); uv_id[i] = GPU_vertformat_attr_add(&format, uuid, GPU_COMP_F32, 2, GPU_FETCH_FLOAT); if (i == active_uv) { - GPU_vertformat_alias_add(&format, "u"); + GPU_vertformat_alias_add(&format, "a"); } } @@ -1200,7 +1194,7 @@ static void particle_batch_cache_ensure_pos_and_seg(PTCacheEdit *edit, &psmd->mesh_final->ldata, CD_PROP_BYTE_COLOR, i); GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); - BLI_snprintf(uuid, sizeof(uuid), "c%s", attr_safe_name); + BLI_snprintf(uuid, sizeof(uuid), "a%s", attr_safe_name); col_id[i] = GPU_vertformat_attr_add(&format, uuid, GPU_COMP_U16, 4, GPU_FETCH_FLOAT); if (i == active_col) { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc index 4532f3c3710..5fb4b401ae3 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc @@ -44,14 +44,11 @@ static bool mesh_extract_uv_format_init(GPUVertFormat *format, GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); /* UV layer name. */ - BLI_snprintf(attr_name, sizeof(attr_name), "u%s", attr_safe_name); - GPU_vertformat_attr_add(format, attr_name, GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - /* Auto layer name. */ BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name); - GPU_vertformat_alias_add(format, attr_name); + GPU_vertformat_attr_add(format, attr_name, GPU_COMP_F32, 2, GPU_FETCH_FLOAT); /* Active render layer name. */ if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPUV)) { - GPU_vertformat_alias_add(format, "u"); + GPU_vertformat_alias_add(format, "a"); } /* Active display layer name. */ if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPUV)) { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc index 4cb68cad66c..e5dd025787d 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc @@ -90,7 +90,7 @@ static void init_vcol_format(GPUVertFormat *format, GPU_vertformat_safe_attr_name(ref.layer->name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); /* VCol layer name. */ - BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name); + BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name); GPU_vertformat_attr_add(format, attr_name, GPU_COMP_U16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT); /* Active layer name. */ @@ -102,16 +102,6 @@ static void init_vcol_format(GPUVertFormat *format, if (ref.layer == render) { GPU_vertformat_alias_add(format, "c"); } - - /* Gather number of auto layers. */ - /* We only do `vcols` that are not overridden by `uvs`. */ - bool bad = ref.domain == ATTR_DOMAIN_CORNER; - bad = bad && CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, ref.layer->name) != -1; - - if (!bad) { - BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name); - GPU_vertformat_alias_add(format, attr_name); - } } } diff --git a/source/blender/draw/intern/shaders/common_attribute_lib.glsl b/source/blender/draw/intern/shaders/common_attribute_lib.glsl index 30239a84c0c..ce5e49c7f63 100644 --- a/source/blender/draw/intern/shaders/common_attribute_lib.glsl +++ b/source/blender/draw/intern/shaders/common_attribute_lib.glsl @@ -4,8 +4,6 @@ vec3 attr_load_orco(vec4 orco); vec4 attr_load_tangent(vec4 tangent); -vec3 attr_load_uv(vec3 uv); -vec4 attr_load_color(vec4 color); vec4 attr_load_vec4(vec4 attr); vec3 attr_load_vec3(vec3 attr); vec2 attr_load_vec2(vec2 attr); @@ -13,8 +11,6 @@ float attr_load_float(float attr); vec3 attr_load_orco(samplerBuffer orco); vec4 attr_load_tangent(samplerBuffer tangent); -vec3 attr_load_uv(samplerBuffer uv); -vec4 attr_load_color(samplerBuffer color); vec4 attr_load_vec4(samplerBuffer attr); vec3 attr_load_vec3(samplerBuffer attr); vec2 attr_load_vec2(samplerBuffer attr); @@ -22,8 +18,6 @@ float attr_load_float(samplerBuffer attr); vec3 attr_load_orco(sampler3D orco); vec4 attr_load_tangent(sampler3D tangent); -vec3 attr_load_uv(sampler3D attr); -vec4 attr_load_color(sampler3D tex); vec4 attr_load_vec4(sampler3D tex); vec3 attr_load_vec3(sampler3D tex); vec2 attr_load_vec2(sampler3D tex); diff --git a/source/blender/gpu/intern/gpu_codegen.cc b/source/blender/gpu/intern/gpu_codegen.cc index 2e7c95974ab..b6b0825a993 100644 --- a/source/blender/gpu/intern/gpu_codegen.cc +++ b/source/blender/gpu/intern/gpu_codegen.cc @@ -326,14 +326,6 @@ void GPUCodegen::generate_attribs() iface_type = input_type = GPU_VEC4; load_ss << " = attr_load_tangent(" << attr_name << ");\n"; break; - case CD_MTFACE: - iface_type = input_type = GPU_VEC3; - load_ss << " = attr_load_uv(" << attr_name << ");\n"; - break; - case CD_MCOL: - iface_type = input_type = GPU_VEC4; - load_ss << " = attr_load_color(" << attr_name << ");\n"; - break; default: iface_type = input_type = GPU_VEC4; load_ss << " = attr_load_" << input_type << "(" << attr_name << ");\n"; diff --git a/source/blender/gpu/intern/gpu_node_graph.c b/source/blender/gpu/intern/gpu_node_graph.c index 7f96a3b01c4..bc7ace792bb 100644 --- a/source/blender/gpu/intern/gpu_node_graph.c +++ b/source/blender/gpu/intern/gpu_node_graph.c @@ -331,15 +331,8 @@ void gpu_node_graph_finalize_uniform_attrs(GPUNodeGraph *graph) static char attr_prefix_get(CustomDataType type) { switch (type) { - case CD_MTFACE: - return 'u'; case CD_TANGENT: return 't'; - case CD_MCOL: - case CD_PROP_BYTE_COLOR: - return 'c'; - case CD_PROP_COLOR: - return 'c'; case CD_AUTO_FROM_NAME: return 'a'; case CD_HAIRLENGTH: @@ -372,11 +365,6 @@ static GPUMaterialAttribute *gpu_node_graph_add_attribute(GPUNodeGraph *graph, CustomDataType type, const char *name) { - /* Fall back to the UV layer, which matches old behavior. */ - if (type == CD_AUTO_FROM_NAME && name[0] == '\0') { - type = CD_MTFACE; - } - /* Find existing attribute. */ int num_attributes = 0; GPUMaterialAttribute *attr = graph->attributes.first; diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_uv_map.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_uv_map.glsl index d8fcbbfc361..87943cff18f 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_uv_map.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_uv_map.glsl @@ -1,4 +1,4 @@ -void node_uvmap(vec3 attr_uv, out vec3 outvec) +void node_uvmap(vec4 attr_uv, out vec3 outvec) { - outvec = attr_uv; + outvec = attr_uv.xyz; } diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_coord.cc b/source/blender/nodes/shader/nodes/node_shader_tex_coord.cc index ae683386bac..fb5971021fc 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_coord.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_coord.cc @@ -44,7 +44,7 @@ static int node_shader_gpu_tex_coord(GPUMaterial *mat, /* Opti: don't request orco if not needed. */ float4 zero(0.0f); GPUNodeLink *orco = (!out[0].hasoutput) ? GPU_constant(zero) : GPU_attribute(mat, CD_ORCO, ""); - GPUNodeLink *mtface = GPU_attribute(mat, CD_MTFACE, ""); + GPUNodeLink *mtface = GPU_attribute(mat, CD_AUTO_FROM_NAME, ""); GPU_stack_link(mat, node, "node_tex_coord", in, out, inv_obmat, orco, mtface); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_image.cc b/source/blender/nodes/shader/nodes/node_shader_tex_image.cc index d97f7d0375d..06c238fead0 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_image.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_image.cc @@ -44,7 +44,7 @@ static int node_shader_gpu_tex_image(GPUMaterial *mat, GPUNodeLink **texco = &in[0].link; if (!*texco) { - *texco = GPU_attribute(mat, CD_MTFACE, ""); + *texco = GPU_attribute(mat, CD_AUTO_FROM_NAME, ""); node_shader_gpu_bump_tex_coord(mat, node, texco); } diff --git a/source/blender/nodes/shader/nodes/node_shader_uvmap.cc b/source/blender/nodes/shader/nodes/node_shader_uvmap.cc index ddf4f357a30..91d89952da7 100644 --- a/source/blender/nodes/shader/nodes/node_shader_uvmap.cc +++ b/source/blender/nodes/shader/nodes/node_shader_uvmap.cc @@ -44,7 +44,11 @@ static int node_shader_gpu_uvmap(GPUMaterial *mat, GPUNodeStack *out) { NodeShaderUVMap *attr = static_cast<NodeShaderUVMap *>(node->storage); - GPUNodeLink *mtface = GPU_attribute(mat, CD_MTFACE, attr->uv_map); + + /* NOTE: using CD_AUTO_FROM_NAME instead of CD_MTFACE as geometry nodes may overwrite data which + * will also change the CustomDataType. This will also make EEVEE and Cycles consistent. See + * T93179. */ + GPUNodeLink *mtface = GPU_attribute(mat, CD_AUTO_FROM_NAME, attr->uv_map); GPU_stack_link(mat, node, "node_uvmap", in, out, mtface); diff --git a/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc b/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc index 22b0744333d..a2a9aa9ad91 100644 --- a/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc +++ b/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc @@ -42,7 +42,10 @@ static int node_shader_gpu_vertex_color(GPUMaterial *mat, GPUNodeStack *out) { NodeShaderVertexColor *vertexColor = (NodeShaderVertexColor *)node->storage; - GPUNodeLink *vertexColorLink = GPU_attribute(mat, CD_PROP_COLOR, vertexColor->layer_name); + /* NOTE: using CD_AUTO_FROM_NAME instead of CD_MCOL or CD_PROP_COLOR as geometry nodes may + * overwrite data which will also change the CustomDataType. This will also make EEVEE and Cycles + * consistent. See T93179. */ + GPUNodeLink *vertexColorLink = GPU_attribute(mat, CD_AUTO_FROM_NAME, vertexColor->layer_name); return GPU_stack_link(mat, node, "node_vertex_color", in, out, vertexColorLink); } |