mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-29 04:10:53 +02:00
mesa/cs: Add a MESA_SHADER_COMPUTE stage and update switch statements.
This patch adds MESA_SHADER_COMPUTE to the gl_shader_stage enum. Also, where it is trivial to do so, it adds a compute shader case to switch statements that switch based on the type of shader. This avoids "unhandled switch case" compiler warnings. Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
28e526d558
commit
c61ec8d8e3
9 changed files with 52 additions and 1 deletions
|
|
@ -2155,6 +2155,12 @@ validate_explicit_location(const struct ast_type_qualifier *qual,
|
|||
|
||||
fail = true;
|
||||
break;
|
||||
|
||||
case MESA_SHADER_COMPUTE:
|
||||
_mesa_glsl_error(loc, state,
|
||||
"compute shader variables cannot be given "
|
||||
"explicit locations");
|
||||
return;
|
||||
};
|
||||
|
||||
if (fail) {
|
||||
|
|
@ -2337,6 +2343,9 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
|||
if (var->data.mode == ir_var_shader_in)
|
||||
var->data.invariant = true;
|
||||
break;
|
||||
case MESA_SHADER_COMPUTE:
|
||||
/* Invariance isn't meaningful in compute shaders. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -356,6 +356,7 @@ public:
|
|||
void generate_vs_special_vars();
|
||||
void generate_gs_special_vars();
|
||||
void generate_fs_special_vars();
|
||||
void generate_cs_special_vars();
|
||||
void generate_varyings();
|
||||
|
||||
private:
|
||||
|
|
@ -867,6 +868,16 @@ builtin_variable_generator::generate_fs_special_vars()
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generate variables which only exist in compute shaders.
|
||||
*/
|
||||
void
|
||||
builtin_variable_generator::generate_cs_special_vars()
|
||||
{
|
||||
/* TODO: finish this. */
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a single "varying" variable. The variable's type and direction (input
|
||||
* or output) are adjusted as appropriate for the type of shader being
|
||||
|
|
@ -888,6 +899,9 @@ builtin_variable_generator::add_varying(int slot, const glsl_type *type,
|
|||
case MESA_SHADER_FRAGMENT:
|
||||
add_input(slot, type, name);
|
||||
break;
|
||||
case MESA_SHADER_COMPUTE:
|
||||
/* Compute shaders don't have varyings. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -975,5 +989,8 @@ _mesa_glsl_initialize_variables(exec_list *instructions,
|
|||
case MESA_SHADER_FRAGMENT:
|
||||
gen.generate_fs_special_vars();
|
||||
break;
|
||||
case MESA_SHADER_COMPUTE:
|
||||
gen.generate_cs_special_vars();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,6 +58,8 @@ _mesa_shader_enum_to_shader_stage(GLenum v)
|
|||
return MESA_SHADER_FRAGMENT;
|
||||
case GL_GEOMETRY_SHADER:
|
||||
return MESA_SHADER_GEOMETRY;
|
||||
case GL_COMPUTE_SHADER:
|
||||
return MESA_SHADER_COMPUTE;
|
||||
default:
|
||||
assert(!"bad value in _mesa_shader_enum_to_shader_stage()");
|
||||
return MESA_SHADER_VERTEX;
|
||||
|
|
|
|||
|
|
@ -498,6 +498,14 @@ init_program_limits(struct gl_context *ctx, gl_shader_stage stage,
|
|||
prog->MaxInputComponents = 16 * 4; /* old limit not to break tnl and swrast */
|
||||
prog->MaxOutputComponents = 16 * 4; /* old limit not to break tnl and swrast */
|
||||
break;
|
||||
case MESA_SHADER_COMPUTE:
|
||||
prog->MaxParameters = 0; /* not meaningful for compute shaders */
|
||||
prog->MaxAttribs = 0; /* not meaningful for compute shaders */
|
||||
prog->MaxAddressRegs = 0; /* not meaningful for compute shaders */
|
||||
prog->MaxUniformComponents = 4 * MAX_UNIFORMS;
|
||||
prog->MaxInputComponents = 0; /* not meaningful for compute shaders */
|
||||
prog->MaxOutputComponents = 0; /* not meaningful for compute shaders */
|
||||
break;
|
||||
default:
|
||||
assert(0 && "Bad shader stage in init_program_limits()");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -406,9 +406,10 @@ typedef enum
|
|||
MESA_SHADER_VERTEX = 0,
|
||||
MESA_SHADER_GEOMETRY = 1,
|
||||
MESA_SHADER_FRAGMENT = 2,
|
||||
MESA_SHADER_COMPUTE = 3,
|
||||
} gl_shader_stage;
|
||||
|
||||
#define MESA_SHADER_STAGES (MESA_SHADER_FRAGMENT + 1)
|
||||
#define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -188,6 +188,8 @@ _mesa_validate_shader_target(const struct gl_context *ctx, GLenum type)
|
|||
return ctx == NULL || ctx->Extensions.ARB_vertex_shader;
|
||||
case GL_GEOMETRY_SHADER_ARB:
|
||||
return ctx == NULL || _mesa_has_geometry_shaders(ctx);
|
||||
case GL_COMPUTE_SHADER:
|
||||
return ctx == NULL || ctx->Extensions.ARB_compute_shader;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
@ -966,6 +968,9 @@ use_shader_program(struct gl_context *ctx, GLenum type,
|
|||
case GL_GEOMETRY_SHADER_ARB:
|
||||
/* Empty for now. */
|
||||
break;
|
||||
case GL_COMPUTE_SHADER:
|
||||
/* Empty for now. */
|
||||
break;
|
||||
case GL_FRAGMENT_SHADER:
|
||||
if (*target == ctx->Shader._CurrentFragmentProgram) {
|
||||
_mesa_reference_shader_program(ctx,
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ _mesa_shader_enum_to_shader_stage(GLenum v)
|
|||
return MESA_SHADER_FRAGMENT;
|
||||
case GL_GEOMETRY_SHADER:
|
||||
return MESA_SHADER_GEOMETRY;
|
||||
case GL_COMPUTE_SHADER:
|
||||
return MESA_SHADER_COMPUTE;
|
||||
default:
|
||||
ASSERT(0 && "bad value in _mesa_shader_enum_to_shader_stage()");
|
||||
return MESA_SHADER_VERTEX;
|
||||
|
|
|
|||
|
|
@ -1021,6 +1021,9 @@ _mesa_write_shader_to_file(const struct gl_shader *shader)
|
|||
case MESA_SHADER_GEOMETRY:
|
||||
type = "geom";
|
||||
break;
|
||||
case MESA_SHADER_COMPUTE:
|
||||
type = "comp";
|
||||
break;
|
||||
}
|
||||
|
||||
_mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type);
|
||||
|
|
|
|||
|
|
@ -202,6 +202,8 @@ _mesa_program_enum_to_shader_stage(GLenum v)
|
|||
return MESA_SHADER_FRAGMENT;
|
||||
case GL_GEOMETRY_PROGRAM_NV:
|
||||
return MESA_SHADER_GEOMETRY;
|
||||
case GL_COMPUTE_PROGRAM_NV:
|
||||
return MESA_SHADER_COMPUTE;
|
||||
default:
|
||||
ASSERT(0);
|
||||
return ~0;
|
||||
|
|
@ -219,6 +221,8 @@ _mesa_shader_stage_to_program(unsigned stage)
|
|||
return GL_FRAGMENT_PROGRAM_ARB;
|
||||
case MESA_SHADER_GEOMETRY:
|
||||
return GL_GEOMETRY_PROGRAM_NV;
|
||||
case MESA_SHADER_COMPUTE:
|
||||
return GL_COMPUTE_PROGRAM_NV;
|
||||
}
|
||||
|
||||
assert(!"Unexpected shader stage in _mesa_shader_stage_to_program");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue