[Mesa-dev] [PATCH 05/46] mesa: add tessellation shader state and limits
Marek Olšák
maraeo at gmail.com
Tue Jun 16 16:01:01 PDT 2015
From: Chris Forbes <chrisf at ijw.co.nz>
---
src/mesa/main/config.h | 8 ++++++++
src/mesa/main/context.c | 8 ++++++++
src/mesa/main/mtypes.h | 6 ++++++
src/mesa/main/shaderapi.c | 7 +++++++
4 files changed, 29 insertions(+)
diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h
index 9c3baf4..833d8c0 100644
--- a/src/mesa/main/config.h
+++ b/src/mesa/main/config.h
@@ -294,6 +294,14 @@
/** For GL_ARB_pipeline_statistics_query */
#define MAX_PIPELINE_STATISTICS 11
+/** For GL_ARB_tessellation_shader */
+/*@{*/
+#define MAX_TESS_GEN_LEVEL 64
+#define MAX_PATCH_VERTICES 32
+#define MAX_TESS_PATCH_COMPONENTS 120
+#define MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 4096
+/*@}*/
+
/*
* Color channel component order
*
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 4875f47..c86800a 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -726,6 +726,14 @@ _mesa_init_constants(struct gl_constants *consts, gl_api api)
/** GL_KHR_context_flush_control */
consts->ContextReleaseBehavior = GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH;
+
+ /** GL_ARB_tessellation_shader */
+ consts->MaxTessGenLevel = MAX_TESS_GEN_LEVEL;
+ consts->MaxPatchVertices = MAX_PATCH_VERTICES;
+ consts->Program[MESA_SHADER_TESS_CTRL].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
+ consts->Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
+ consts->MaxTessPatchComponents = MAX_TESS_PATCH_COMPONENTS;
+ consts->MaxTessControlTotalOutputComponents = MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS;
}
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 12789f1..07a4b97 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3681,6 +3681,12 @@ struct gl_constants
GLenum ContextReleaseBehavior;
struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_STAGES];
+
+ /** GL_ARB_tessellation_shader */
+ GLuint MaxPatchVertices;
+ GLuint MaxTessGenLevel;
+ GLuint MaxTessPatchComponents;
+ GLuint MaxTessControlTotalOutputComponents;
};
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index ea7917e..a247250 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -110,6 +110,7 @@ _mesa_init_shader_state(struct gl_context *ctx)
*/
struct gl_shader_compiler_options options;
gl_shader_stage sh;
+ int i;
memset(&options, 0, sizeof(options));
options.MaxUnrollIterations = 32;
@@ -126,6 +127,12 @@ _mesa_init_shader_state(struct gl_context *ctx)
/* Extended for ARB_separate_shader_objects */
ctx->Shader.RefCount = 1;
mtx_init(&ctx->Shader.Mutex, mtx_plain);
+
+ ctx->TessCtrlProgram.patch_vertices = 3;
+ for (i = 0; i < 4; ++i)
+ ctx->TessCtrlProgram.patch_default_outer_level[i] = 1.0;
+ for (i = 0; i < 2; ++i)
+ ctx->TessCtrlProgram.patch_default_inner_level[i] = 1.0;
}
--
2.1.0
More information about the mesa-dev
mailing list