static void brw_bind_rep_write_shader(struct brw_context *brw, float *color) { const char *vs_source = "#extension GL_AMD_vertex_shader_layer : enable\n" "#extension GL_ARB_draw_instanced : enable\n" "attribute vec4 position;\n" "uniform int layer;\n" "void main()\n" "{\n" "#ifdef GL_AMD_vertex_shader_layer\n" " gl_Layer = gl_InstanceID;\n" "#endif\n" " gl_Position = position;\n" "}\n"; const char *fs_source = "uniform vec4 color;\n" "void main()\n" "{\n" " gl_FragColor = color;\n" "}\n"; GLuint vs, fs; struct brw_fast_clear_state *clear = brw->fast_clear_state; struct gl_context *ctx = &brw->ctx; if (clear->shader_prog) { _mesa_UseProgram(clear->shader_prog); _mesa_Uniform4fv(clear->color_location, 1, color); return; } vs = _mesa_meta_compile_shader_with_debug(ctx, GL_VERTEX_SHADER, vs_source); fs = _mesa_meta_compile_shader_with_debug(ctx, GL_FRAGMENT_SHADER, fs_source); clear->shader_prog = _mesa_CreateProgram(); _mesa_AttachShader(clear->shader_prog, fs); _mesa_DeleteShader(fs); _mesa_AttachShader(clear->shader_prog, vs); _mesa_DeleteShader(vs); _mesa_BindAttribLocation(clear->shader_prog, 0, "position"); _mesa_ObjectLabel(GL_PROGRAM, clear->shader_prog, -1, "meta clear"); _mesa_LinkProgram(clear->shader_prog); clear->color_location = _mesa_GetUniformLocation(clear->shader_prog, "color"); _mesa_UseProgram(clear->shader_prog); _mesa_Uniform4fv(clear->color_location, 1, color); }
static void brw_bind_rep_write_shader(struct brw_context *brw, float *color) { const char *vs_source = "#extension GL_AMD_vertex_shader_layer : enable\n" "#extension GL_ARB_draw_instanced : enable\n" "#extension GL_ARB_explicit_attrib_location : enable\n" "layout(location = 0) in vec4 position;\n" "uniform int layer;\n" "void main()\n" "{\n" "#ifdef GL_AMD_vertex_shader_layer\n" " gl_Layer = gl_InstanceID;\n" "#endif\n" " gl_Position = position;\n" "}\n"; const char *fs_source = "uniform vec4 color;\n" "void main()\n" "{\n" " gl_FragColor = color;\n" "}\n"; struct brw_fast_clear_state *clear = brw->fast_clear_state; struct gl_context *ctx = &brw->ctx; if (clear->shader_prog) { _mesa_meta_use_program(ctx, clear->shader_prog); _mesa_Uniform4fv(clear->color_location, 1, color); return; } _mesa_meta_compile_and_link_program(ctx, vs_source, fs_source, "meta repclear", &clear->shader_prog); clear->color_location = _mesa_program_resource_location(clear->shader_prog, GL_UNIFORM, "color"); _mesa_meta_use_program(ctx, clear->shader_prog); _mesa_Uniform4fv(clear->color_location, 1, color); }