mesa: replace #defines with new gl_shader_type enum
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user