1. Hash include THREE_TEX eash items.
It will reduce some shader hash collision.
2. Make vertex color use ifdef in shader level.
(Since we'd better skip to allocate vertex color attribs in usal case)
TODO : Current shader-define-factory.cpp implement has various problem.
We should refactorize this code, and re-open UTC soon
Change-Id: I53858118dc98ae16ede4d48bd234ebc24e112933
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
// Enable debug log for test coverage
#define DEBUG_ENABLED 1
// Enable debug log for test coverage
#define DEBUG_ENABLED 1
+// Disable this UTC until shader definition factory refactorize
+#define ENABLE_SHADER_DEFINITION_FACTORY_UTC 0
+
#include <dali-test-suite-utils.h>
#include <set>
#include <string_view>
#include <dali-test-suite-utils.h>
#include <set>
#include <string_view>
+#if ENABLE_SHADER_DEFINITION_FACTORY_UTC
MaterialDefinition& NewMaterialDefinition(ResourceBundle& resources)
{
resources.mMaterials.push_back({});
MaterialDefinition& NewMaterialDefinition(ResourceBundle& resources)
{
resources.mMaterials.push_back({});
resources.mMaterials.clear();
resources.mMeshes.clear();
}
resources.mMaterials.clear();
resources.mMeshes.clear();
}
+#if ENABLE_SHADER_DEFINITION_FACTORY_UTC
struct ShaderParameters
{
MeshDefinition& meshDef;
struct ShaderParameters
{
MeshDefinition& meshDef;
std::vector<const Permutation*> permutations;
Index shaderIdx;
};
std::vector<const Permutation*> permutations;
Index shaderIdx;
};
- NodeDefinition nodeDef;
+ NodeDefinition nodeDef;
std::unique_ptr<NodeDefinition::Renderable> renderable = std::unique_ptr<NodeDefinition::Renderable>(new NodeDefinition::Renderable());
nodeDef.mRenderables.push_back(std::move(renderable));
std::unique_ptr<NodeDefinition::Renderable> renderable = std::unique_ptr<NodeDefinition::Renderable>(new NodeDefinition::Renderable());
nodeDef.mRenderables.push_back(std::move(renderable));
int UtcDaliShaderDefinitionFactoryProduceShader(void)
{
int UtcDaliShaderDefinitionFactoryProduceShader(void)
{
+#if ENABLE_SHADER_DEFINITION_FACTORY_UTC
Context ctx;
ctx.resources.mMaterials.push_back({});
ctx.resources.mMeshes.push_back({});
Context ctx;
ctx.resources.mMaterials.push_back({});
ctx.resources.mMeshes.push_back({});
Permutation permutations[]{
{
[](ShaderParameters& p) {},
Permutation permutations[]{
{
[](ShaderParameters& p) {},
RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE | RendererState::CULL_BACK,
},
{
RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE | RendererState::CULL_BACK,
},
{
RendererState::DEPTH_WRITE,
},
{[](ShaderParameters& p) {
RendererState::DEPTH_WRITE,
},
{[](ShaderParameters& p) {
+ p.materialDef.mFlags |= MaterialDefinition::ALBEDO;
p.materialDef.mTextureStages.push_back({MaterialDefinition::ALBEDO, {}});
},
p.materialDef.mTextureStages.push_back({MaterialDefinition::ALBEDO, {}});
},
+ {"THREE_TEX", "BASECOLOR_TEX"}},
{[](ShaderParameters& p) {
p.materialDef.mTextureStages.push_back({MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS, {}});
},
{[](ShaderParameters& p) {
p.materialDef.mTextureStages.push_back({MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS, {}});
},
+ {"THREE_TEX", "METALLIC_ROUGHNESS_TEX"}},
{[](ShaderParameters& p) {
{[](ShaderParameters& p) {
+ p.materialDef.mFlags |= MaterialDefinition::NORMAL;
p.materialDef.mTextureStages.push_back({MaterialDefinition::NORMAL, {}});
},
p.materialDef.mTextureStages.push_back({MaterialDefinition::NORMAL, {}});
},
+ {"THREE_TEX", "NORMAL_TEX"}},
{[](ShaderParameters& p) {
p.materialDef.mFlags |= MaterialDefinition::SUBSURFACE;
},
{[](ShaderParameters& p) {
p.materialDef.mFlags |= MaterialDefinition::SUBSURFACE;
},
+
+ {[](ShaderParameters& p) {
+ p.meshDef.mColors.mBlob.mOffset = 0;
+ },
+ {"COLOR_ATTRIBUTE"}},
+ {[](ShaderParameters& p) {
+ p.meshDef.mTangentType = Property::VECTOR4;
+ },
+ {"VEC4_TANGENT"}},
};
PermutationSet permSets[]{
};
PermutationSet permSets[]{
for(auto& ps : permSets)
{
for(auto& ps : permSets)
{
+ static int tc = 0;
+ tet_printf("Test %d's tc\n", ++tc);
auto modelRenderable = new ModelRenderable();
modelRenderable->mMeshIdx = 0;
modelRenderable->mMaterialIdx = 0;
auto modelRenderable = new ModelRenderable();
modelRenderable->mMeshIdx = 0;
modelRenderable->mMaterialIdx = 0;
- NodeDefinition nodeDef;
+ NodeDefinition nodeDef;
std::unique_ptr<NodeDefinition::Renderable> renderable;
renderable.reset(modelRenderable);
nodeDef.mRenderables.push_back(std::move(renderable));
std::unique_ptr<NodeDefinition::Renderable> renderable;
renderable.reset(modelRenderable);
nodeDef.mRenderables.push_back(std::move(renderable));
+ if(!defines.empty())
+ {
+ std::ostringstream oss;
+ oss << "Need to check below defines :\n";
+ for(auto& it : defines)
+ {
+ oss << it << "\n";
+ }
+ tet_printf("%s\n", oss.str().c_str());
+ }
DALI_TEST_CHECK(defines.empty());
DALI_TEST_EQUAL(0, definesUnmatched);
DALI_TEST_CHECK(defines.empty());
DALI_TEST_EQUAL(0, definesUnmatched);
ClearMeshesAndMaterials(ctx.resources);
}
ClearMeshesAndMaterials(ctx.resources);
}
+#else
+ DALI_TEST_CHECK(true);
+#endif
+}
\ No newline at end of file
precision mediump float;
#endif
precision mediump float;
#endif
#ifdef GLTF_CHANNELS
#define METALLIC b
#define ROUGHNESS g
#ifdef GLTF_CHANNELS
#define METALLIC b
#define ROUGHNESS g
#define METALLIC r
#define ROUGHNESS a
#endif //GLTF_CHANNELS
#define METALLIC r
#define ROUGHNESS a
#endif //GLTF_CHANNELS
uniform lowp vec4 uColor; // Color from SceneGraph
uniform lowp vec4 uColorFactor; // Color from material
uniform lowp vec4 uColor; // Color from SceneGraph
uniform lowp vec4 uColorFactor; // Color from material
uniform lowp float uAlphaThreshold;
// TODO: Multiple texture coordinate will be supported.
uniform lowp float uAlphaThreshold;
// TODO: Multiple texture coordinate will be supported.
in highp vec3 vPositionToCamera;
out vec4 FragColor;
in highp vec3 vPositionToCamera;
out vec4 FragColor;
lowp vec4 baseColor = texture(sAlbedoAlpha, vUV);
baseColor = vec4(linear(baseColor.rgb), baseColor.w) * uColorFactor;
#else // BASECOLOR_TEX
lowp vec4 baseColor = texture(sAlbedoAlpha, vUV);
baseColor = vec4(linear(baseColor.rgb), baseColor.w) * uColorFactor;
#else // BASECOLOR_TEX
lowp vec4 baseColor = vColor * uColorFactor;
lowp vec4 baseColor = vColor * uColorFactor;
+#else // COLOR_ATTRIBUTE
+ lowp vec4 baseColor = uColorFactor;
+#endif // COLOR_ATTRIBUTE
#endif // BASECOLOR_TEX
#ifdef METALLIC_ROUGHNESS_TEX
#endif // BASECOLOR_TEX
#ifdef METALLIC_ROUGHNESS_TEX
#endif // NORMAL_TEX
#else // THREE_TEX
vec4 albedoMetal = texture(sAlbedoMetal, vUV);
#endif // NORMAL_TEX
#else // THREE_TEX
vec4 albedoMetal = texture(sAlbedoMetal, vUV);
lowp vec4 baseColor = vec4(linear(albedoMetal.rgb), 1.0) * vColor * uColorFactor;
lowp vec4 baseColor = vec4(linear(albedoMetal.rgb), 1.0) * vColor * uColorFactor;
+#else // COLOR_ATTRIBUTE
+ lowp vec4 baseColor = vec4(linear(albedoMetal.rgb), 1.0) * uColorFactor;
+#endif // COLOR_ATTRIBUTE
metallic = albedoMetal.METALLIC * metallic;
metallic = albedoMetal.METALLIC * metallic;
+uniform lowp float uHasVertexColor;
+#endif
#ifdef MORPH
uniform highp sampler2D sBlendShapeGeometry;
#endif
#ifdef MORPH
uniform highp sampler2D sBlendShapeGeometry;
#endif
out highp vec3 vPositionToCamera;
uniform highp mat4 uViewMatrix;
uniform mat3 uNormalMatrix;
uniform mat4 uModelMatrix;
uniform mat4 uProjection;
out highp vec3 vPositionToCamera;
uniform highp mat4 uViewMatrix;
uniform mat3 uNormalMatrix;
uniform mat4 uModelMatrix;
uniform mat4 uProjection;
-uniform lowp float uHasVertexColor;
#ifdef SKINNING
in vec4 aJoints;
#ifdef SKINNING
in vec4 aJoints;
vColor = mix(vec4(1.0f), aVertexColor, uHasVertexColor);
vColor = mix(vec4(1.0f), aVertexColor, uHasVertexColor);
gl_Position = uProjection * positionV;
}
gl_Position = uProjection * positionV;
}
materialDef.CheckTextures(MaterialDefinition::NORMAL))
{
hash.Add("3TEX");
materialDef.CheckTextures(MaterialDefinition::NORMAL))
{
hash.Add("3TEX");
+
+ // For the glTF, each of basecolor, metallic_roughness, normal texture is not essential.
+ if(materialDef.CheckTextures(MaterialDefinition::ALBEDO))
+ {
+ hash.Add("BCTEX");
+ }
+
+ if(materialDef.CheckTextures(MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS))
+ {
+ hash.Add("MRTEX");
+ }
+
+ if(materialDef.CheckTextures(MaterialDefinition::NORMAL))
+ {
+ hash.Add("NTEX");
+ }
}
if(materialDef.GetAlphaCutoff() > 0.f)
}
if(materialDef.GetAlphaCutoff() > 0.f)
hash.Add("FLIP" /*_V*/);
}
hash.Add("FLIP" /*_V*/);
}
+ if(meshDef.mColors.IsDefined())
+ {
+ hash.Add("COLATT");
+ }
+
+ if(meshDef.mTangentType == Property::VECTOR4)
+ {
+ hash.Add("V4TAN");
+ }
+
if(meshDef.HasBlendShapes())
{
bool hasPositions = false;
if(meshDef.HasBlendShapes())
{
bool hasPositions = false;
shaderDef.mDefines.push_back("FLIP_V");
}
shaderDef.mDefines.push_back("FLIP_V");
}
+ if(meshDef.mColors.IsDefined())
+ {
+ shaderDef.mDefines.push_back("COLOR_ATTRIBUTE");
+ }
+
+ if(meshDef.mTangentType == Property::VECTOR4)
+ {
+ shaderDef.mDefines.push_back("VEC4_TANGENT");
+ }
+
if(meshDef.HasBlendShapes())
{
bool hasPositions = false;
if(meshDef.HasBlendShapes())
{
bool hasPositions = false;
- if(meshDef.mTangentType == Property::VECTOR4)
- {
- shaderDef.mDefines.push_back("VEC4_TANGENT");
- }
-
shaderDef.mUniforms["uMaxLOD"] = 6.f;
shaderDef.mUniforms["uCubeMatrix"] = Matrix::IDENTITY;
shaderDef.mUniforms["uMaxLOD"] = 6.f;
shaderDef.mUniforms["uCubeMatrix"] = Matrix::IDENTITY;