Commit 8668eaaa authored by Paul Berry's avatar Paul Berry

mesa: Use functions to convert gl_shader_stage to PROGRAM enum or pipe target.

Suggested-by: default avatarBrian Paul <brianp@vmware.com>
Reviewed-by: default avatarBrian Paul <brianp@vmware.com>
Reviewed-by: default avatarKenneth Graunke <kenneth@whitecape.org>

v2: Improve assert message.
parent e654216a
......@@ -2799,26 +2799,11 @@ get_mesa_program(struct gl_context *ctx,
ir_instruction **mesa_instruction_annotation;
int i;
struct gl_program *prog;
GLenum target;
GLenum target = _mesa_shader_stage_to_program(shader->Stage);
const char *target_string = _mesa_shader_stage_to_string(shader->Stage);
struct gl_shader_compiler_options *options =
&ctx->ShaderCompilerOptions[shader->Stage];
switch (shader->Stage) {
case MESA_SHADER_VERTEX:
target = GL_VERTEX_PROGRAM_ARB;
break;
case MESA_SHADER_FRAGMENT:
target = GL_FRAGMENT_PROGRAM_ARB;
break;
case MESA_SHADER_GEOMETRY:
target = GL_GEOMETRY_PROGRAM_NV;
break;
default:
assert(!"should not be reached");
return NULL;
}
validate_ir_tree(shader->ir);
prog = ctx->Driver.NewProgram(ctx, target, shader_program->Name);
......
......@@ -207,6 +207,24 @@ _mesa_program_enum_to_shader_stage(GLenum v)
}
}
static inline GLenum
_mesa_shader_stage_to_program(gl_shader_stage stage)
{
switch (stage) {
case MESA_SHADER_VERTEX:
return GL_VERTEX_PROGRAM_ARB;
case MESA_SHADER_FRAGMENT:
return GL_FRAGMENT_PROGRAM_ARB;
case MESA_SHADER_GEOMETRY:
return GL_GEOMETRY_PROGRAM_NV;
}
assert(!"Unexpected shader stage in _mesa_shader_stage_to_program");
return GL_VERTEX_PROGRAM_ARB;
}
static inline GLenum
_mesa_program_index_to_target(GLuint i)
{
......
......@@ -5023,6 +5023,24 @@ out:
}
/* ----------------------------- End TGSI code ------------------------------ */
static unsigned
shader_stage_to_ptarget(gl_shader_stage stage)
{
switch (stage) {
case MESA_SHADER_VERTEX:
return PIPE_SHADER_VERTEX;
case MESA_SHADER_FRAGMENT:
return PIPE_SHADER_FRAGMENT;
case MESA_SHADER_GEOMETRY:
return PIPE_SHADER_GEOMETRY;
}
assert(!"should not be reached");
return PIPE_SHADER_VERTEX;
}
/**
* Convert a shader's GLSL IR into a Mesa gl_program, although without
* generating Mesa IR.
......@@ -5034,30 +5052,12 @@ get_mesa_program(struct gl_context *ctx,
{
glsl_to_tgsi_visitor* v;
struct gl_program *prog;
GLenum target;
GLenum target = _mesa_shader_stage_to_program(shader->Stage);
bool progress;
struct gl_shader_compiler_options *options =
&ctx->ShaderCompilerOptions[_mesa_shader_enum_to_shader_stage(shader->Type)];
struct pipe_screen *pscreen = ctx->st->pipe->screen;
unsigned ptarget;
switch (shader->Type) {
case GL_VERTEX_SHADER:
target = GL_VERTEX_PROGRAM_ARB;
ptarget = PIPE_SHADER_VERTEX;
break;
case GL_FRAGMENT_SHADER:
target = GL_FRAGMENT_PROGRAM_ARB;
ptarget = PIPE_SHADER_FRAGMENT;
break;
case GL_GEOMETRY_SHADER:
target = GL_GEOMETRY_PROGRAM_NV;
ptarget = PIPE_SHADER_GEOMETRY;
break;
default:
assert(!"should not be reached");
return NULL;
}
unsigned ptarget = shader_stage_to_ptarget(shader->Stage);
validate_ir_tree(shader->ir);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment