mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 14:40:10 +01:00
i965: add support for ARB_shader_subroutine
This just adds some missing pieces to nir/i965, it is lightly tested on my Haswell. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
17f7148369
commit
80511d176a
9 changed files with 18 additions and 4 deletions
|
|
@ -111,7 +111,7 @@ GL 4.0, GLSL 4.00:
|
|||
- New overload resolution rules DONE
|
||||
GL_ARB_gpu_shader_fp64 DONE (nvc0, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_sample_shading DONE (i965, nv50, nvc0, r600, radeonsi)
|
||||
GL_ARB_shader_subroutine DONE (nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_shader_subroutine DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_tessellation_shader DONE (nvc0, radeonsi)
|
||||
GL_ARB_texture_buffer_object_rgb32 DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_texture_cube_map_array DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ Note: some of the new features are only available with certain drivers.
|
|||
<li>GL_ARB_get_texture_sub_image for all drivers</li>
|
||||
<li>GL_ARB_gpu_shader_fp64 on llvmpipe, radeonsi</li>
|
||||
<li>GL_ARB_shader_stencil_export on llvmpipe</li>
|
||||
<li>GL_ARB_shader_subroutine on core profile gallium drivers</li>
|
||||
<li>GL_ARB_shader_subroutine on core profile all drivers</li>
|
||||
<li>GL_ARB_tessellation_shader on nvc0, radeonsi</li>
|
||||
<li>GL_ARB_vertex_attrib_64bit on llvmpipe, radeonsi</li>
|
||||
<li>GL_ARB_viewport_array on radeonsi</li>
|
||||
|
|
|
|||
|
|
@ -1027,11 +1027,11 @@ glsl_type::component_slots() const
|
|||
|
||||
case GLSL_TYPE_IMAGE:
|
||||
return 1;
|
||||
|
||||
case GLSL_TYPE_SUBROUTINE:
|
||||
return 1;
|
||||
case GLSL_TYPE_SAMPLER:
|
||||
case GLSL_TYPE_ATOMIC_UINT:
|
||||
case GLSL_TYPE_VOID:
|
||||
case GLSL_TYPE_SUBROUTINE:
|
||||
case GLSL_TYPE_ERROR:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1171,6 +1171,7 @@ nir_visitor::visit(ir_expression *ir)
|
|||
case ir_unop_bitcast_f2i:
|
||||
case ir_unop_bitcast_u2f:
|
||||
case ir_unop_bitcast_f2u:
|
||||
case ir_unop_subroutine_to_int:
|
||||
/* no-op */
|
||||
emit(nir_op_imov, dest_size, srcs);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -481,6 +481,8 @@ fs_visitor::type_size(const struct glsl_type *type)
|
|||
return 0;
|
||||
case GLSL_TYPE_ATOMIC_UINT:
|
||||
return 0;
|
||||
case GLSL_TYPE_SUBROUTINE:
|
||||
return 1;
|
||||
case GLSL_TYPE_IMAGE:
|
||||
case GLSL_TYPE_VOID:
|
||||
case GLSL_TYPE_ERROR:
|
||||
|
|
|
|||
|
|
@ -243,6 +243,7 @@ ir_channel_expressions_visitor::visit_leave(ir_assignment *ir)
|
|||
case ir_unop_find_msb:
|
||||
case ir_unop_find_lsb:
|
||||
case ir_unop_saturate:
|
||||
case ir_unop_subroutine_to_int:
|
||||
for (i = 0; i < vector_elements; i++) {
|
||||
ir_rvalue *op0 = get_element(op_var[0], i);
|
||||
|
||||
|
|
|
|||
|
|
@ -430,6 +430,7 @@ brw_type_for_base_type(const struct glsl_type *type)
|
|||
return BRW_REGISTER_TYPE_F;
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_BOOL:
|
||||
case GLSL_TYPE_SUBROUTINE:
|
||||
return BRW_REGISTER_TYPE_D;
|
||||
case GLSL_TYPE_UINT:
|
||||
return BRW_REGISTER_TYPE_UD;
|
||||
|
|
|
|||
|
|
@ -603,6 +603,9 @@ type_size(const struct glsl_type *type)
|
|||
size += type_size(type->fields.structure[i].type);
|
||||
}
|
||||
return size;
|
||||
case GLSL_TYPE_SUBROUTINE:
|
||||
return 1;
|
||||
|
||||
case GLSL_TYPE_SAMPLER:
|
||||
/* Samplers take up no register space, since they're baked in at
|
||||
* link time.
|
||||
|
|
@ -1558,6 +1561,10 @@ vec4_visitor::visit(ir_expression *ir)
|
|||
case ir_unop_noise:
|
||||
unreachable("not reached: should be handled by lower_noise");
|
||||
|
||||
case ir_unop_subroutine_to_int:
|
||||
emit(MOV(result_dst, op[0]));
|
||||
break;
|
||||
|
||||
case ir_binop_add:
|
||||
emit(ADD(result_dst, op[0], op[1]));
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -311,6 +311,7 @@ intelInitExtensions(struct gl_context *ctx)
|
|||
* slightly differently when the extension is enabled.
|
||||
*/
|
||||
if (ctx->API == API_OPENGL_CORE) {
|
||||
ctx->Extensions.ARB_shader_subroutine = true;
|
||||
ctx->Extensions.ARB_viewport_array = true;
|
||||
ctx->Extensions.AMD_vertex_shader_viewport_index = true;
|
||||
}
|
||||
|
|
@ -343,6 +344,7 @@ intelInitExtensions(struct gl_context *ctx)
|
|||
if (ctx->API == API_OPENGL_CORE) {
|
||||
ctx->Extensions.ARB_viewport_array = true;
|
||||
ctx->Extensions.AMD_vertex_shader_viewport_index = true;
|
||||
ctx->Extensions.ARB_shader_subroutine = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue