Commit acfc58a7 authored by Paul Berry's avatar Paul Berry

glsl: Make more use of gl_shader_stage enum in ir_set_program_inouts.cpp.

Reviewed-by: default avatarKenneth Graunke <kenneth@whitecape.org>
Reviewed-by: default avatarBrian Paul <brianp@vmware.com>
parent 2adb9fea
......@@ -2351,7 +2351,7 @@ ir_has_call(ir_instruction *ir);
extern void
do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
GLenum shader_type);
gl_shader_stage shader_stage);
extern char *
prototype_string(const glsl_type *return_type, const char *name,
......
......@@ -46,10 +46,11 @@ namespace {
class ir_set_program_inouts_visitor : public ir_hierarchical_visitor {
public:
ir_set_program_inouts_visitor(struct gl_program *prog, GLenum shader_type)
ir_set_program_inouts_visitor(struct gl_program *prog,
gl_shader_stage shader_stage)
{
this->prog = prog;
this->shader_type = shader_type;
this->shader_stage = shader_stage;
}
~ir_set_program_inouts_visitor()
{
......@@ -67,7 +68,7 @@ private:
bool try_mark_partial_variable(ir_variable *var, ir_rvalue *index);
struct gl_program *prog;
GLenum shader_type;
gl_shader_stage shader_stage;
};
} /* anonymous namespace */
......@@ -124,13 +125,13 @@ void
ir_set_program_inouts_visitor::mark_whole_variable(ir_variable *var)
{
const glsl_type *type = var->type;
if (this->shader_type == GL_GEOMETRY_SHADER &&
if (this->shader_stage == MESA_SHADER_GEOMETRY &&
var->data.mode == ir_var_shader_in && type->is_array()) {
type = type->fields.array;
}
mark(this->prog, var, 0, type->count_attribute_slots(),
this->shader_type == GL_FRAGMENT_SHADER);
this->shader_stage == MESA_SHADER_FRAGMENT);
}
/* Default handler: Mark all the locations in the variable as used. */
......@@ -163,7 +164,7 @@ ir_set_program_inouts_visitor::try_mark_partial_variable(ir_variable *var,
{
const glsl_type *type = var->type;
if (this->shader_type == GL_GEOMETRY_SHADER &&
if (this->shader_stage == MESA_SHADER_GEOMETRY &&
var->data.mode == ir_var_shader_in) {
/* The only geometry shader input that is not an array is
* gl_PrimitiveIDIn, and in that case, this code will never be reached,
......@@ -227,7 +228,7 @@ ir_set_program_inouts_visitor::try_mark_partial_variable(ir_variable *var,
}
mark(this->prog, var, index_as_constant->value.u[0] * elem_width,
elem_width, this->shader_type == GL_FRAGMENT_SHADER);
elem_width, this->shader_stage == MESA_SHADER_FRAGMENT);
return true;
}
......@@ -245,7 +246,7 @@ ir_set_program_inouts_visitor::visit_enter(ir_dereference_array *ir)
*/
if (ir_dereference_variable * const deref_var =
inner_array->array->as_dereference_variable()) {
if (this->shader_type == GL_GEOMETRY_SHADER &&
if (this->shader_stage == MESA_SHADER_GEOMETRY &&
deref_var->var->data.mode == ir_var_shader_in) {
/* foo is a geometry shader input, so i is the vertex, and j the
* part of the input we're accessing.
......@@ -264,7 +265,7 @@ ir_set_program_inouts_visitor::visit_enter(ir_dereference_array *ir)
} else if (ir_dereference_variable * const deref_var =
ir->array->as_dereference_variable()) {
/* ir => foo[i], where foo is a variable. */
if (this->shader_type == GL_GEOMETRY_SHADER &&
if (this->shader_stage == MESA_SHADER_GEOMETRY &&
deref_var->var->data.mode == ir_var_shader_in) {
/* foo is a geometry shader input, so i is the vertex, and we're
* accessing the entire input.
......@@ -304,7 +305,7 @@ ir_set_program_inouts_visitor::visit_enter(ir_function_signature *ir)
ir_visitor_status
ir_set_program_inouts_visitor::visit_enter(ir_expression *ir)
{
if (this->shader_type == GL_FRAGMENT_SHADER &&
if (this->shader_stage == MESA_SHADER_FRAGMENT &&
ir->operation == ir_unop_dFdy) {
gl_fragment_program *fprog = (gl_fragment_program *) prog;
fprog->UsesDFdy = true;
......@@ -316,7 +317,7 @@ ir_visitor_status
ir_set_program_inouts_visitor::visit_enter(ir_discard *)
{
/* discards are only allowed in fragment shaders. */
assert(this->shader_type == GL_FRAGMENT_SHADER);
assert(this->shader_stage == MESA_SHADER_FRAGMENT);
gl_fragment_program *fprog = (gl_fragment_program *) prog;
fprog->UsesKill = true;
......@@ -334,14 +335,14 @@ ir_set_program_inouts_visitor::visit_enter(ir_texture *ir)
void
do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
GLenum shader_type)
gl_shader_stage shader_stage)
{
ir_set_program_inouts_visitor v(prog, shader_type);
ir_set_program_inouts_visitor v(prog, shader_stage);
prog->InputsRead = 0;
prog->OutputsWritten = 0;
prog->SystemValuesRead = 0;
if (shader_type == GL_FRAGMENT_SHADER) {
if (shader_stage == MESA_SHADER_FRAGMENT) {
gl_fragment_program *fprog = (gl_fragment_program *) prog;
memset(fprog->InterpQualifier, 0, sizeof(fprog->InterpQualifier));
fprog->IsCentroid = 0;
......
......@@ -242,7 +242,7 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
reparent_ir(shader->ir, shader->ir);
ralloc_free(mem_ctx);
do_set_program_inouts(shader->ir, prog, shader->base.Type);
do_set_program_inouts(shader->ir, prog, shader->base.Stage);
prog->SamplersUsed = shader->base.active_samplers;
_mesa_update_shader_textures_used(shProg, prog);
......
......@@ -2951,7 +2951,7 @@ get_mesa_program(struct gl_context *ctx,
*/
mesa_instructions = NULL;
do_set_program_inouts(shader->ir, prog, shader->Type);
do_set_program_inouts(shader->ir, prog, shader->Stage);
prog->SamplersUsed = shader->active_samplers;
prog->ShadowSamplers = shader->shadow_samplers;
......
......@@ -5154,7 +5154,7 @@ get_mesa_program(struct gl_context *ctx,
prog->Instructions = NULL;
prog->NumInstructions = 0;
do_set_program_inouts(shader->ir, prog, shader->Type);
do_set_program_inouts(shader->ir, prog, shader->Stage);
count_resources(v, prog);
_mesa_reference_program(ctx, &shader->Program, prog);
......
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