mesa/st: add support for emitting fine derivative opcodes
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
8ee74ce50f
commit
88b0c6403f
|
@ -458,7 +458,8 @@ void st_init_extensions(struct pipe_screen *screen,
|
|||
{ o(ARB_texture_multisample), PIPE_CAP_TEXTURE_MULTISAMPLE },
|
||||
{ o(ARB_texture_query_lod), PIPE_CAP_TEXTURE_QUERY_LOD },
|
||||
{ o(ARB_sample_shading), PIPE_CAP_SAMPLE_SHADING },
|
||||
{ o(ARB_draw_indirect), PIPE_CAP_DRAW_INDIRECT }
|
||||
{ o(ARB_draw_indirect), PIPE_CAP_DRAW_INDIRECT },
|
||||
{ o(ARB_derivative_control), PIPE_CAP_TGSI_FS_FINE_DERIVATIVE },
|
||||
};
|
||||
|
||||
/* Required: render target and sampler support */
|
||||
|
|
|
@ -1462,9 +1462,15 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
|
|||
break;
|
||||
|
||||
case ir_unop_dFdx:
|
||||
case ir_unop_dFdx_coarse:
|
||||
emit(ir, TGSI_OPCODE_DDX, result_dst, op[0]);
|
||||
break;
|
||||
case ir_unop_dFdx_fine:
|
||||
emit(ir, TGSI_OPCODE_DDX_FINE, result_dst, op[0]);
|
||||
break;
|
||||
case ir_unop_dFdy:
|
||||
case ir_unop_dFdy_coarse:
|
||||
case ir_unop_dFdy_fine:
|
||||
{
|
||||
/* The X component contains 1 or -1 depending on whether the framebuffer
|
||||
* is a FBO or the window system buffer, respectively.
|
||||
|
@ -1485,7 +1491,8 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
|
|||
st_src_reg temp = get_temp(glsl_type::vec4_type);
|
||||
|
||||
emit(ir, TGSI_OPCODE_MUL, st_dst_reg(temp), transform_y, op[0]);
|
||||
emit(ir, TGSI_OPCODE_DDY, result_dst, temp);
|
||||
emit(ir, ir->operation == ir_unop_dFdy_fine ?
|
||||
TGSI_OPCODE_DDY_FINE : TGSI_OPCODE_DDY, result_dst, temp);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue