On Fri, Jun 26, 2015 at 10:50 AM, Topi Pohjolainen <topi.pohjolai...@intel.com> wrote: > This is stimulating the shader binary re-use logic in i965 buffer > object uploading. Without relaxing the current constraints there > will be two identical copies in the cache. With the introduced > three patches the logic begins to share only one copy between > two entries in the cache. > > CC: Kenneth Graunke <kenn...@whitecape.org> > Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> > --- > tests/spec/gl-2.0/CMakeLists.gl.txt | 1 + > tests/spec/gl-2.0/reuse_fragment_shader.c | 105 > ++++++++++++++++++++++++++++++
also add to all.py? > 2 files changed, 106 insertions(+) > create mode 100644 tests/spec/gl-2.0/reuse_fragment_shader.c > > diff --git a/tests/spec/gl-2.0/CMakeLists.gl.txt > b/tests/spec/gl-2.0/CMakeLists.gl.txt > index 2ce99bd..54d420f 100644 > --- a/tests/spec/gl-2.0/CMakeLists.gl.txt > +++ b/tests/spec/gl-2.0/CMakeLists.gl.txt > @@ -15,3 +15,4 @@ piglit_add_executable (gl-2.0-edgeflag edgeflag.c) > piglit_add_executable (gl-2.0-edgeflag-immediate edgeflag-immediate.c) > piglit_add_executable (gl-2.0-vertexattribpointer vertexattribpointer.c) > piglit_add_executable (gl-2.0-vertex-const-attr vertex-const-attr.c) > +piglit_add_executable (gl-2.0-reuse_fragment_shader reuse_fragment_shader.c) > diff --git a/tests/spec/gl-2.0/reuse_fragment_shader.c > b/tests/spec/gl-2.0/reuse_fragment_shader.c > new file mode 100644 > index 0000000..bf10425 > --- /dev/null > +++ b/tests/spec/gl-2.0/reuse_fragment_shader.c > @@ -0,0 +1,105 @@ > +/* Copyright © 2015 Intel Corporation > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice (including the next > + * paragraph) shall be included in all copies or substantial portions of the > + * Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER > DEALINGS > + * IN THE SOFTWARE. > + */ > + > +/** @file reuse_fragment_shader.c > + * > + * Compile and run two programs that use the same vertex and fragment > + * shader objects. > + * > + * The spec says: "It is also permissible to attach a shader object to more > + * than one program object." > + */ > + > +#include "piglit-util-gl.h" > + > +PIGLIT_GL_TEST_CONFIG_BEGIN > + > + config.supports_gl_compat_version = 10; > + > + config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | > PIGLIT_GL_VISUAL_RGBA; > + > +PIGLIT_GL_TEST_CONFIG_END > + > +static const float green[] = {0, 1, 0, 0}; > +static const float blue[] = {0, 0, 1, 0}; > + > +static GLint prog_1; > +static GLint prog_2; > + > +enum piglit_result > +piglit_display(void) > +{ > + bool pass = true; > + > + glUseProgram(prog_2); > + piglit_draw_rect(-1, -1, 1, 2); > + > + glUseProgram(prog_1); > + piglit_draw_rect(0, -1, 1, 2); > + > + pass = piglit_probe_rect_rgba( > + 0, 0, piglit_width / 2, piglit_height, green); > + pass = piglit_probe_rect_rgba( > + piglit_width / 2, 0, > + piglit_width / 2, piglit_height, blue) && pass; > + piglit_present_results(); > + > + return pass ? PIGLIT_PASS : PIGLIT_FAIL; > +} > + > +static const char *vs_source = > + "void main()\n" > + "{\n" > + " gl_Position = gl_Vertex;\n" > + "}\n"; > + > +static const char *fs_source = > + "uniform vec4 color;\n" > + "\n" > + "void main()\n" > + "{\n" > + " gl_FragColor = color;\n" > + "}\n"; > + > +void > +piglit_init(int argc, char **argv) > +{ > + const GLuint fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, > + fs_source); > + const GLuint vs = piglit_compile_shader_text(GL_VERTEX_SHADER, > + vs_source); > + GLint color_loc_prog_1; > + GLint color_loc_prog_2; > + > + prog_1 = piglit_link_simple_program(vs, fs); > + glUseProgram(prog_1); > + color_loc_prog_1 = glGetUniformLocation(prog_1, "color"); > + glUniform4fv(color_loc_prog_1, 1, blue); > + > + prog_2 = piglit_link_simple_program(vs, fs); > + glUseProgram(prog_2); > + color_loc_prog_2 = glGetUniformLocation(prog_2, "color"); > + glUniform4fv(color_loc_prog_2, 1, green); > + > + glDeleteShader(vs); > + glDeleteShader(fs); > +} > -- > 1.9.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev