mesa: add tessellation shader state and limits

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Chris Forbes 2014-09-21 12:41:07 +12:00 committed by Marek Olšák
parent a2af956963
commit bb97cc66c1
4 changed files with 29 additions and 0 deletions

View file

@ -296,6 +296,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
*

View file

@ -716,6 +716,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;
}

View file

@ -3745,6 +3745,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;
};

View file

@ -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;
}