Browse Source

glsl_to_nir: drop supports_ints

At initial nir level all drivers are supporting ints.

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
tags/19.2-branchpoint
Christian Gmeiner 7 years ago
parent
commit
e00fa99b08
1 changed files with 8 additions and 23 deletions
  1. 8
    23
      src/compiler/glsl/glsl_to_nir.cpp

+ 8
- 23
src/compiler/glsl/glsl_to_nir.cpp View File

nir_alu_instr *emit(nir_op op, unsigned dest_size, nir_ssa_def *src1, nir_alu_instr *emit(nir_op op, unsigned dest_size, nir_ssa_def *src1,
nir_ssa_def *src2, nir_ssa_def *src3); nir_ssa_def *src2, nir_ssa_def *src3);


bool supports_ints;
bool supports_std430; bool supports_std430;


nir_shader *shader; nir_shader *shader;


nir_visitor::nir_visitor(gl_context *ctx, nir_shader *shader) nir_visitor::nir_visitor(gl_context *ctx, nir_shader *shader)
{ {
this->supports_ints = true;
this->supports_std430 = ctx->Const.UseSTD430AsDefaultPacking; this->supports_std430 = ctx->Const.UseSTD430AsDefaultPacking;
this->shader = shader; this->shader = shader;
this->is_global = true; this->is_global = true;
assert(cols == 1); assert(cols == 1);


for (unsigned r = 0; r < rows; r++) for (unsigned r = 0; r < rows; r++)
if (supports_ints)
ret->values[0][r].u32 = ir->value.u[r];
else
ret->values[0][r].f32 = ir->value.u[r];
ret->values[0][r].u32 = ir->value.u[r];


break; break;


assert(cols == 1); assert(cols == 1);


for (unsigned r = 0; r < rows; r++) for (unsigned r = 0; r < rows; r++)
if (supports_ints)
ret->values[0][r].i32 = ir->value.i[r];
else
ret->values[0][r].f32 = ir->value.i[r];
ret->values[0][r].i32 = ir->value.i[r];


break; break;




glsl_base_type types[4]; glsl_base_type types[4];
for (unsigned i = 0; i < ir->num_operands; i++) for (unsigned i = 0; i < ir->num_operands; i++)
if (supports_ints || !type_is_int(ir->operands[i]->type->base_type))
types[i] = ir->operands[i]->type->base_type;
else
types[i] = GLSL_TYPE_FLOAT;
types[i] = ir->operands[i]->type->base_type;


glsl_base_type out_type;
if (supports_ints || !type_is_int(ir->type->base_type))
out_type = ir->type->base_type;
else
out_type = GLSL_TYPE_FLOAT;
glsl_base_type out_type = ir->type->base_type;


switch (ir->operation) { switch (ir->operation) {
case ir_unop_bit_not: result = nir_inot(&b, srcs[0]); break; case ir_unop_bit_not: result = nir_inot(&b, srcs[0]); break;
case ir_unop_exp2: result = nir_fexp2(&b, srcs[0]); break; case ir_unop_exp2: result = nir_fexp2(&b, srcs[0]); break;
case ir_unop_log2: result = nir_flog2(&b, srcs[0]); break; case ir_unop_log2: result = nir_flog2(&b, srcs[0]); break;
case ir_unop_i2f: case ir_unop_i2f:
result = supports_ints ? nir_i2f32(&b, srcs[0]) : nir_fmov(&b, srcs[0]);
result = nir_i2f32(&b, srcs[0]);
break; break;
case ir_unop_u2f: case ir_unop_u2f:
result = supports_ints ? nir_u2f32(&b, srcs[0]) : nir_fmov(&b, srcs[0]);
result = nir_u2f32(&b, srcs[0]);
break; break;
case ir_unop_b2f: case ir_unop_b2f:
result = nir_b2f32(&b, srcs[0]); result = nir_b2f32(&b, srcs[0]);
break; break;
case ir_unop_f2i: case ir_unop_f2i:
result = supports_ints ? nir_f2i32(&b, srcs[0]) : nir_ftrunc(&b, srcs[0]);
result = nir_f2i32(&b, srcs[0]);
break; break;
case ir_unop_f2u: case ir_unop_f2u:
result = supports_ints ? nir_f2u32(&b, srcs[0]) : nir_ftrunc(&b, srcs[0]);
result = nir_f2u32(&b, srcs[0]);
break; break;
case ir_unop_f2b: case ir_unop_f2b:
case ir_unop_i2b: case ir_unop_i2b:

Loading…
Cancel
Save