summaryrefslogtreecommitdiffstats
path: root/Graphics
diff options
context:
space:
mode:
authorEgor <egor.yusov@gmail.com>2018-02-18 21:30:19 +0000
committerEgor <egor.yusov@gmail.com>2018-02-18 21:30:19 +0000
commit0a1c67de145602db46c544d70db07bbb70b92554 (patch)
treed54fd0d353e8d055b2a954588a1ef1db56e94695 /Graphics
parentFixed iOS build (diff)
downloadDiligentCore-0a1c67de145602db46c544d70db07bbb70b92554.tar.gz
DiligentCore-0a1c67de145602db46c544d70db07bbb70b92554.zip
HLSL2GLSL converter: reworked outer tessellation level handling to avoid using .length() on an array that does not work on some GLES devices
Diffstat (limited to 'Graphics')
-rw-r--r--Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions.h36
-rw-r--r--Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions_inc.h36
-rw-r--r--Graphics/HLSL2GLSLConverterLib/src/HLSL2GLSLConverterImpl.cpp4
3 files changed, 70 insertions, 6 deletions
diff --git a/Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions.h b/Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions.h
index fc26cc66..adacd0bc 100644
--- a/Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions.h
+++ b/Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions.h
@@ -1095,7 +1095,23 @@ out gl_PerVertex
#define _GET_GL_POSITION(Pos)_ResizeVector(Pos, gl_in[i].gl_Position)
#define _SET_GL_POSITION(Pos)gl_out[gl_InvocationID].gl_Position=_ExpandVector(Pos)
-#define _SET_GL_TESS_LEVEL_OUTER(OuterLevel)for(int i=0; i < OuterLevel.length(); ++i)gl_TessLevelOuter[i] = OuterLevel[i]
+
+void _SetGLTessLevelOuter(float OuterLevel[2])
+{
+ for(int i=0; i < 2; ++i)
+ gl_TessLevelOuter[i] = OuterLevel[i];
+}
+void _SetGLTessLevelOuter(float OuterLevel[3])
+{
+ for(int i=0; i < 3; ++i)
+ gl_TessLevelOuter[i] = OuterLevel[i];
+}
+void _SetGLTessLevelOuter(float OuterLevel[4])
+{
+ for(int i=0; i < 4; ++i)
+ gl_TessLevelOuter[i] = OuterLevel[i];
+}
+
void _SetGLTessLevelInner(float InnerLevel[2])
{
@@ -1128,7 +1144,23 @@ out gl_PerVertex
};
#define _GET_GL_POSITION(Pos)_ResizeVector(Pos, gl_in[i].gl_Position)
-#define _GET_GL_TESS_LEVEL_OUTER(OuterLevel)for(int i=0; i < OuterLevel.length(); ++i)OuterLevel[i] = gl_TessLevelOuter[i]
+
+void _GetGLTessLevelOuter(out float OuterLevel[2])
+{
+ for(int i=0; i < 2; ++i)
+ OuterLevel[i] = gl_TessLevelOuter[i];
+}
+void _GetGLTessLevelOuter(out float OuterLevel[3])
+{
+ for(int i=0; i < 3; ++i)
+ OuterLevel[i] = gl_TessLevelOuter[i];
+}
+void _GetGLTessLevelOuter(out float OuterLevel[4])
+{
+ for(int i=0; i < 4; ++i)
+ OuterLevel[i] = gl_TessLevelOuter[i];
+}
+
void _GetGLTessLevelInner(out float InnerLevel[2])
{
InnerLevel[0] = gl_TessLevelInner[0];
diff --git a/Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions_inc.h b/Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions_inc.h
index 0c69ccda..b12790d9 100644
--- a/Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions_inc.h
+++ b/Graphics/HLSL2GLSLConverterLib/include/GLSLDefinitions_inc.h
@@ -1095,7 +1095,23 @@
"#define _GET_GL_POSITION(Pos)_ResizeVector(Pos, gl_in[i].gl_Position)\n"
"\n"
"#define _SET_GL_POSITION(Pos)gl_out[gl_InvocationID].gl_Position=_ExpandVector(Pos)\n"
-"#define _SET_GL_TESS_LEVEL_OUTER(OuterLevel)for(int i=0; i < OuterLevel.length(); ++i)gl_TessLevelOuter[i] = OuterLevel[i]\n"
+"\n"
+"void _SetGLTessLevelOuter(float OuterLevel[2])\n"
+"{\n"
+" for(int i=0; i < 2; ++i)\n"
+" gl_TessLevelOuter[i] = OuterLevel[i];\n"
+"}\n"
+"void _SetGLTessLevelOuter(float OuterLevel[3])\n"
+"{\n"
+" for(int i=0; i < 3; ++i)\n"
+" gl_TessLevelOuter[i] = OuterLevel[i];\n"
+"}\n"
+"void _SetGLTessLevelOuter(float OuterLevel[4])\n"
+"{\n"
+" for(int i=0; i < 4; ++i)\n"
+" gl_TessLevelOuter[i] = OuterLevel[i];\n"
+"}\n"
+"\n"
"\n"
"void _SetGLTessLevelInner(float InnerLevel[2])\n"
"{\n"
@@ -1128,7 +1144,23 @@
"};\n"
"\n"
"#define _GET_GL_POSITION(Pos)_ResizeVector(Pos, gl_in[i].gl_Position)\n"
-"#define _GET_GL_TESS_LEVEL_OUTER(OuterLevel)for(int i=0; i < OuterLevel.length(); ++i)OuterLevel[i] = gl_TessLevelOuter[i]\n"
+"\n"
+"void _GetGLTessLevelOuter(out float OuterLevel[2])\n"
+"{\n"
+" for(int i=0; i < 2; ++i)\n"
+" OuterLevel[i] = gl_TessLevelOuter[i];\n"
+"}\n"
+"void _GetGLTessLevelOuter(out float OuterLevel[3])\n"
+"{\n"
+" for(int i=0; i < 3; ++i)\n"
+" OuterLevel[i] = gl_TessLevelOuter[i];\n"
+"}\n"
+"void _GetGLTessLevelOuter(out float OuterLevel[4])\n"
+"{\n"
+" for(int i=0; i < 4; ++i)\n"
+" OuterLevel[i] = gl_TessLevelOuter[i];\n"
+"}\n"
+"\n"
"void _GetGLTessLevelInner(out float InnerLevel[2])\n"
"{\n"
" InnerLevel[0] = gl_TessLevelInner[0];\n"
diff --git a/Graphics/HLSL2GLSLConverterLib/src/HLSL2GLSLConverterImpl.cpp b/Graphics/HLSL2GLSLConverterLib/src/HLSL2GLSLConverterImpl.cpp
index 5b5e2a20..8cc26f39 100644
--- a/Graphics/HLSL2GLSLConverterLib/src/HLSL2GLSLConverterImpl.cpp
+++ b/Graphics/HLSL2GLSLConverterLib/src/HLSL2GLSLConverterImpl.cpp
@@ -723,11 +723,11 @@ HLSL2GLSLConverterImpl::HLSL2GLSLConverterImpl()
DEFINE_VARIABLE(HSInd, InVar, "sv_primitiveid", "_GET_GL_PRIMITIVE_ID");
DEFINE_VARIABLE(HSInd, InVar, "sv_position", "_GET_GL_POSITION");
DEFINE_VARIABLE(HSInd, OutVar, "sv_position", "_SET_GL_POSITION");
- DEFINE_VARIABLE(HSInd, OutVar, "sv_tessfactor", "_SET_GL_TESS_LEVEL_OUTER");
+ DEFINE_VARIABLE(HSInd, OutVar, "sv_tessfactor", "_SetGLTessLevelOuter");
DEFINE_VARIABLE(HSInd, OutVar, "sv_insidetessfactor", "_SetGLTessLevelInner");
DEFINE_VARIABLE(DSInd, InVar, "sv_position", "_GET_GL_POSITION");
- DEFINE_VARIABLE(DSInd, InVar, "sv_tessfactor", "_GET_GL_TESS_LEVEL_OUTER");
+ DEFINE_VARIABLE(DSInd, InVar, "sv_tessfactor", "_GetGLTessLevelOuter");
DEFINE_VARIABLE(DSInd, InVar, "sv_insidetessfactor", "_GetGLTessLevelInner");
DEFINE_VARIABLE(DSInd, InVar, "sv_domainlocation", "_GET_GL_TESS_COORD");
DEFINE_VARIABLE(DSInd, InVar, "sv_primitiveid", "_GET_GL_PRIMITIVE_ID");