mesa: replace #defines with new gl_shader_type enum

This commit is contained in:
Brian Paul
2010-11-23 10:28:43 -07:00
parent 512f840702
commit c628fd743e
8 changed files with 53 additions and 40 deletions

View File

@@ -1829,7 +1829,7 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
#ifdef DEBUG #ifdef DEBUG
if (ctx->Shader.Flags & GLSL_LOG) { if (ctx->Shader.Flags & GLSL_LOG) {
struct gl_shader_program *shProg[MESA_SHADER_TYPES]; struct gl_shader_program *shProg[MESA_SHADER_TYPES];
unsigned i; gl_shader_type i;
shProg[MESA_SHADER_VERTEX] = ctx->Shader.CurrentVertexProgram; shProg[MESA_SHADER_VERTEX] = ctx->Shader.CurrentVertexProgram;
shProg[MESA_SHADER_GEOMETRY] = ctx->Shader.CurrentGeometryProgram; shProg[MESA_SHADER_GEOMETRY] = ctx->Shader.CurrentGeometryProgram;

View File

@@ -41,14 +41,6 @@
#include "math/m_matrix.h" /* GLmatrix */ #include "math/m_matrix.h" /* GLmatrix */
#include "main/simple_list.h" /* struct simple_node */ #include "main/simple_list.h" /* struct simple_node */
/* Shader stages. Note that these will become 5 with tessellation.
* These MUST have the same values as PIPE_SHADER_*
*/
#define MESA_SHADER_VERTEX 0
#define MESA_SHADER_FRAGMENT 1
#define MESA_SHADER_GEOMETRY 2
#define MESA_SHADER_TYPES 3
/** /**
* Color channel data type. * Color channel data type.
@@ -129,6 +121,20 @@ struct st_context;
/**
* Shader stages. Note that these will become 5 with tessellation.
* These MUST have the same values as gallium's PIPE_SHADER_*
*/
typedef enum
{
MESA_SHADER_VERTEX = 0,
MESA_SHADER_FRAGMENT = 1,
MESA_SHADER_GEOMETRY = 2,
MESA_SHADER_TYPES = 3
} gl_shader_type;
/** /**
* Indexes for vertex program attributes. * Indexes for vertex program attributes.
* GL_NV_vertex_program aliases generic attributes over the conventional * GL_NV_vertex_program aliases generic attributes over the conventional

View File

@@ -291,6 +291,7 @@ _mesa_free_shader_program_data(struct gl_context *ctx,
struct gl_shader_program *shProg) struct gl_shader_program *shProg)
{ {
GLuint i; GLuint i;
gl_shader_type sh;
assert(shProg->Type == GL_SHADER_PROGRAM_MESA); assert(shProg->Type == GL_SHADER_PROGRAM_MESA);
@@ -326,10 +327,10 @@ _mesa_free_shader_program_data(struct gl_context *ctx,
shProg->TransformFeedback.NumVarying = 0; shProg->TransformFeedback.NumVarying = 0;
for (i = 0; i < MESA_SHADER_TYPES; i++) { for (sh = 0; sh < MESA_SHADER_TYPES; sh++) {
if (shProg->_LinkedShaders[i] != NULL) { if (shProg->_LinkedShaders[sh] != NULL) {
ctx->Driver.DeleteShader(ctx, shProg->_LinkedShaders[i]); ctx->Driver.DeleteShader(ctx, shProg->_LinkedShaders[sh]);
shProg->_LinkedShaders[i] = NULL; shProg->_LinkedShaders[sh] = NULL;
} }
} }
} }

View File

@@ -98,7 +98,7 @@ extern void
_mesa_free_shader_state(struct gl_context *ctx); _mesa_free_shader_state(struct gl_context *ctx);
static INLINE GLuint static INLINE gl_shader_type
_mesa_shader_type_to_index(GLenum v) _mesa_shader_type_to_index(GLenum v)
{ {
switch (v) { switch (v) {
@@ -110,7 +110,7 @@ _mesa_shader_type_to_index(GLenum v)
return MESA_SHADER_GEOMETRY; return MESA_SHADER_GEOMETRY;
default: default:
ASSERT(0 && "bad value in _mesa_shader_type_to_index()"); ASSERT(0 && "bad value in _mesa_shader_type_to_index()");
return ~0; return MESA_SHADER_TYPES;
} }
} }

View File

@@ -925,7 +925,7 @@ _mesa_find_free_register(const GLboolean used[],
*/ */
GLboolean GLboolean
_mesa_valid_register_index(const struct gl_context *ctx, _mesa_valid_register_index(const struct gl_context *ctx,
GLuint shaderType, gl_shader_type shaderType,
gl_register_file file, GLint index) gl_register_file file, GLint index)
{ {
const struct gl_program_constants *c; const struct gl_program_constants *c;

View File

@@ -168,7 +168,7 @@ _mesa_find_free_register(const GLboolean used[],
extern GLboolean extern GLboolean
_mesa_valid_register_index(const struct gl_context *ctx, _mesa_valid_register_index(const struct gl_context *ctx,
GLuint shaderType, gl_shader_type shaderType,
gl_register_file file, GLint index); gl_register_file file, GLint index);
extern void extern void

View File

@@ -170,6 +170,11 @@ struct st_context *st_create_context(gl_api api, struct pipe_context *pipe,
struct gl_context *shareCtx = share ? share->ctx : NULL; struct gl_context *shareCtx = share ? share->ctx : NULL;
struct dd_function_table funcs; struct dd_function_table funcs;
/* Sanity checks */
assert(MESA_SHADER_VERTEX == PIPE_SHADER_VERTEX);
assert(MESA_SHADER_FRAGMENT == PIPE_SHADER_FRAGMENT);
assert(MESA_SHADER_GEOMETRY == PIPE_SHADER_GEOMETRY);
memset(&funcs, 0, sizeof(funcs)); memset(&funcs, 0, sizeof(funcs));
st_init_driver_functions(&funcs); st_init_driver_functions(&funcs);

View File

@@ -67,7 +67,7 @@ void st_init_limits(struct st_context *st)
{ {
struct pipe_screen *screen = st->pipe->screen; struct pipe_screen *screen = st->pipe->screen;
struct gl_constants *c = &st->ctx->Const; struct gl_constants *c = &st->ctx->Const;
unsigned i; gl_shader_type sh;
c->MaxTextureLevels c->MaxTextureLevels
= _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS), = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS),
@@ -137,11 +137,12 @@ void st_init_limits(struct st_context *st)
/* Quads always follow GL provoking rules. */ /* Quads always follow GL provoking rules. */
c->QuadsFollowProvokingVertexConvention = GL_FALSE; c->QuadsFollowProvokingVertexConvention = GL_FALSE;
for(i = 0; i < MESA_SHADER_TYPES; ++i) { for (sh = 0; sh < MESA_SHADER_TYPES; ++sh) {
struct gl_shader_compiler_options *options = &st->ctx->ShaderCompilerOptions[i]; struct gl_shader_compiler_options *options =
&st->ctx->ShaderCompilerOptions[sh];
struct gl_program_constants *pc; struct gl_program_constants *pc;
switch(i)
{ switch (sh) {
case PIPE_SHADER_FRAGMENT: case PIPE_SHADER_FRAGMENT:
pc = &c->FragmentProgram; pc = &c->FragmentProgram;
break; break;
@@ -156,37 +157,37 @@ void st_init_limits(struct st_context *st)
continue; continue;
} }
pc->MaxNativeInstructions = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS); pc->MaxNativeInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS);
pc->MaxNativeAluInstructions = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS); pc->MaxNativeAluInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS);
pc->MaxNativeTexInstructions = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS); pc->MaxNativeTexInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS);
pc->MaxNativeTexIndirections = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS); pc->MaxNativeTexIndirections = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS);
pc->MaxNativeAttribs = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INPUTS); pc->MaxNativeAttribs = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INPUTS);
pc->MaxNativeTemps = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_TEMPS); pc->MaxNativeTemps = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEMPS);
pc->MaxNativeAddressRegs = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_ADDRS); pc->MaxNativeAddressRegs = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ADDRS);
pc->MaxNativeParameters = screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_CONSTS); pc->MaxNativeParameters = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONSTS);
pc->MaxUniformComponents = 4 * MIN2(pc->MaxNativeParameters, MAX_UNIFORMS); pc->MaxUniformComponents = 4 * MIN2(pc->MaxNativeParameters, MAX_UNIFORMS);
options->EmitNoNoise = TRUE; options->EmitNoNoise = TRUE;
/* TODO: make these more fine-grained if anyone needs it */ /* TODO: make these more fine-grained if anyone needs it */
options->EmitNoIfs = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH); options->EmitNoIfs = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH);
options->EmitNoLoops = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH); options->EmitNoLoops = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH);
options->EmitNoFunctions = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_SUBROUTINES); options->EmitNoFunctions = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES);
options->EmitNoMainReturn = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_SUBROUTINES); options->EmitNoMainReturn = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES);
options->EmitNoCont = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED); options->EmitNoCont = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED);
options->EmitNoIndirectInput = !screen->get_shader_param(screen, i, options->EmitNoIndirectInput = !screen->get_shader_param(screen, sh,
PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR); PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR);
options->EmitNoIndirectOutput = !screen->get_shader_param(screen, i, options->EmitNoIndirectOutput = !screen->get_shader_param(screen, sh,
PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR); PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR);
options->EmitNoIndirectTemp = !screen->get_shader_param(screen, i, options->EmitNoIndirectTemp = !screen->get_shader_param(screen, sh,
PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR); PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR);
options->EmitNoIndirectUniform = !screen->get_shader_param(screen, i, options->EmitNoIndirectUniform = !screen->get_shader_param(screen, sh,
PIPE_SHADER_CAP_INDIRECT_CONST_ADDR); PIPE_SHADER_CAP_INDIRECT_CONST_ADDR);
if(options->EmitNoLoops) if(options->EmitNoLoops)
options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536); options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536);
} }
/* PIPE_CAP_MAX_FS_INPUTS specifies the number of COLORn + GENERICn inputs /* PIPE_CAP_MAX_FS_INPUTS specifies the number of COLORn + GENERICn inputs