Mesa (master): vbo: fix breakage from previous commit
Module: Mesa Branch: master Commit: 90d654b09d98fc597ca273c65c2b1b00a9c35f09 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=90d654b09d98fc597ca273c65c2b1b00a9c35f09 Author: Brian Paul Date: Wed Jan 11 20:23:07 2012 -0700 vbo: fix breakage from previous commit Don't know how that slipped by. --- src/mesa/vbo/vbo_exec_array.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index 89f032f..9861b21 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -114,7 +114,7 @@ vbo_get_minmax_index(struct gl_context *ctx, indices = (char *) ib->ptr + prim->start * index_size; if (_mesa_is_bufferobj(ib->obj)) { - GLsizeiptr size = MIN2(count * ib_size, index->obj->Size); + GLsizeiptr size = MIN2(count * index_size, ib->obj->Size); indices = ctx->Driver.MapBufferRange(ctx, (GLintptr) indices, size, GL_MAP_READ_BIT, ib->obj); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): vbo: fix void * arithmetic compilation error on MSVC
Module: Mesa Branch: master Commit: bbc74ffad6551272a4551f8dd9de5b34916c0ac2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bbc74ffad6551272a4551f8dd9de5b34916c0ac2 Author: Brian Paul Date: Wed Jan 11 20:03:32 2012 -0700 vbo: fix void * arithmetic compilation error on MSVC Also, call vbo_sizeof_ib_type() once and fix argument cast in MapBufferRange() call. --- src/mesa/vbo/vbo_exec_array.c |9 + 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index 263e429..89f032f 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -108,13 +108,14 @@ vbo_get_minmax_index(struct gl_context *ctx, { const GLboolean restart = ctx->Array.PrimitiveRestart; const GLuint restartIndex = ctx->Array.RestartIndex; - const void *indices; + const int index_size = vbo_sizeof_ib_type(ib->type); + const char *indices; GLuint i; - indices = (void *)ib->ptr + prim->start * vbo_sizeof_ib_type(ib->type); + indices = (char *) ib->ptr + prim->start * index_size; if (_mesa_is_bufferobj(ib->obj)) { - GLsizeiptr size = MIN2(count * vbo_sizeof_ib_type(ib->type), ib->obj->Size); - indices = ctx->Driver.MapBufferRange(ctx, (GLsizeiptr) indices, size, + GLsizeiptr size = MIN2(count * ib_size, index->obj->Size); + indices = ctx->Driver.MapBufferRange(ctx, (GLintptr) indices, size, GL_MAP_READ_BIT, ib->obj); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs/GL3: consolidate FBO extensions into one ARB
Module: Mesa Branch: master Commit: 4c0d88c14514346438c4d6c0c3af76a0deee2af6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4c0d88c14514346438c4d6c0c3af76a0deee2af6 Author: Marek Olšák Date: Thu Jan 12 03:52:06 2012 +0100 docs/GL3: consolidate FBO extensions into one ARB --- docs/GL3.txt |4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/docs/GL3.txt b/docs/GL3.txt index 4dfca64..f677b76 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -21,12 +21,10 @@ Float textures, renderbuffers (GL_ARB_texture_float) DONE (i965, r300, r600) GL_EXT_packed_float DONE (i965, r600) GL_EXT_texture_shared_exponentDONE (i965, r600, swrast) Float depth buffers (GL_ARB_depth_buffer_float) DONE (i965, r600) -Framebuffer objects (GL_EXT_framebuffer_object) DONE (i965, r300, r600, swrast) +Framebuffer objects (GL_ARB_framebuffer_object) DONE (i965, r300, r600, swrast) Half-floatDONE -Multisample blit DONE Non-normalized Integer texture/framebuffer formats~50% done 1D/2D Texture arrays DONE -Packed depth/stencil formats DONE Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE (i965, r600, swrast) GL_EXT_texture_compression_rgtc DONE (i965, r300, r600, swrast) Red and red/green texture formats DONE (i965, swrast, gallium) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs/GL3: document r300 extension support
Module: Mesa Branch: master Commit: 571e1947d0f9058a14b7f2b7798ebfacab1547a5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=571e1947d0f9058a14b7f2b7798ebfacab1547a5 Author: Marek Olšák Date: Thu Jan 12 03:27:27 2012 +0100 docs/GL3: document r300 extension support --- docs/GL3.txt | 48 1 files changed, 24 insertions(+), 24 deletions(-) diff --git a/docs/GL3.txt b/docs/GL3.txt index 91f42ee..4dfca64 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -14,24 +14,24 @@ GL 3.0: GLSL 1.30 DONE glBindFragDataLocation, glGetFragDataLocation DONE -Conditional rendering (GL_NV_conditional_render) DONE (i965, r600, swrast) -Map buffer subranges (GL_ARB_map_buffer_range)DONE (i965, r600, swrast) -Clamping controls (GL_ARB_color_buffer_float) DONE (i965, r600) -Float textures, renderbuffers (GL_ARB_texture_float) DONE (i965, r600) +Conditional rendering (GL_NV_conditional_render) DONE (i965, r300, r600, swrast) +Map buffer subranges (GL_ARB_map_buffer_range)DONE (i965, r300, r600, swrast) +Clamping controls (GL_ARB_color_buffer_float) DONE (i965, r300, r600) +Float textures, renderbuffers (GL_ARB_texture_float) DONE (i965, r300, r600) GL_EXT_packed_float DONE (i965, r600) GL_EXT_texture_shared_exponentDONE (i965, r600, swrast) Float depth buffers (GL_ARB_depth_buffer_float) DONE (i965, r600) -Framebuffer objects (GL_EXT_framebuffer_object) DONE (i965, r600, swrast) +Framebuffer objects (GL_EXT_framebuffer_object) DONE (i965, r300, r600, swrast) Half-floatDONE Multisample blit DONE Non-normalized Integer texture/framebuffer formats~50% done 1D/2D Texture arrays DONE Packed depth/stencil formats DONE Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE (i965, r600, swrast) -GL_EXT_texture_compression_rgtc DONE (i965, r600, swrast) +GL_EXT_texture_compression_rgtc DONE (i965, r300, r600, swrast) Red and red/green texture formats DONE (i965, swrast, gallium) Transform feedback (GL_EXT_transform_feedback)DONE (i965) -Vertex array objects (GL_APPLE_vertex_array_object) DONE (i965, r600, swrast) +Vertex array objects (GL_APPLE_vertex_array_object) DONE (i965, r300, r600, swrast) sRGB framebuffer format (GL_EXT_framebuffer_sRGB) DONE (i965, r600) glClearBuffer commandsDONE glGetStringi command DONE @@ -46,13 +46,13 @@ GL 3.1: GLSL 1.40 not started Instanced drawing (GL_ARB_draw_instanced) DONE (gallium, swrast) -Buffer copying (GL_ARB_copy_buffer) DONE (i965, r600, swrast) +Buffer copying (GL_ARB_copy_buffer) DONE (i965, r300, r600, swrast) Primitive restart (GL_NV_primitive_restart) DONE (r600) 16 vertex texture image units DONE Texture buffer objs (GL_ARB_texture_buffer_object)not started -Rectangular textures (GL_ARB_texture_rectangle) DONE (i965, r600, swrast) +Rectangular textures (GL_ARB_texture_rectangle) DONE (i965, r300, r600, swrast) Uniform buffer objs (GL_ARB_uniform_buffer_object)not started -Signed normalized textures (GL_EXT_texture_snorm) DONE (i965, r600) +Signed normalized textures (GL_EXT_texture_snorm) DONE (i965, r300, r600) GL 3.2: @@ -60,14 +60,14 @@ GL 3.2: Core/compatibility profiles not started GLSL 1.50 not started Geometry shaders (GL_ARB_geometry_shader4)partially done (Zack) -BGRA vertex order (GL_ARB_vertex_array_bgra) DONE (i965, r600, swrast) -Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (i965, r600, swrast) -Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r600, swrast) -Provoking vertex (GL_ARB_provoking_vertex)DONE (i965, r600, swrast) +BGRA vertex order (GL_ARB_vertex_array_bgra) DONE (i965, r300, r600, swrast) +Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (i965, r300, r600, swrast) +Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r300, r600, swrast) +Provoking vertex (GL_ARB_provoking_vertex)DONE (i965, r300, r600, swrast) Seamless cubemaps (GL_ARB_seamless_cube_map) DONE (i965, r600) Multisample textures (GL_ARB_texture_multisample) not started Frag depth clamp (GL_ARB_depth_clamp) DONE (i965, r600, swrast) -Fence objects (GL_ARB_sync) DONE (i965, r600, swrast) +Fence objects (GL_ARB_sync) DONE (i965, r
Mesa (master): docs/GL3: document what's missing for GL3
Module: Mesa Branch: master Commit: 272896b885a942b993afb3926a5b6c3ad5abca74 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=272896b885a942b993afb3926a5b6c3ad5abca74 Author: Marek Olšák Date: Thu Jan 12 03:26:09 2012 +0100 docs/GL3: document what's missing for GL3 --- docs/GL3.txt |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/GL3.txt b/docs/GL3.txt index 069d36d..91f42ee 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -36,8 +36,8 @@ sRGB framebuffer format (GL_EXT_framebuffer_sRGB) DONE (i965, r600) glClearBuffer commandsDONE glGetStringi command DONE glTexParameterI, glGetTexParameterI commands DONE -glVertexAttribI commands DONE (but converts int -values to floats) +glVertexAttribI commands ~50% done (converts int + values to floats) Depth format cube texturesDONE GLX_ARB_create_context (GLX 1.4 is required) DONE ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): vbo: introduce vbo_get_minmax_indices function
Module: Mesa Branch: master Commit: 42d4972bf0b147b0241c2be7e6579fd64cf2c216 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=42d4972bf0b147b0241c2be7e6579fd64cf2c216 Author: Yuanhan Liu Date: Sat Dec 31 14:22:46 2011 +0800 vbo: introduce vbo_get_minmax_indices function Introduce vbo_get_minmax_indices() function to handle the min/max index computation for nr_prims(>= 1). The old code just compute the first prim's min/max index; this would results an error rendering if user called functions like glMultiDrawElements(). This patch servers as fixing this issue. As when nr_prims = 1, we can pass 1 to paramter nr_prims, thus I made vbo_get_minmax_index() static. v2: per Roland's suggestion, put the indices address compuation into vbo_get_minmax_index() instead. Also do comination if possible to reduce map/unmap count v3: per Brian's suggestion, use a pointer for start_prim to avoid structure copy per loop. Signed-off-by: Yuanhan Liu Reviewed-by: Roland Scheidegger Reviewed-by: Brian Paul --- src/mesa/drivers/dri/i965/brw_draw.c |2 +- src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c |3 +- src/mesa/main/api_validate.c |2 +- src/mesa/state_tracker/st_draw.c |3 +- src/mesa/state_tracker/st_draw_feedback.c|2 +- src/mesa/tnl/t_draw.c|2 +- src/mesa/vbo/vbo.h |6 ++-- src/mesa/vbo/vbo_exec_array.c| 50 + 8 files changed, 53 insertions(+), 17 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c index 621195d..f50fffd 100644 --- a/src/mesa/drivers/dri/i965/brw_draw.c +++ b/src/mesa/drivers/dri/i965/brw_draw.c @@ -586,7 +586,7 @@ void brw_draw_prims( struct gl_context *ctx, if (!vbo_all_varyings_in_vbos(arrays)) { if (!index_bounds_valid) -vbo_get_minmax_index(ctx, prim, ib, &min_index, &max_index); +vbo_get_minmax_indices(ctx, prim, ib, &min_index, &max_index, nr_prims); /* Decide if we want to rebase. If so we end up recursing once * only into this function. diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c index de04d18..59f1542 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c @@ -437,7 +437,8 @@ TAG(vbo_render_prims)(struct gl_context *ctx, struct nouveau_render_state *render = to_render_state(ctx); if (!index_bounds_valid) - vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index); + vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index, + nr_prims); vbo_choose_render_mode(ctx, arrays); vbo_choose_attrs(ctx, arrays); diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index 945f127..b6871d0 100644 --- a/src/mesa/main/api_validate.c +++ b/src/mesa/main/api_validate.c @@ -184,7 +184,7 @@ check_index_bounds(struct gl_context *ctx, GLsizei count, GLenum type, ib.ptr = indices; ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; - vbo_get_minmax_index(ctx, &prim, &ib, &min, &max); + vbo_get_minmax_indices(ctx, &prim, &ib, &min, &max, 1); if ((int)(min + basevertex) < 0 || max + basevertex > ctx->Array.ArrayObj->_MaxElement) { diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 6d6fc85..c0554cf 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -990,7 +990,8 @@ st_draw_vbo(struct gl_context *ctx, /* Gallium probably doesn't want this in some cases. */ if (!index_bounds_valid) if (!all_varyings_in_vbos(arrays)) -vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index); +vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index, + nr_prims); for (i = 0; i < nr_prims; i++) { num_instances = MAX2(num_instances, prims[i].num_instances); diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c index fbf0349..a559b73 100644 --- a/src/mesa/state_tracker/st_draw_feedback.c +++ b/src/mesa/state_tracker/st_draw_feedback.c @@ -119,7 +119,7 @@ st_feedback_draw_vbo(struct gl_context *ctx, st_validate_state(st); if (!index_bounds_valid) - vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index); + vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index, nr_prims); /* must get these after state validation! */ vp = st->vp; diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c index f949c34..17042cf 100644 --- a/src/mesa/tnl/t_draw.c +++ b/src/mesa/tnl/t_draw.c @@ -418,7 +418,7 @@ void _tnl_vbo_draw_prims(struct gl_context *ctx, struct gl_transform_feedback_object *tfb_vertcount) {
Mesa (8.0): mesa: remove const qualifier from fProg to silence warning
Module: Mesa Branch: 8.0 Commit: 9489ae8938b74551913337876656bcb9178a8905 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9489ae8938b74551913337876656bcb9178a8905 Author: Brian Paul Date: Wed Jan 11 18:19:37 2012 -0700 mesa: remove const qualifier from fProg to silence warning The args to _mesa_reference_shader_program() can't be const. (cherry picked from commit 459a44460e4d31d69d7ff04c1000917ca7870ff3) --- src/mesa/main/state.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index 56bb797..b910543 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -228,7 +228,7 @@ update_program(struct gl_context *ctx) { const struct gl_shader_program *vsProg = ctx->Shader.CurrentVertexProgram; const struct gl_shader_program *gsProg = ctx->Shader.CurrentGeometryProgram; - const struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram; + struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram; const struct gl_vertex_program *prevVP = ctx->VertexProgram._Current; const struct gl_fragment_program *prevFP = ctx->FragmentProgram._Current; const struct gl_geometry_program *prevGP = ctx->GeometryProgram._Current; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (8.0): mesa: include uniforms.h to silence warning, remove unused var
Module: Mesa Branch: 8.0 Commit: b8af8b83cf3d42dd286c8de062ab9f5fee84d397 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8af8b83cf3d42dd286c8de062ab9f5fee84d397 Author: Brian Paul Date: Wed Jan 11 18:19:09 2012 -0700 mesa: include uniforms.h to silence warning, remove unused var (cherry picked from commit fe1b38960b44135f6557a1e7a9fb5adc66d0edbb) --- src/mesa/main/shaderapi.c |3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 5bfe217..8b68ebf 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -45,6 +45,7 @@ #include "main/mtypes.h" #include "main/shaderapi.h" #include "main/shaderobj.h" +#include "main/uniforms.h" #include "program/program.h" #include "program/prog_parameter.h" #include "ralloc.h" @@ -936,8 +937,6 @@ static GLboolean validate_shader_program(const struct gl_shader_program *shProg, char *errMsg) { - unsigned i; - if (!shProg->LinkStatus) { return GL_FALSE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: remove const qualifier from fProg to silence warning
Module: Mesa Branch: master Commit: 459a44460e4d31d69d7ff04c1000917ca7870ff3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=459a44460e4d31d69d7ff04c1000917ca7870ff3 Author: Brian Paul Date: Wed Jan 11 18:19:37 2012 -0700 mesa: remove const qualifier from fProg to silence warning The args to _mesa_reference_shader_program() can't be const. --- src/mesa/main/state.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index 56bb797..b910543 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -228,7 +228,7 @@ update_program(struct gl_context *ctx) { const struct gl_shader_program *vsProg = ctx->Shader.CurrentVertexProgram; const struct gl_shader_program *gsProg = ctx->Shader.CurrentGeometryProgram; - const struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram; + struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram; const struct gl_vertex_program *prevVP = ctx->VertexProgram._Current; const struct gl_fragment_program *prevFP = ctx->FragmentProgram._Current; const struct gl_geometry_program *prevGP = ctx->GeometryProgram._Current; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: include uniforms.h to silence warning, remove unused var
Module: Mesa Branch: master Commit: fe1b38960b44135f6557a1e7a9fb5adc66d0edbb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe1b38960b44135f6557a1e7a9fb5adc66d0edbb Author: Brian Paul Date: Wed Jan 11 18:19:09 2012 -0700 mesa: include uniforms.h to silence warning, remove unused var --- src/mesa/main/shaderapi.c |3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 5bfe217..8b68ebf 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -45,6 +45,7 @@ #include "main/mtypes.h" #include "main/shaderapi.h" #include "main/shaderobj.h" +#include "main/uniforms.h" #include "program/program.h" #include "program/prog_parameter.h" #include "ralloc.h" @@ -936,8 +937,6 @@ static GLboolean validate_shader_program(const struct gl_shader_program *shProg, char *errMsg) { - unsigned i; - if (!shProg->LinkStatus) { return GL_FALSE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (8.0): mesa: Include glx tests Makefile.in in tarball
Module: Mesa Branch: 8.0 Commit: 6fe42b603d0ec9e13a8b7d6c46c6d89da3a6a614 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6fe42b603d0ec9e13a8b7d6c46c6d89da3a6a614 Author: Jakob Bornecrantz Date: Thu Jan 12 00:36:23 2012 +0100 mesa: Include glx tests Makefile.in in tarball Fix suggested by Kenneth Graunke. Signed-off-by: Jakob Bornecrantz Kenneth Graunke --- Makefile |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/Makefile b/Makefile index 4a41948..1fa369a 100644 --- a/Makefile +++ b/Makefile @@ -191,6 +191,8 @@ PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION) EXTRA_FILES = \ aclocal.m4 \ configure \ + tests/Makefile.in \ + tests/glx/Makefile.in \ src/glsl/glsl_parser.cpp\ src/glsl/glsl_parser.h \ src/glsl/glsl_lexer.cpp \ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Include glx tests Makefile.in in tarball
Module: Mesa Branch: master Commit: 6fe42b603d0ec9e13a8b7d6c46c6d89da3a6a614 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6fe42b603d0ec9e13a8b7d6c46c6d89da3a6a614 Author: Jakob Bornecrantz Date: Thu Jan 12 00:36:23 2012 +0100 mesa: Include glx tests Makefile.in in tarball Fix suggested by Kenneth Graunke. Signed-off-by: Jakob Bornecrantz Kenneth Graunke --- Makefile |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/Makefile b/Makefile index 4a41948..1fa369a 100644 --- a/Makefile +++ b/Makefile @@ -191,6 +191,8 @@ PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION) EXTRA_FILES = \ aclocal.m4 \ configure \ + tests/Makefile.in \ + tests/glx/Makefile.in \ src/glsl/glsl_parser.cpp\ src/glsl/glsl_parser.h \ src/glsl/glsl_lexer.cpp \ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Enable is_front_buffer_rendering variable in case of GL_FRONT_AND_BACK
Module: Mesa Branch: master Commit: c979fe3e200f42ff1fad75ebdbebe69da27e1aaa URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c979fe3e200f42ff1fad75ebdbebe69da27e1aaa Author: Anuj Phogat Date: Fri Jan 6 12:48:45 2012 -0800 Enable is_front_buffer_rendering variable in case of GL_FRONT_AND_BACK glDrawBuffer(GL_FRONT_AND_BACK) results in to segmentation fault if intel->is_front_buffer_rendering is not enabled with GL_FRONT_AND_BACK. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44153 Reported-by: Yi Sun Signed-off-by: Anuj Phogat Reviewed-by: Eric Anholt --- src/mesa/drivers/dri/intel/intel_buffers.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_buffers.c b/src/mesa/drivers/dri/intel/intel_buffers.c index 4632751..9809f79 100644 --- a/src/mesa/drivers/dri/intel/intel_buffers.c +++ b/src/mesa/drivers/dri/intel/intel_buffers.c @@ -88,7 +88,7 @@ intelDrawBuffer(struct gl_context * ctx, GLenum mode) intel->is_front_buffer_rendering; intel->is_front_buffer_rendering = (mode == GL_FRONT_LEFT) - || (mode == GL_FRONT); + || (mode == GL_FRONT) || (mode == GL_FRONT_AND_BACK); /* If we weren't front-buffer rendering before but we are now, * invalidate our DRI drawable so we'll ask for new buffers ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): rbug: Silence warning
Module: Mesa Branch: master Commit: c076882fbd933e973dfd079289f8e9d7deb7b0dd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c076882fbd933e973dfd079289f8e9d7deb7b0dd Author: Jakob Bornecrantz Date: Mon Jan 9 14:53:42 2012 +0100 rbug: Silence warning Signed-off-by: Jakob Bornecrantz Reviewed-by Brian Paul --- src/gallium/drivers/rbug/rbug_core.c |3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/rbug/rbug_core.c b/src/gallium/drivers/rbug/rbug_core.c index b80bcd4..253d21b 100644 --- a/src/gallium/drivers/rbug/rbug_core.c +++ b/src/gallium/drivers/rbug/rbug_core.c @@ -104,7 +104,8 @@ rbug_shader_create_locked(struct pipe_context *pipe, struct tgsi_token *tokens) { void *state = NULL; - struct pipe_shader_state pss = { 0 }; + struct pipe_shader_state pss; + memset(&pss, 0, sizeof(pss)); pss.tokens = tokens; switch(rb_shader->type) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Remove unused opengl version macro
Module: Mesa Branch: master Commit: 04e262ebe978872b7da0a04ae1fe6fe2129743fc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=04e262ebe978872b7da0a04ae1fe6fe2129743fc Author: Jakob Bornecrantz Date: Wed Jan 11 23:17:37 2012 +0100 mesa: Remove unused opengl version macro Signed-off-by: Jakob Bornecrantz Reviewed-by: Brian Paul --- src/mesa/main/version.h | 11 --- 1 files changed, 0 insertions(+), 11 deletions(-) diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h index d288c4d..8723c1f 100644 --- a/src/mesa/main/version.h +++ b/src/mesa/main/version.h @@ -42,17 +42,6 @@ struct gl_context; #define MESA_VERSION_CODE MESA_VERSION(MESA_MAJOR, MESA_MINOR, MESA_PATCH) -/* OpenGL API version */ -#define OPENGL_MAJOR 2 -#define OPENGL_MINOR 1 -#define OPENGL_PATCH 0 -#define OPENGL_VERSION_STRING "2.1" - -/* To make version comparison easy */ -#define OPENGL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -#define OPENGL_VERSION_CODE OPENGL_VERSION(OPENGL_MAJOR, OPENGL_MINOR, OPENGL_PATCH) - - extern void _mesa_compute_version(struct gl_context *ctx); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: Don't use _mesa_ir_link_shader to do our dirty work
Module: Mesa Branch: master Commit: 1c177452005a0366db01629d875da553f7949ddd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c177452005a0366db01629d875da553f7949ddd Author: Ian Romanick Date: Fri Jan 6 16:26:49 2012 -0800 i965: Don't use _mesa_ir_link_shader to do our dirty work Instead, do the uniform setting and input / output mapping directly in brw_link_shader. Hurray for not generating Mesa IR! However, once the i965 driver stops calling _mesa_ir_link_shader, UsesClipDistance and UsesKill are no longer set. Ideally gen6_upload_vs_push_constants should use the gl_shader_program, but I don't see a way to propagate the information there. The other alternative, since this is the only usage, is to move gl_vertex_program::UsesClipDistance to brw_vertex_program. The compile (and precompile) stages use UsesKill to determine the cache key for the shader. This is then used to determine whether or not to compile the shader. Calculating this data during compilation is too late. Signed-off-by: Ian Romanick Acked-by: Kenneth Graunke Acked-by: Eric Anholt --- src/mesa/drivers/dri/i965/brw_shader.cpp | 92 +++-- 1 files changed, 85 insertions(+), 7 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp index 1845c3d..ef0f09d 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.cpp +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -77,22 +77,63 @@ brw_shader_precompile(struct gl_context *ctx, struct gl_shader_program *prog) } GLboolean -brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) +brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg) { struct brw_context *brw = brw_context(ctx); struct intel_context *intel = &brw->intel; unsigned int stage; - if (!_mesa_ir_link_shader(ctx, prog)) - return false; - - for (stage = 0; stage < ARRAY_SIZE(prog->_LinkedShaders); stage++) { + for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders); stage++) { struct brw_shader *shader = -(struct brw_shader *)prog->_LinkedShaders[stage]; +(struct brw_shader *)shProg->_LinkedShaders[stage]; + static const GLenum targets[] = { +GL_VERTEX_PROGRAM_ARB, +GL_FRAGMENT_PROGRAM_ARB, +GL_GEOMETRY_PROGRAM_NV + }; if (!shader) continue; + struct gl_program *prog = +ctx->Driver.NewProgram(ctx, targets[stage], shader->base.Name); + if (!prog) + return NULL; + prog->Parameters = _mesa_new_parameter_list(); + + _mesa_generate_parameters_list_for_uniforms(shProg, &shader->base, + prog->Parameters); + + if (stage == 0) { +struct gl_vertex_program *vp = (struct gl_vertex_program *) prog; +vp->UsesClipDistance = shProg->Vert.UsesClipDistance; + } + + if (stage == 1) { +class uses_kill_visitor : public ir_hierarchical_visitor { +public: + uses_kill_visitor() : uses_kill(false) + { + /* empty */ + } + + virtual ir_visitor_status visit_enter(class ir_discard *ir) + { + this->uses_kill = true; + return visit_stop; + } + + bool uses_kill; +}; + +uses_kill_visitor v; + +v.run(shader->base.ir); + +struct gl_fragment_program *fp = (struct gl_fragment_program *) prog; +fp->UsesKill = v.uses_kill; + } + void *mem_ctx = ralloc_context(NULL); bool progress; @@ -147,13 +188,50 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) || progress; } while (progress); + /* Make a pass over the IR to add state references for any built-in + * uniforms that are used. This has to be done now (during linking). + * Code generation doesn't happen until the first time this shader is + * used for rendering. Waiting until then to generate the parameters is + * too late. At that point, the values for the built-in informs won't + * get sent to the shader. + */ + foreach_list(node, shader->ir) { +ir_variable *var = ((ir_instruction *) node)->as_variable(); + +if ((var == NULL) || (var->mode != ir_var_uniform) +|| (strncmp(var->name, "gl_", 3) != 0)) + continue; + +const ir_state_slot *const slots = var->state_slots; +assert(var->state_slots != NULL); + +for (unsigned int i = 0; i < var->num_state_slots; i++) { + _mesa_add_state_reference(prog->Parameters, + (gl_state_index *) slots[i].tokens); +} + } + validate_ir_tree(shader->ir); reparent_ir(shader->ir, shader->ir); ralloc_free(mem_ctx); + + do_set_program_inouts(shader->ir, prog, + shader->base.Type == GL_FRAGMENT_SHADER
Mesa (master): i965: Don't calculate masks of used FS inputs
Module: Mesa Branch: master Commit: efdc8bf1894790a85c118881395a998cbae34c1a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=efdc8bf1894790a85c118881395a998cbae34c1a Author: Ian Romanick Date: Fri Jan 6 14:49:02 2012 -0800 i965: Don't calculate masks of used FS inputs This previously enabled some optimizations in the fragment shader (interpolation, etc.) if some input components were always 0.0 or 1.0. However, this data was generated by analyzing Mesa IR. The next patch in this series removes generation of Mesa IR for GLSL paths. When we detect that case, just set the used mask to ~0 and circumvent the optimizations. Signed-off-by: Ian Romanick Reviewed-by: Eric Anholt Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_vs_constval.c | 15 +++ 1 files changed, 15 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vs_constval.c b/src/mesa/drivers/dri/i965/brw_vs_constval.c index 9ce5ab3..5b26c7a 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_constval.c +++ b/src/mesa/drivers/dri/i965/brw_vs_constval.c @@ -195,6 +195,21 @@ static void calc_wm_input_sizes( struct brw_context *brw ) GLuint insn; GLuint i; + /* Mesa IR is not generated for GLSL vertex shaders. If there's no Mesa +* IR, the code below cannot determine which output components are +* written. So, skip it and assume everything is written. This +* circumvents some optimizations in the fragment shader, but it guarantees +* that correct code is generated. +*/ + if (vp->program.Base.NumInstructions == 0) { + brw->wm.input_size_masks[0] = ~0; + brw->wm.input_size_masks[1] = ~0; + brw->wm.input_size_masks[2] = ~0; + brw->wm.input_size_masks[3] = ~0; + return; + } + + memset(&t, 0, sizeof(t)); /* _NEW_LIGHT | _NEW_PROGRAM */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): linker: Calculate used samplers and shadow samplers in the linker
Module: Mesa Branch: master Commit: 6c0df75803e1944f82a1468dcca47d23de82ea6b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c0df75803e1944f82a1468dcca47d23de82ea6b Author: Ian Romanick Date: Mon Nov 14 21:58:50 2011 -0800 linker: Calculate used samplers and shadow samplers in the linker It used to be done in ir_to_mesa, and that was kind of a bad place. I didn't change st_glsl_to_tgsi because there is some strange stuff happening in the code that generates glDrawPixels shaders. It looked like this would break horribly if I touched anything. Signed-off-by: Ian Romanick Reviewed-by: Eric Anholt Reviewed-by: Kenneth Graunke --- src/glsl/link_uniforms.cpp | 45 ++- src/mesa/main/mtypes.h | 14 +-- src/mesa/main/uniform_query.cpp | 13 --- src/mesa/program/ir_to_mesa.cpp | 31 +++--- 4 files changed, 64 insertions(+), 39 deletions(-) diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp index 47d34cf..02f57d9 100644 --- a/src/glsl/link_uniforms.cpp +++ b/src/glsl/link_uniforms.cpp @@ -212,6 +212,12 @@ public: memset(this->targets, 0, sizeof(this->targets)); } + void start_shader() + { + this->shader_samplers_used = 0; + this->shader_shadow_samplers = 0; + } + private: virtual void visit_field(const glsl_type *type, const char *name) { @@ -230,8 +236,25 @@ private: * example, we may be processing the uniform in the fragment shader, but * the uniform was already processed in the vertex shader. */ - if (this->uniforms[id].storage != NULL) + if (this->uniforms[id].storage != NULL) { +/* If the uniform already has storage set from another shader stage, + * mark the samplers used for this shader stage. + */ +if (type->contains_sampler()) { + const unsigned count = MAX2(1, this->uniforms[id].array_elements); + const unsigned shadow = (type->is_array()) + ? type->fields.array->sampler_shadow : type->sampler_shadow; + + for (unsigned i = 0; i < count; i++) { + const unsigned s = this->uniforms[id].sampler + i; + + this->shader_samplers_used |= 1U << s; + this->shader_shadow_samplers |= shadow << s; + } +} + return; + } const glsl_type *base_type; if (type->is_array()) { @@ -251,10 +274,13 @@ private: this->next_sampler += MAX2(1, this->uniforms[id].array_elements); const gl_texture_index target = base_type->sampler_index(); +const unsigned shadow = base_type->sampler_shadow; for (unsigned i = this->uniforms[id].sampler ; i < this->next_sampler ; i++) { this->targets[i] = target; + this->shader_samplers_used |= 1U << i; + this->shader_shadow_samplers |= shadow << i; } } else { @@ -280,6 +306,16 @@ public: union gl_constant_value *values; gl_texture_index targets[MAX_SAMPLERS]; + + /** +* Mask of samplers used by the current shader stage. +*/ + unsigned shader_samplers_used; + + /** +* Mask of samplers used by the current shader stage for shadows. +*/ + unsigned shader_shadow_samplers; }; void @@ -356,6 +392,10 @@ link_assign_uniform_locations(struct gl_shader_program *prog) if (prog->_LinkedShaders[i] == NULL) continue; + /* Reset various per-shader target counts. + */ + parcel.start_shader(); + foreach_list(node, prog->_LinkedShaders[i]->ir) { ir_variable *const var = ((ir_instruction *) node)->as_variable(); @@ -369,6 +409,9 @@ link_assign_uniform_locations(struct gl_shader_program *prog) parcel.process(var); } + + prog->_LinkedShaders[i]->active_samplers = parcel.shader_samplers_used; + prog->_LinkedShaders[i]->shadow_samplers = parcel.shader_shadow_samplers; } assert(sizeof(prog->SamplerTargets) == sizeof(parcel.targets)); diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 2559795..9fdabf9 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2183,9 +2183,17 @@ struct gl_shader unsigned Version; /**< GLSL version used for linking */ - unsigned num_samplers; /**< Number of samplers used by this shader. -* This field is only set post-linking. -*/ + /** +* \name Sampler tracking +* +* \note Each of these fields is only set post-linking. +*/ + /*@{*/ + unsigned num_samplers; /**< Number of samplers used by this shader. */ + GLbitfield active_samplers; /**< Bitfield of which samplers are used */ + GLbitfield shadow_samplers; /**< Samplers used for shadow sampling. */ + /*@}*/ + /** * Number of uniform components used by this shader. * diff --git a/src/
Mesa (master): linker: Calculate the sampler to texture target mapping during linking
Module: Mesa Branch: master Commit: 6a992c3288b6f7a5d94172c9ad1908e71e58233e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6a992c3288b6f7a5d94172c9ad1908e71e58233e Author: Ian Romanick Date: Mon Nov 14 18:12:16 2011 -0800 linker: Calculate the sampler to texture target mapping during linking Track the calculated data in gl_shader_program instead of the individual assembly shaders. Signed-off-by: Ian Romanick Reviewed-by: Eric Anholt Reviewed-by: Kenneth Graunke --- src/glsl/link_uniforms.cpp | 15 ++- src/mesa/main/ff_fragment_shader.cpp |2 +- src/mesa/main/mtypes.h |2 -- src/mesa/main/uniform_query.cpp|2 +- src/mesa/main/uniforms.c |7 --- src/mesa/main/uniforms.h |3 ++- src/mesa/program/ir_to_mesa.cpp|8 +++- src/mesa/state_tracker/st_glsl_to_tgsi.cpp |6 +++--- 8 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp index b331db7..47d34cf 100644 --- a/src/glsl/link_uniforms.cpp +++ b/src/glsl/link_uniforms.cpp @@ -209,7 +209,7 @@ public: union gl_constant_value *values) : map(map), uniforms(uniforms), next_sampler(0), values(values) { - /* empty */ + memset(this->targets, 0, sizeof(this->targets)); } private: @@ -249,6 +249,14 @@ private: * array elements for arrays. */ this->next_sampler += MAX2(1, this->uniforms[id].array_elements); + +const gl_texture_index target = base_type->sampler_index(); +for (unsigned i = this->uniforms[id].sampler +; i < this->next_sampler +; i++) { + this->targets[i] = target; +} + } else { this->uniforms[id].sampler = ~0; } @@ -270,6 +278,8 @@ private: public: union gl_constant_value *values; + + gl_texture_index targets[MAX_SAMPLERS]; }; void @@ -361,6 +371,9 @@ link_assign_uniform_locations(struct gl_shader_program *prog) } } + assert(sizeof(prog->SamplerTargets) == sizeof(parcel.targets)); + memcpy(prog->SamplerTargets, parcel.targets, sizeof(prog->SamplerTargets)); + #ifndef NDEBUG for (unsigned i = 0; i < num_user_uniforms; i++) { assert(uniforms[i].storage != NULL); diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp index 165230c..3596a3d 100644 --- a/src/mesa/main/ff_fragment_shader.cpp +++ b/src/mesa/main/ff_fragment_shader.cpp @@ -1540,7 +1540,7 @@ create_new_program(struct gl_context *ctx, struct state_key *key) _mesa_propagate_uniforms_to_driver_storage(storage, 0, 1); } } - _mesa_update_shader_textures_used(fp); + _mesa_update_shader_textures_used(p.shader_program, fp); (void) ctx->Driver.ProgramStringNotify(ctx, fp->Target, fp); if (!p.shader_program->LinkStatus) diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index aca4737..2559795 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1894,8 +1894,6 @@ struct gl_program /** Map from sampler unit to texture unit (set by glUniform1i()) */ GLubyte SamplerUnits[MAX_SAMPLERS]; - /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */ - gl_texture_index SamplerTargets[MAX_SAMPLERS]; /** Bitmask of which register files are read/written with indirect * addressing. Mask of (1 << PROGRAM_x) bits. diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp index a5a85cd..d156cae 100644 --- a/src/mesa/main/uniform_query.cpp +++ b/src/mesa/main/uniform_query.cpp @@ -728,7 +728,7 @@ _mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shProg, shProg->SamplerUnits, sizeof(shProg->SamplerUnits)); - _mesa_update_shader_textures_used(prog); + _mesa_update_shader_textures_used(shProg, prog); (void) ctx->Driver.ProgramStringNotify(ctx, prog->Target, prog); } } diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c index 685c0f1..e0214a8 100644 --- a/src/mesa/main/uniforms.c +++ b/src/mesa/main/uniforms.c @@ -60,7 +60,8 @@ * We'll use that info for state validation before rendering. */ void -_mesa_update_shader_textures_used(struct gl_program *prog) +_mesa_update_shader_textures_used(struct gl_shader_program *shProg, + struct gl_program *prog) { GLuint s; @@ -68,8 +69,8 @@ _mesa_update_shader_textures_used(struct gl_program *prog) for (s = 0; s < MAX_SAMPLERS; s++) { if (prog->SamplersUsed & (1 << s)) { - GLuint unit = prog->SamplerUnits[s]; - GLuint tgt = prog->SamplerTargets[s]; + GLuint unit = shProg->SamplerUnits[s]; + GLuint tgt = shProg->SamplerTargets[s]; assert(unit < Elements(prog->TexturesUsed));
Mesa (master): glsl: Add glsl_type::sampler_index
Module: Mesa Branch: master Commit: 32be81de39f7548e353afabf1215b0ea7c7b0916 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=32be81de39f7548e353afabf1215b0ea7c7b0916 Author: Ian Romanick Date: Mon Nov 14 14:02:09 2011 -0800 glsl: Add glsl_type::sampler_index Signed-off-by: Ian Romanick Reviewed-by: Eric Anholt Reviewed-by: Kenneth Graunke --- src/glsl/glsl_types.cpp | 29 + src/glsl/glsl_types.h |6 ++ 2 files changed, 35 insertions(+), 0 deletions(-) diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp index 8587da0..d4385a6 100644 --- a/src/glsl/glsl_types.cpp +++ b/src/glsl/glsl_types.cpp @@ -127,6 +127,35 @@ glsl_type::contains_sampler() const } } +gl_texture_index +glsl_type::sampler_index() const +{ + const glsl_type *const t = (this->is_array()) ? this->fields.array : this; + + assert(t->is_sampler()); + + switch (t->sampler_dimensionality) { + case GLSL_SAMPLER_DIM_1D: + return (t->sampler_array) ? TEXTURE_1D_ARRAY_INDEX : TEXTURE_1D_INDEX; + case GLSL_SAMPLER_DIM_2D: + return (t->sampler_array) ? TEXTURE_2D_ARRAY_INDEX : TEXTURE_2D_INDEX; + case GLSL_SAMPLER_DIM_3D: + return TEXTURE_3D_INDEX; + case GLSL_SAMPLER_DIM_CUBE: + return TEXTURE_CUBE_INDEX; + case GLSL_SAMPLER_DIM_RECT: + return TEXTURE_RECT_INDEX; + case GLSL_SAMPLER_DIM_BUF: + assert(!"FINISHME: Implement ARB_texture_buffer_object"); + break; + case GLSL_SAMPLER_DIM_EXTERNAL: + return TEXTURE_EXTERNAL_INDEX; + default: + assert(!"Should not get here."); + break; + } +} + void glsl_type::generate_100ES_types(glsl_symbol_table *symtab) { diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h index 4ac9011..2997c93 100644 --- a/src/glsl/glsl_types.h +++ b/src/glsl/glsl_types.h @@ -28,6 +28,7 @@ #include #include +#include "main/mtypes.h" /* for gl_texture_index, C++'s enum rules are broken */ #ifdef __cplusplus extern "C" { @@ -354,6 +355,11 @@ struct glsl_type { bool contains_sampler() const; /** +* Get the Mesa texture target index for a sampler type. +*/ + gl_texture_index sampler_index() const; + + /** * Query whether or not a type is an array */ bool is_array() const ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Track fixed-function fragment shader as a shader
Module: Mesa Branch: master Commit: b527dd65c830a2b008816cf390d5be906e29bb23 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b527dd65c830a2b008816cf390d5be906e29bb23 Author: Ian Romanick Date: Tue Nov 15 12:01:18 2011 -0800 mesa: Track fixed-function fragment shader as a shader Previously the fixed-function fragment shader was tracked as a gl_program. This means that it shows up in the driver as a Mesa IR program instead of as a GLSL IR program. If a driver doesn't generate Mesa IR from the GLSL IR, that program is empty. If the program is empty there is either no rendering or a GPU hang. Signed-off-by: Ian Romanick Reviewed-by: Eric Anholt Acked-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_wm.c|2 +- src/mesa/drivers/dri/i965/brw_wm_state.c |4 ++-- src/mesa/drivers/dri/i965/gen6_wm_state.c |4 +++- src/mesa/drivers/dri/i965/gen7_wm_state.c |4 +++- src/mesa/main/mtypes.h|2 ++ src/mesa/main/shaderapi.c | 29 + src/mesa/main/state.c | 10 ++ 7 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c index cad0af8..7dee20b 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.c +++ b/src/mesa/drivers/dri/i965/brw_wm.c @@ -543,7 +543,7 @@ brw_upload_wm_prog(struct brw_context *brw) if (!brw_search_cache(&brw->cache, BRW_WM_PROG, &key, sizeof(key), &brw->wm.prog_offset, &brw->wm.prog_data)) { - bool success = do_wm_prog(brw, ctx->Shader.CurrentFragmentProgram, fp, + bool success = do_wm_prog(brw, ctx->Shader._CurrentFragmentProgram, fp, &key); (void) success; assert(success); diff --git a/src/mesa/drivers/dri/i965/brw_wm_state.c b/src/mesa/drivers/dri/i965/brw_wm_state.c index e1791c2..dd67795 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_state.c @@ -169,9 +169,9 @@ brw_upload_wm_unit(struct brw_context *brw) * If using the fragment shader backend, the program is always * 8-wide. If not, it's always 16. */ - if (ctx->Shader.CurrentFragmentProgram) { + if (ctx->Shader._CurrentFragmentProgram) { struct brw_shader *shader = (struct brw_shader *) - ctx->Shader.CurrentFragmentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT]; + ctx->Shader._CurrentFragmentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT]; if (shader != NULL && shader->ir != NULL) { wm->wm5.enable_8_pix = 1; diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c index 0547eb8..3669811 100644 --- a/src/mesa/drivers/dri/i965/gen6_wm_state.c +++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c @@ -135,7 +135,9 @@ upload_wm_state(struct brw_context *brw) dw5 |= GEN6_WM_LINE_END_CAP_AA_WIDTH_0_5; /* Use ALT floating point mode for ARB fragment programs, because they -* require 0^0 == 1. +* require 0^0 == 1. Even though _CurrentFragmentProgram is used for +* rendering, CurrentFragmentProgram is used for this check to +* differentiate between the GLSL and non-GLSL cases. */ if (ctx->Shader.CurrentFragmentProgram == NULL) dw2 |= GEN6_WM_FLOATING_POINT_MODE_ALT; diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c b/src/mesa/drivers/dri/i965/gen7_wm_state.c index 1468fcc..3f9 100644 --- a/src/mesa/drivers/dri/i965/gen7_wm_state.c +++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c @@ -166,7 +166,9 @@ upload_ps_state(struct brw_context *brw) dw2 |= (ALIGN(brw->sampler.count, 4) / 4) << GEN7_PS_SAMPLER_COUNT_SHIFT; /* Use ALT floating point mode for ARB fragment programs, because they -* require 0^0 == 1. +* require 0^0 == 1. Even though _CurrentFragmentProgram is used for +* rendering, CurrentFragmentProgram is used for this check to +* differentiate between the GLSL and non-GLSL cases. */ if (intel->ctx.Shader.CurrentFragmentProgram == NULL) dw2 |= GEN7_PS_FLOATING_POINT_MODE_ALT; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index bb46ba0..aca4737 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2350,6 +2350,8 @@ struct gl_shader_state struct gl_shader_program *CurrentGeometryProgram; struct gl_shader_program *CurrentFragmentProgram; + struct gl_shader_program *_CurrentFragmentProgram; + /** * Program used by glUniform calls. * diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 9372d6d..f3f13a0 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -124,6 +124,8 @@ _mesa_free_shader_state(struct gl_context *ctx) NULL); _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentFragmentProgram, NULL); + _mesa_reference_shader_p
Mesa (master): mesa: Validate sampler settings using uniform storage
Module: Mesa Branch: master Commit: 195ee502c3196607e3a74075aefade9770a08a67 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=195ee502c3196607e3a74075aefade9770a08a67 Author: Ian Romanick Date: Mon Nov 14 12:11:46 2011 -0800 mesa: Validate sampler settings using uniform storage Rather than looking at the settings in individual assembly programs, look at the settings in the top-level uniform values. The old code was flawed because examining each shader stage in isolation could allow inconsitent usage across stages (e.g., bind unit 0 to a sampler2D in the vertex shader and sampler1DShadow in the fragment shader). Signed-off-by: Ian Romanick Reviewed-by: Eric Anholt Reviewed-by: Kenneth Graunke --- src/mesa/main/shaderapi.c | 64 +- src/mesa/main/uniform_query.cpp | 43 ++ src/mesa/main/uniforms.h|3 ++ 3 files changed, 48 insertions(+), 62 deletions(-) diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index f3f13a0..5bfe217 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -927,62 +927,6 @@ _mesa_use_program(struct gl_context *ctx, struct gl_shader_program *shProg) ctx->Driver.UseProgram(ctx, shProg); } - -/** - * Validate a program's samplers. - * Specifically, check that there aren't two samplers of different types - * pointing to the same texture unit. - * \return GL_TRUE if valid, GL_FALSE if invalid - */ -static GLboolean -validate_samplers(const struct gl_program *prog, char *errMsg) -{ - static const char *targetName[] = { - "TEXTURE_BUFFER", - "TEXTURE_2D_ARRAY", - "TEXTURE_1D_ARRAY", - "TEXTURE_EXTERNAL", - "TEXTURE_CUBE", - "TEXTURE_3D", - "TEXTURE_RECT", - "TEXTURE_2D", - "TEXTURE_1D", - }; - GLint targetUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; - GLbitfield samplersUsed = prog->SamplersUsed; - GLuint i; - - STATIC_ASSERT(Elements(targetName) == NUM_TEXTURE_TARGETS); - - if (samplersUsed == 0x0) - return GL_TRUE; - - for (i = 0; i < Elements(targetUsed); i++) - targetUsed[i] = -1; - - /* walk over bits which are set in 'samplers' */ - while (samplersUsed) { - GLuint unit; - gl_texture_index target; - GLint sampler = _mesa_ffs(samplersUsed) - 1; - assert(sampler >= 0); - assert(sampler < Elements(prog->SamplerUnits)); - unit = prog->SamplerUnits[sampler]; - target = prog->SamplerTargets[sampler]; - if (targetUsed[unit] != -1 && targetUsed[unit] != (int) target) { - _mesa_snprintf(errMsg, 100, - "Texture unit %d is accessed both as %s and %s", - unit, targetName[targetUsed[unit]], targetName[target]); - return GL_FALSE; - } - targetUsed[unit] = target; - samplersUsed ^= (1 << sampler); - } - - return GL_TRUE; -} - - /** * Do validation of the given shader program. * \param errMsg returns error message if validation fails. @@ -1018,12 +962,8 @@ validate_shader_program(const struct gl_shader_program *shProg, * Check: any two active samplers in the current program object are of * different types, but refer to the same texture image unit, */ - for (i = 0; i < Elements(shProg->_LinkedShaders); i++) { - if (shProg->_LinkedShaders[i] - && !validate_samplers(shProg->_LinkedShaders[i]->Program, errMsg)) { -return GL_FALSE; - } - } + if (!_mesa_sampler_uniforms_are_valid(shProg, errMsg, 100)) + return GL_FALSE; return GL_TRUE; } diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp index f3d6a16..a5a85cd 100644 --- a/src/mesa/main/uniform_query.cpp +++ b/src/mesa/main/uniform_query.cpp @@ -933,3 +933,46 @@ _mesa_get_uniform_location(struct gl_context *ctx, return _mesa_uniform_merge_location_offset(location, offset); } + +extern "C" bool +_mesa_sampler_uniforms_are_valid(const struct gl_shader_program *shProg, +char *errMsg, size_t errMsgLength) +{ + const glsl_type *unit_types[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; + + memset(unit_types, 0, sizeof(unit_types)); + + for (unsigned i = 0; i < shProg->NumUserUniformStorage; i++) { + const struct gl_uniform_storage *const storage = +&shProg->UniformStorage[i]; + const glsl_type *const t = (storage->type->is_array()) +? storage->type->fields.array : storage->type; + + if (!t->is_sampler()) +continue; + + const unsigned count = MAX2(1, storage->type->array_size()); + for (unsigned j = 0; j < count; j++) { +const unsigned unit = storage->storage[j].i; + +/* The types of the samplers associated with a particular texture + * unit must be an exact match. Page 74 (page 89 of the PDF) of the + * OpenGL 3.3 core spec says: + * + * "It is not allowed to have variables of different sampler + * types p
Mesa (master): mesa: Use static buffer for uniform name
Module: Mesa Branch: master Commit: ca5b30bf8142d916a40eaaa7091882464a237f1f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ca5b30bf8142d916a40eaaa7091882464a237f1f Author: Ian Romanick Date: Mon Nov 14 16:52:05 2011 -0800 mesa: Use static buffer for uniform name Signed-off-by: Ian Romanick Reviewed-by: Eric Anholt Reviewed-by: Kenneth Graunke --- src/mesa/main/ff_fragment_shader.cpp |7 ++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp index 49a8af0..165230c 100644 --- a/src/mesa/main/ff_fragment_shader.cpp +++ b/src/mesa/main/ff_fragment_shader.cpp @@ -1509,7 +1509,12 @@ create_new_program(struct gl_context *ctx, struct state_key *key) _mesa_associate_uniform_storage(ctx, p.shader_program, fp->Parameters); for (unsigned int i = 0; i < MAX_TEXTURE_UNITS; i++) { - char *name = ralloc_asprintf(p.mem_ctx, "sampler_%d", i); + /* Enough space for 'sampler_999\0'. + */ + char name[12]; + + snprintf(name, sizeof(name), "sampler_%d", i); + int loc = _mesa_get_uniform_location(ctx, p.shader_program, name); if (loc != -1) { unsigned base; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Use uniform interfaces in fixed-function fragment shader code
Module: Mesa Branch: master Commit: f409a710e3562856a53a3b43ed526b877639a27c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f409a710e3562856a53a3b43ed526b877639a27c Author: Ian Romanick Date: Mon Nov 14 14:32:39 2011 -0800 mesa: Use uniform interfaces in fixed-function fragment shader code Poking directly at the backing resources works only by luck. Core Mesa code should only know about the gl_uniform_storage structure. Soon other code that looks at samplers will use the gl_uniform_storage structures instead of the data in the gl_program. Signed-off-by: Ian Romanick Reviewed-by: Eric Anholt Acked-by: Kenneth Graunke --- src/mesa/main/ff_fragment_shader.cpp | 29 - 1 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp index 3e736fa..49a8af0 100644 --- a/src/mesa/main/ff_fragment_shader.cpp +++ b/src/mesa/main/ff_fragment_shader.cpp @@ -42,6 +42,7 @@ extern "C" { #include "program/programopt.h" #include "texenvprogram.h" } +#include "main/uniforms.h" #include "../glsl/glsl_types.h" #include "../glsl/ir.h" #include "../glsl/glsl_symbol_table.h" @@ -1498,22 +1499,40 @@ create_new_program(struct gl_context *ctx, struct state_key *key) /* Set the sampler uniforms, and relink to get them into the linked * program. */ - struct gl_program *fp; - fp = p.shader_program->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program; + struct gl_shader *const fs = + p.shader_program->_LinkedShaders[MESA_SHADER_FRAGMENT]; + struct gl_program *const fp = fs->Program; + + _mesa_generate_parameters_list_for_uniforms(p.shader_program, fs, + fp->Parameters); + + _mesa_associate_uniform_storage(ctx, p.shader_program, fp->Parameters); for (unsigned int i = 0; i < MAX_TEXTURE_UNITS; i++) { char *name = ralloc_asprintf(p.mem_ctx, "sampler_%d", i); int loc = _mesa_get_uniform_location(ctx, p.shader_program, name); if (loc != -1) { +unsigned base; +unsigned idx; + /* Avoid using _mesa_uniform() because it flags state * updates, so if we're generating this shader_program in a * state update, we end up recursing. Instead, just set the * value, which is picked up at re-link. */ -loc = (loc & 0x) + (loc >> 16); -int sampler = fp->Parameters->ParameterValues[loc][0].f; +_mesa_uniform_split_location_offset(loc, &base, &idx); +assert(idx == 0); + +struct gl_uniform_storage *const storage = + &p.shader_program->UniformStorage[base]; -fp->SamplerUnits[sampler] = i; +/* Update the storage, the SamplerUnits in the shader program, and + * the SamplerUnits in the assembly shader. + */ +storage->storage[idx].i = i; +fp->SamplerUnits[storage->sampler] = i; +p.shader_program->SamplerUnits[storage->sampler] = i; +_mesa_propagate_uniforms_to_driver_storage(storage, 0, 1); } } _mesa_update_shader_textures_used(fp); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Clean up GL3 status
Module: Mesa Branch: master Commit: 151b4f336934d283961e28e111aa30544e3ceb50 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=151b4f336934d283961e28e111aa30544e3ceb50 Author: Matt Turner Date: Wed Jan 11 15:29:51 2012 -0500 Clean up GL3 status Reviewed-by: Ian Romanick Signed-off-by: Matt Turner --- docs/GL3.txt | 78 +- 1 files changed, 39 insertions(+), 39 deletions(-) diff --git a/docs/GL3.txt b/docs/GL3.txt index 0c67dce..069d36d 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -12,47 +12,47 @@ Feature Status GL 3.0: -GLSL 1.30 (GL_EXT_gpu_shader4, etc.) started +GLSL 1.30 DONE glBindFragDataLocation, glGetFragDataLocation DONE -Conditional rendering (GL_NV_conditional_render) DONE (swrast, softpipe, i965) -Map buffer subranges (GL_ARB_map_buffer_range)DONE -Clamping controls (GL_ARB_color_buffer_float) DONE -Float textures, renderbuffers (GL_ARB_texture_float) DONE (gallium r300) -GL_EXT_packed_float DONE (gallium r600) -GL_EXT_texture_shared_exponentDONE (gallium, swrast) -Float depth buffers (GL_ARB_depth_buffer_float) DONE -Framebuffer objects (GL_EXT_framebuffer_object) DONE +Conditional rendering (GL_NV_conditional_render) DONE (i965, r600, swrast) +Map buffer subranges (GL_ARB_map_buffer_range)DONE (i965, r600, swrast) +Clamping controls (GL_ARB_color_buffer_float) DONE (i965, r600) +Float textures, renderbuffers (GL_ARB_texture_float) DONE (i965, r600) +GL_EXT_packed_float DONE (i965, r600) +GL_EXT_texture_shared_exponentDONE (i965, r600, swrast) +Float depth buffers (GL_ARB_depth_buffer_float) DONE (i965, r600) +Framebuffer objects (GL_EXT_framebuffer_object) DONE (i965, r600, swrast) Half-floatDONE Multisample blit DONE Non-normalized Integer texture/framebuffer formats~50% done -1D/2D Texture arrays DONE (gallium, swrast) +1D/2D Texture arrays DONE Packed depth/stencil formats DONE -Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE -GL_EXT_texture_compression_rgtc DONE (swrast, gallium r600) -Red and red/green texture formats DONE (swrast, i965, gallium) -Transform feedback (GL_EXT_transform_feedback)DONE -Vertex array objects (GL_APPLE_vertex_array_object) DONE -sRGB framebuffer format (GL_EXT_framebuffer_sRGB) core GL done (i965, gallium), GLX todo +Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE (i965, r600, swrast) +GL_EXT_texture_compression_rgtc DONE (i965, r600, swrast) +Red and red/green texture formats DONE (i965, swrast, gallium) +Transform feedback (GL_EXT_transform_feedback)DONE (i965) +Vertex array objects (GL_APPLE_vertex_array_object) DONE (i965, r600, swrast) +sRGB framebuffer format (GL_EXT_framebuffer_sRGB) DONE (i965, r600) glClearBuffer commandsDONE glGetStringi command DONE glTexParameterI, glGetTexParameterI commands DONE glVertexAttribI commands DONE (but converts int values to floats) -Depth format cube texturesnot started -GLX_ARB_create_context (GLX 1.4 is required) not started +Depth format cube texturesDONE +GLX_ARB_create_context (GLX 1.4 is required) DONE GL 3.1: GLSL 1.40 not started Instanced drawing (GL_ARB_draw_instanced) DONE (gallium, swrast) -Buffer copying (GL_ARB_copy_buffer) DONE -Primitive restart (GL_NV_primitive_restart) DONE (gallium) +Buffer copying (GL_ARB_copy_buffer) DONE (i965, r600, swrast) +Primitive restart (GL_NV_primitive_restart) DONE (r600) 16 vertex texture image units DONE Texture buffer objs (GL_ARB_texture_buffer_object)not started -Rectangular textures (GL_ARB_texture_rectangle) DONE +Rectangular textures (GL_ARB_texture_rectangle) DONE (i965, r600, swrast) Uniform buffer objs (GL_ARB_uniform_buffer_object)not started -Signed normalized textures (GL_EXT_texture_snorm) DONE (gallium) +Signed normalized textures (GL_EXT_texture_snorm) DONE (i965, r600) GL 3.2: @@ -60,36 +60,36 @@ GL 3.2: Core/compatibility profiles not started GLSL 1.50 not started Geometry sha
Mesa (master): configure.ac: use AC_PROG_SED
Module: Mesa Branch: master Commit: 3a343ef3465c828d6f2285498e1eb86929c74690 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a343ef3465c828d6f2285498e1eb86929c74690 Author: Matt Turner Date: Wed Jan 11 01:05:56 2012 -0500 configure.ac: use AC_PROG_SED It looks like AC_PROG_SED was added in 2.59b, and wasn't in the original 2.59 in the original 2.59. Presumably that's why, though it could've been an oversight. Reviewed-by: Kenneth Graunke Signed-off-by: Matt Turner --- configure.ac |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/configure.ac b/configure.ac index bc3a831..e2302de 100644 --- a/configure.ac +++ b/configure.ac @@ -38,8 +38,8 @@ AC_PROG_CC AC_PROG_CXX AC_CHECK_PROGS([MAKE], [gmake make]) AC_CHECK_PROGS([PYTHON2], [python2 python]) +AC_PROG_SED AC_PATH_PROG([MKDEP], [makedepend]) -AC_PATH_PROG([SED], [sed]) if test "x$MKDEP" = "x"; then AC_MSG_ERROR([makedepend is required to build Mesa]) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): configure.ac: don't set HAVE_GTEST twice
Module: Mesa Branch: master Commit: 198892c044ce508b43450eeb48828e0b9d31052b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=198892c044ce508b43450eeb48828e0b9d31052b Author: Matt Turner Date: Wed Jan 11 01:11:35 2012 -0500 configure.ac: don't set HAVE_GTEST twice Reviewed-by: Ian Romanick Signed-off-by: Matt Turner --- configure.ac |1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/configure.ac b/configure.ac index 511d147..bc3a831 100644 --- a/configure.ac +++ b/configure.ac @@ -70,7 +70,6 @@ AC_PATH_PROG([GTESTCONFIG], [gtest-config]) if test "x$GTESTCONFIG" != "x"; then GTEST_CFLAGS=`gtest-config --cppflags --cxxflags` GTEST_LIBS=`gtest-config --ldflags --libs` -HAVE_GTEST=1 AC_SUBST([GTEST_CFLAGS]) AC_SUBST([GTEST_LIBS]) HAVE_GTEST=yes ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: Don' t reallocate push constant URB space on new VS programs.
Module: Mesa Branch: master Commit: 28cfa1fa213fe7ba6e5b57e61da663a6c3bf0c13 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=28cfa1fa213fe7ba6e5b57e61da663a6c3bf0c13 Author: Kenneth Graunke Date: Wed Jan 11 11:44:02 2012 -0800 i965: Don't reallocate push constant URB space on new VS programs. The gen7_urb atom depends on CACHE_NEW_VS_PROG and CACHE_NEW_GS_PROG, causing gen7_upload_urb() to be called when switching to a new VS program. In addition to partitioning the URB space between the VS and GS, gen7_upload_urb() also allocated space for VS and PS push constants. Unfortunately, this meant that whenever CACHE_NEW_VS was flagged, we'd reallocate the space for the PS push constants. According to the BSpec, after sending 3DSTATE_PUSH_CONSTANT_ALLOC_PS, we must reprogram 3DSTATE_CONSTANT_PS prior to the next 3DPRIMITIVE. Since our URB allocation for push constants is entirely static, it makes sense to split it out into its own atom that only subscribes to BRW_NEW_CONTEXT. This avoids reallocating the space and trashing constants. Fixes a rendering artifact in Extreme Tuxracer, where instead of a snow trail, you'd get a bright red streak (affectionately known as the "bloody penguin bug"). This also explains why adding VS-related dirty bits to gen7_ps_state made the problem disappear: it made 3DSTATE_CONSTANT_PS be emitted after every 3DSTATE_PUSH_CONSTANT_ALLOC_PS packet. NOTE: This is a candidate for the 7.11 branch. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38868 Signed-off-by: Kenneth Graunke Reviewed-by: Paul Berry --- src/mesa/drivers/dri/i965/brw_state.h|1 + src/mesa/drivers/dri/i965/brw_state_upload.c |1 + src/mesa/drivers/dri/i965/gen7_urb.c | 34 ++--- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index fcfe79f..2dd5665 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -110,6 +110,7 @@ extern const struct brw_tracked_state gen7_clip_state; extern const struct brw_tracked_state gen7_depth_stencil_state_pointer; extern const struct brw_tracked_state gen7_disable_stages; extern const struct brw_tracked_state gen7_ps_state; +extern const struct brw_tracked_state gen7_push_constant_alloc; extern const struct brw_tracked_state gen7_samplers; extern const struct brw_tracked_state gen7_sbe_state; extern const struct brw_tracked_state gen7_sf_clip_viewport; diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index c7b796c..d071f87 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@ -188,6 +188,7 @@ const struct brw_tracked_state *gen7_atoms[] = /* Command packets: */ &brw_invariant_state, + &gen7_push_constant_alloc, /* must do before binding table pointers, cc state ptrs */ &brw_state_base_address, diff --git a/src/mesa/drivers/dri/i965/gen7_urb.c b/src/mesa/drivers/dri/i965/gen7_urb.c index e53fcb7..e6cf1eb 100644 --- a/src/mesa/drivers/dri/i965/gen7_urb.c +++ b/src/mesa/drivers/dri/i965/gen7_urb.c @@ -51,6 +51,30 @@ * See "Volume 2a: 3D Pipeline," section 1.8. */ static void +gen7_allocate_push_constants(struct brw_context *brw) +{ + struct intel_context *intel = &brw->intel; + BEGIN_BATCH(2); + OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_VS << 16 | (2 - 2)); + OUT_BATCH(8); + ADVANCE_BATCH(); + + BEGIN_BATCH(2); + OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_PS << 16 | (2 - 2)); + OUT_BATCH(8 | 8 << GEN7_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT); + ADVANCE_BATCH(); +} + +const struct brw_tracked_state gen7_push_constant_alloc = { + .dirty = { + .mesa = 0, + .brw = BRW_NEW_CONTEXT, + .cache = 0, + }, + .emit = gen7_allocate_push_constants, +}; + +static void gen7_upload_urb(struct brw_context *brw) { struct intel_context *intel = &brw->intel; @@ -76,16 +100,6 @@ gen7_upload_urb(struct brw_context *brw) assert(!brw->gs.prog_active); BEGIN_BATCH(2); - OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_VS << 16 | (2 - 2)); - OUT_BATCH(8); - ADVANCE_BATCH(); - - BEGIN_BATCH(2); - OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_PS << 16 | (2 - 2)); - OUT_BATCH(8 | 8 << GEN7_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT); - ADVANCE_BATCH(); - - BEGIN_BATCH(2); OUT_BATCH(_3DSTATE_URB_VS << 16 | (2 - 2)); OUT_BATCH(brw->urb.nr_vs_entries | ((brw->urb.vs_size - 1) << GEN7_URB_ENTRY_SIZE_SHIFT) | ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glx/dri: Initialize api even if num_attribs == 0.
Module: Mesa Branch: master Commit: 10a6fde333f0170fbac70924581c647e531aba3e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=10a6fde333f0170fbac70924581c647e531aba3e Author: Kenneth Graunke Date: Tue Jan 10 23:32:50 2012 -0800 glx/dri: Initialize api even if num_attribs == 0. Both dri2_create_context_attribs and drisw_create_context_attribs call dri2_convert_glx_attribs, expecting it to fill in *api on success. However, when num_attribs == 0, it was returning true without setting *api, causing the caller to use an uninitialized value. Tested-by: Vadim Girlin Reviewed-by: Ian Romanick Signed-off-by: Kenneth Graunke --- src/glx/dri_common.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c index 8feb587..ed0b134 100644 --- a/src/glx/dri_common.c +++ b/src/glx/dri_common.c @@ -429,8 +429,10 @@ dri2_convert_glx_attribs(unsigned num_attribs, const uint32_t *attribs, uint32_t profile; int render_type = GLX_RGBA_TYPE; - if (num_attribs == 0) + if (num_attribs == 0) { + *api = __DRI_API_OPENGL; return true; + } /* This is actually an internal error, but what the heck. */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): svga: don't reference count svga_sampler_view's texture
Module: Mesa Branch: master Commit: dce4c368b5536716770e5cabef0321db8537a6d9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dce4c368b5536716770e5cabef0321db8537a6d9 Author: Brian Paul Date: Wed Jan 11 19:52:23 2012 +0100 svga: don't reference count svga_sampler_view's texture svga_sampler_view contains a pointer to a pipe_resource (base class of svga_texture) and svga_texture contains a pointer to an svga_sampler_view. This circular dependency prevented the objects from ever being freed when they pointed to each other. Make the svga_sampler_view::texture pointer a "weak reference" (no reference counting) to break the dependency. This is safe to do because the pipe_resource/texture always has a longer lifespan than the sampler view so when svga_sampler_view stops referencing the texture, the texture's refcount never hits zero. Fixes a memory leak seen with google earth and other apps. Reviewed-by: Jakob Bornecrantz --- src/gallium/drivers/svga/svga_sampler_view.c | 14 -- 1 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/svga/svga_sampler_view.c b/src/gallium/drivers/svga/svga_sampler_view.c index b756b07..e8234d6 100644 --- a/src/gallium/drivers/svga/svga_sampler_view.c +++ b/src/gallium/drivers/svga/svga_sampler_view.c @@ -105,7 +105,12 @@ svga_get_tex_sampler_view(struct pipe_context *pipe, sv = CALLOC_STRUCT(svga_sampler_view); pipe_reference_init(&sv->reference, 1); - pipe_resource_reference(&sv->texture, pt); + + /* Note: we're not refcounting the texture resource here to avoid +* a circular dependency. +*/ + sv->texture = pt; + sv->min_lod = min_lod; sv->max_lod = max_lod; @@ -206,6 +211,11 @@ svga_destroy_sampler_view_priv(struct svga_sampler_view *v) SVGA_DBG(DEBUG_DMA, "unref sid %p (sampler view)\n", v->handle); svga_screen_surface_destroy(ss, &v->key, &v->handle); } - pipe_resource_reference(&v->texture, NULL); + + /* Note: we're not refcounting the texture resource here to avoid +* a circular dependency. +*/ + v->texture = NULL; + FREE(v); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: Fix compiler warning from uninitialized "success" value.
Module: Mesa Branch: master Commit: 35cdd7b6dbc763fe57bf466def0a4257ca09beb8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=35cdd7b6dbc763fe57bf466def0a4257ca09beb8 Author: Eric Anholt Date: Wed Jan 11 12:07:15 2012 -0800 i965: Fix compiler warning from uninitialized "success" value. This shouldn't happen, because the DDX should only load this driver if IS_965. But better to do something defined in that case. --- src/mesa/drivers/dri/intel/intel_screen.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c index ce96ddd..b0e800b 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.c +++ b/src/mesa/drivers/dri/intel/intel_screen.c @@ -525,7 +525,7 @@ intelCreateContext(gl_api api, { __DRIscreen *sPriv = driContextPriv->driScreenPriv; struct intel_screen *intelScreen = sPriv->driverPrivate; - bool success; + bool success = false; #ifdef I915 if (IS_9XX(intelScreen->deviceID)) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965/vs: Try to emit more components of constant vectors at once.
Module: Mesa Branch: master Commit: 2c623c2be529edc974ca293f3c71929c639ec0c9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2c623c2be529edc974ca293f3c71929c639ec0c9 Author: Eric Anholt Date: Fri Jan 6 10:20:09 2012 -0800 i965/vs: Try to emit more components of constant vectors at once. We were naively emitting each component at a time, even if we were emitting the same value to multiple channels. Improves on a codegen regression from the old VS to the new VS on some unigine shaders (because we emit constant vecs/matrices as immediates instead of loading them as push constants, so we had over 4x the instructions for using them). shader-db results: Total instructions: 58594 -> 58540 11/870 programs affected (1.3%) 765 -> 711 instructions in affected programs (7.1% reduction) --- src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 29 ++- 1 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index 20da487..5df2470 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -1701,22 +1701,45 @@ vec4_visitor::emit_constant_values(dst_reg *dst, ir_constant *ir) if (ir->type->is_matrix()) { for (int i = 0; i < ir->type->matrix_columns; i++) { +float *vec = &ir->value.f[i * ir->type->vector_elements]; + for (int j = 0; j < ir->type->vector_elements; j++) { dst->writemask = 1 << j; dst->type = BRW_REGISTER_TYPE_F; - emit(MOV(*dst, -src_reg(ir->value.f[i * ir->type->vector_elements + j]))); + emit(MOV(*dst, src_reg(vec[j]))); } dst->reg_offset++; } return; } + int remaining_writemask = (1 << ir->type->vector_elements) - 1; + for (int i = 0; i < ir->type->vector_elements; i++) { + if (!(remaining_writemask & (1 << i))) +continue; + dst->writemask = 1 << i; dst->type = brw_type_for_base_type(ir->type); + /* Find other components that match the one we're about to + * write. Emits fewer instructions for things like vec4(0.5, + * 1.5, 1.5, 1.5). + */ + for (int j = i + 1; j < ir->type->vector_elements; j++) { +if (ir->type->base_type == GLSL_TYPE_BOOL) { + if (ir->value.b[i] == ir->value.b[j]) + dst->writemask |= (1 << j); +} else { + /* u, i, and f storage all line up, so no need for a +* switch case for comparing each type. +*/ + if (ir->value.u[i] == ir->value.u[j]) + dst->writemask |= (1 << j); +} + } + switch (ir->type->base_type) { case GLSL_TYPE_FLOAT: emit(MOV(*dst, src_reg(ir->value.f[i]))); @@ -1734,6 +1757,8 @@ vec4_visitor::emit_constant_values(dst_reg *dst, ir_constant *ir) assert(!"Non-float/uint/int/bool constant"); break; } + + remaining_writemask &= ~dst->writemask; } dst->reg_offset++; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965/gen7: Fix segfault in transform feedback to DYNAMIC_DRAW buffers.
Module: Mesa Branch: master Commit: ba6f4c9ee2294de66977d292972d47355fa58be0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ba6f4c9ee2294de66977d292972d47355fa58be0 Author: Eric Anholt Date: Mon Jan 2 14:03:59 2012 -0800 i965/gen7: Fix segfault in transform feedback to DYNAMIC_DRAW buffers. Fixes piglit EXT_transform_feedback/buffer-usage. --- src/mesa/drivers/dri/i965/gen7_sol_state.c |5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c b/src/mesa/drivers/dri/i965/gen7_sol_state.c index 04783ec..110c166 100644 --- a/src/mesa/drivers/dri/i965/gen7_sol_state.c +++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c @@ -53,7 +53,8 @@ upload_3dstate_so_buffers(struct brw_context *brw) * gl_transform_feedback_object. */ for (i = 0; i < 4; i++) { - struct gl_buffer_object *bufferobj = xfb_obj->Buffers[i]; + struct intel_buffer_object *bufferobj = +intel_buffer_object(xfb_obj->Buffers[i]); drm_intel_bo *bo; uint32_t start, end; uint32_t stride; @@ -72,7 +73,7 @@ upload_3dstate_so_buffers(struct brw_context *brw) continue; } - bo = intel_buffer_object(bufferobj)->buffer; + bo = intel_bufferobj_buffer(intel, bufferobj, INTEL_WRITE_PART); stride = linked_xfb_info->BufferStride[i] * 4; start = xfb_obj->Offset[i]; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: add _mesa_HashNumEntries() function
Module: Mesa Branch: master Commit: f1b33c74dc11b97a86a7f0e9cbe4cb168b2b9540 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f1b33c74dc11b97a86a7f0e9cbe4cb168b2b9540 Author: Brian Paul Date: Wed Jan 11 12:58:43 2012 -0700 mesa: add _mesa_HashNumEntries() function Useful when debugging to find the number of texture objects, shader programs, etc. --- src/mesa/main/hash.c | 20 src/mesa/main/hash.h |3 +++ 2 files changed, 23 insertions(+), 0 deletions(-) diff --git a/src/mesa/main/hash.c b/src/mesa/main/hash.c index 4b250ad..61c369a 100644 --- a/src/mesa/main/hash.c +++ b/src/mesa/main/hash.c @@ -480,6 +480,26 @@ _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint numKeys) } +/** + * Return the number of entries in the hash table. + */ +GLuint +_mesa_HashNumEntries(const struct _mesa_HashTable *table) +{ + GLuint pos, count = 0; + + for (pos = 0; pos < TABLE_SIZE; pos++) { + const struct HashEntry *entry; + for (entry = table->Table[pos]; entry; entry = entry->Next) { + count++; + } + } + + return count; +} + + + #if 0 /* debug only */ /** diff --git a/src/mesa/main/hash.h b/src/mesa/main/hash.h index 4f916f9..e935f8d 100644 --- a/src/mesa/main/hash.h +++ b/src/mesa/main/hash.h @@ -63,6 +63,9 @@ extern void _mesa_HashPrint(const struct _mesa_HashTable *table); extern GLuint _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint numKeys); +extern GLuint +_mesa_HashNumEntries(const struct _mesa_HashTable *table); + extern void _mesa_test_hash_functions(void); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/wgl: Return NULL for NULL HDCs in wglGetExtensionsStringARB.
Module: Mesa Branch: master Commit: 6811704830b6637d7c9b19914bd3549143eeb3e5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6811704830b6637d7c9b19914bd3549143eeb3e5 Author: José Fonseca Date: Fri Dec 23 02:57:29 2011 + st/wgl: Return NULL for NULL HDCs in wglGetExtensionsStringARB. WGL_ARB_extensions_string states that wglGetExtensionsStringARB should return NULL for invalid HDCs. And some applications rely on it. Reviewed-By: "Keith Whitwell" --- .../state_trackers/wgl/stw_ext_extensionsstring.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/gallium/state_trackers/wgl/stw_ext_extensionsstring.c b/src/gallium/state_trackers/wgl/stw_ext_extensionsstring.c index ecb326f..7cad49c 100644 --- a/src/gallium/state_trackers/wgl/stw_ext_extensionsstring.c +++ b/src/gallium/state_trackers/wgl/stw_ext_extensionsstring.c @@ -47,7 +47,9 @@ WINGDIAPI const char * APIENTRY wglGetExtensionsStringARB( HDC hdc ) { - (void) hdc; + if (!hdc) { + return NULL; + } return stw_extension_string; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: disable native integers
Module: Mesa Branch: master Commit: 2d80cad16e55b6eb11084045015a08fff43a7485 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d80cad16e55b6eb11084045015a08fff43a7485 Author: Dave Airlie Date: Wed Jan 11 19:48:00 2012 + llvmpipe: disable native integers llvmpipe shouldn't be reporting native integer support. Signed-off-by: Dave Airlie --- src/gallium/drivers/llvmpipe/lp_screen.c |9 - 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index 5798a19..fd6e439 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -168,7 +168,12 @@ llvmpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe switch(shader) { case PIPE_SHADER_FRAGMENT: - return tgsi_exec_get_shader_param(param); + switch (param) { + case PIPE_SHADER_CAP_INTEGERS: + return 0; + default: + return tgsi_exec_get_shader_param(param); + } case PIPE_SHADER_VERTEX: case PIPE_SHADER_GEOMETRY: switch (param) { @@ -181,6 +186,8 @@ llvmpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe return PIPE_MAX_VERTEX_SAMPLERS; else return 0; + case PIPE_SHADER_CAP_INTEGERS: + return 0; default: return draw_get_shader_param(shader, param); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): xlib: stop calling XShmQueryVersion()
Module: Mesa Branch: master Commit: 0a20051e6da99e91b7bf589ea457c77a8b618f26 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0a20051e6da99e91b7bf589ea457c77a8b618f26 Author: Brian Paul Date: Tue Jan 10 19:32:38 2012 -0700 xlib: stop calling XShmQueryVersion() It caused an X protocol error in some (rare) situations. This is a follow-on to the previous commits which fixes a bug reported by Wayne E. Robertz. NOTE: This is a candidate for the 7.11 branch. Reviewed-by: Adam Jackson --- src/mesa/drivers/x11/xm_api.c | 16 1 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c index 81b2459..bdee2a2 100644 --- a/src/mesa/drivers/x11/xm_api.c +++ b/src/mesa/drivers/x11/xm_api.c @@ -114,16 +114,16 @@ static int host_byte_order( void ) static int check_for_xshm( XMesaDisplay *display ) { #if defined(USE_XSHM) - int major, minor, ignore; - Bool pixmaps; + int ignore; if (XQueryExtension( display, "MIT-SHM", &ignore, &ignore, &ignore )) { - if (XShmQueryVersion( display, &major, &minor, &pixmaps )==True) { -return (pixmaps==True) ? 2 : 1; - } - else { -return 0; - } + /* Note: we're no longer calling XShmQueryVersion() here. It seems + * to be flakey (triggers a spurious X protocol error when we close + * one display connection and start using a new one. XShm has been + * around a long time and hasn't changed so if MIT_SHM is supported + * we assume we're good to go. + */ + return 2; } else { return 0; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/glx/xlib: call register_with_display() in glXChooseFBConfig()
Module: Mesa Branch: master Commit: 7f6de60c585c6ac99d8e6b1280a8d7ce82f3c5e2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7f6de60c585c6ac99d8e6b1280a8d7ce82f3c5e2 Author: Brian Paul Date: Tue Jan 10 19:39:04 2012 -0700 st/glx/xlib: call register_with_display() in glXChooseFBConfig() This is the same fix as the previous commit, except it's for the gallium glx/xlib state tracker. NOTE: This is a candidate for the 7.11 branch. Reviewed-by: Adam Jackson --- src/gallium/state_trackers/glx/xlib/glx_api.c |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c b/src/gallium/state_trackers/glx/xlib/glx_api.c index b68882b..d034fb5 100644 --- a/src/gallium/state_trackers/glx/xlib/glx_api.c +++ b/src/gallium/state_trackers/glx/xlib/glx_api.c @@ -1788,6 +1788,9 @@ glXChooseFBConfig(Display *dpy, int screen, { XMesaVisual xmvis; + /* register ourselves as an extension on this display */ + register_with_display(dpy); + if (!attribList || !attribList[0]) { /* return list of all configs (per GLX_SGIX_fbconfig spec) */ return glXGetFBConfigs(dpy, screen, nitems); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): xlib: call register_with_display() in Fake_glXChooseFBConfig ()
Module: Mesa Branch: master Commit: ecbdb173bbe3e37b4cbc6b08a5ba5a70236a0d1d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ecbdb173bbe3e37b4cbc6b08a5ba5a70236a0d1d Author: Brian Paul Date: Tue Jan 10 19:24:41 2012 -0700 xlib: call register_with_display() in Fake_glXChooseFBConfig() as we do in Fake_glXChooseVisual(). This registers the MesaGLX extension on the display so we can clean up buffers, etc. when the display connection is closed. Fixes a bug reported by Wayne E. Robertz. NOTE: This is a candidate for the 7.11 branch. Reviewed-by: Adam Jackson --- src/mesa/drivers/x11/fakeglx.c |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c index 445d43b..916296d 100644 --- a/src/mesa/drivers/x11/fakeglx.c +++ b/src/mesa/drivers/x11/fakeglx.c @@ -1983,6 +1983,9 @@ Fake_glXChooseFBConfig( Display *dpy, int screen, { XMesaVisual xmvis; + /* register ourselves as an extension on this display */ + register_with_display(dpy); + if (!attribList || !attribList[0]) { /* return list of all configs (per GLX_SGIX_fbconfig spec) */ return Fake_glXGetFBConfigs(dpy, screen, nitems); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): nv50/ir: handle TGSI_OPCODE_ISSG
Module: Mesa Branch: master Commit: b424bf69dfd78c64e065b8ba59d9b40a8f4fecd6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b424bf69dfd78c64e065b8ba59d9b40a8f4fecd6 Author: Christoph Bumiller Date: Wed Jan 11 20:25:06 2012 +0100 nv50/ir: handle TGSI_OPCODE_ISSG --- .../drivers/nv50/codegen/nv50_ir_from_tgsi.cpp | 11 --- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp index 7f4c7f2..a1c8f84 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp @@ -385,6 +385,7 @@ nv50_ir::DataType Instruction::inferSrcType() const case TGSI_OPCODE_ISGE: case TGSI_OPCODE_ISHR: case TGSI_OPCODE_ISLT: + case TGSI_OPCODE_ISSG: case TGSI_OPCODE_SAD: // not sure about SAD, but no one has a float version case TGSI_OPCODE_MOD: case TGSI_OPCODE_UARL: @@ -1892,14 +1893,18 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn) } } break; + case TGSI_OPCODE_ISSG: case TGSI_OPCODE_SSG: FOR_EACH_DST_ENABLED_CHANNEL(0, c, tgsi) { src0 = fetchSrc(0, c); val0 = getScratch(); val1 = getScratch(); - mkCmp(OP_SET, CC_GT, TYPE_F32, val0, src0, zero); - mkCmp(OP_SET, CC_LT, TYPE_F32, val1, src0, zero); - mkOp2(OP_SUB, TYPE_F32, dst0[c], val0, val1); + mkCmp(OP_SET, CC_GT, srcTy, val0, src0, zero); + mkCmp(OP_SET, CC_LT, srcTy, val1, src0, zero); + if (srcTy == TYPE_F32) +mkOp2(OP_SUB, TYPE_F32, dst0[c], val0, val1); + else +mkOp2(OP_SUB, TYPE_S32, dst0[c], val1, val0); } break; case TGSI_OPCODE_UCMP: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): nv50,nvc0: zero out program struct on program_destroy
Module: Mesa Branch: master Commit: f6b994b3058d1c6cd7c28eef522c08df3d83bea7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6b994b3058d1c6cd7c28eef522c08df3d83bea7 Author: Christoph Bumiller Date: Wed Jan 11 18:50:15 2012 +0100 nv50,nvc0: zero out program struct on program_destroy Prevent any state from carrying over to a new translation in cases where we assume that data is still zero from initial calloc (these would require us to do individual zeroing before translation which would be more code). --- src/gallium/drivers/nv50/nv50_program.c |8 +++- src/gallium/drivers/nvc0/nvc0_program.c |8 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c index c8b708c..c141a91 100644 --- a/src/gallium/drivers/nv50/nv50_program.c +++ b/src/gallium/drivers/nv50/nv50_program.c @@ -677,6 +677,9 @@ out: void nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p) { + const struct pipe_shader_state pipe = p->pipe; + const ubyte type = p->type; + if (p->res) nouveau_resource_free(&p->res); @@ -686,5 +689,8 @@ nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p) if (p->fixups) FREE(p->fixups); - p->translated = FALSE; + memset(p, 0, sizeof(*p)); + + p->pipe = pipe; + p->type = type; } diff --git a/src/gallium/drivers/nvc0/nvc0_program.c b/src/gallium/drivers/nvc0/nvc0_program.c index 42cd21d..813008c 100644 --- a/src/gallium/drivers/nvc0/nvc0_program.c +++ b/src/gallium/drivers/nvc0/nvc0_program.c @@ -711,6 +711,9 @@ nvc0_program_library_upload(struct nvc0_context *nvc0) void nvc0_program_destroy(struct nvc0_context *nvc0, struct nvc0_program *prog) { + const struct pipe_shader_state pipe = prog->pipe; + const ubyte type = prog->type; + if (prog->res) nouveau_resource_free(&prog->res); @@ -726,7 +729,8 @@ nvc0_program_destroy(struct nvc0_context *nvc0, struct nvc0_program *prog) FREE(prog->tfb); } - memset(prog->hdr, 0, sizeof(prog->hdr)); + memset(prog, 0, sizeof(*prog)); - prog->translated = FALSE; + prog->pipe = pipe; + prog->type = type; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): nv50/ir: handle TGSI_TEXTURE_SHADOWCUBE
Module: Mesa Branch: master Commit: 9d503992d7309a49df0b0a4887b999e2d6b291c0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d503992d7309a49df0b0a4887b999e2d6b291c0 Author: Christoph Bumiller Date: Wed Jan 11 20:18:56 2012 +0100 nv50/ir: handle TGSI_TEXTURE_SHADOWCUBE --- .../drivers/nv50/codegen/nv50_ir_from_tgsi.cpp |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp index 8b36895..7f4c7f2 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp @@ -345,6 +345,7 @@ static nv50_ir::TexTarget translateTexture(uint tex) NV50_IR_TEX_TARG_CASE(SHADOW2D, 2D_SHADOW); NV50_IR_TEX_TARG_CASE(SHADOW1D_ARRAY, 1D_ARRAY_SHADOW); NV50_IR_TEX_TARG_CASE(SHADOW2D_ARRAY, 2D_ARRAY_SHADOW); + NV50_IR_TEX_TARG_CASE(SHADOWCUBE, CUBE_SHADOW); NV50_IR_TEX_TARG_CASE(SHADOWRECT, RECT_SHADOW); case TGSI_TEXTURE_UNKNOWN: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): wayland-drm: Drop the non-premul formats, use format codes from drm_fourcc.h
Module: Mesa Branch: master Commit: 58dc1b28d1ef4d1931c52b079d304f2e1546329d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=58dc1b28d1ef4d1931c52b079d304f2e1546329d Author: Kristian Høgsberg Date: Wed Jan 11 14:23:24 2012 -0500 wayland-drm: Drop the non-premul formats, use format codes from drm_fourcc.h --- src/egl/drivers/dri2/egl_dri2.c| 10 +-- src/egl/drivers/dri2/platform_wayland.c| 31 -- .../wayland/wayland-drm/protocol/wayland-drm.xml | 64 +++- src/egl/wayland/wayland-drm/wayland-drm.c | 11 ++-- .../egl/common/native_wayland_drm_bufmgr_helper.c |5 +- .../state_trackers/egl/wayland/native_drm.c| 16 ++--- .../state_trackers/egl/wayland/native_shm.c|9 +-- .../state_trackers/egl/wayland/native_wayland.c| 13 +--- .../state_trackers/egl/wayland/native_wayland.h|5 +- 9 files changed, 97 insertions(+), 67 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 5fff7e1..80b2e38 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -1094,11 +1094,10 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx, attrs.Height = buffer->height; switch (wayland_drm_buffer_get_format(buffer)) { - case WL_DRM_FORMAT_ARGB32: - case WL_DRM_FORMAT_PREMULTIPLIED_ARGB32: + case WL_DRM_FORMAT_ARGB: format = __DRI_IMAGE_FORMAT_ARGB; break; - case WL_DRM_FORMAT_XRGB32: + case WL_DRM_FORMAT_XRGB: format = __DRI_IMAGE_FORMAT_XRGB; break; default: @@ -1273,11 +1272,10 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int dri_format; switch (format) { - case WL_DRM_FORMAT_ARGB32: - case WL_DRM_FORMAT_PREMULTIPLIED_ARGB32: + case WL_DRM_FORMAT_ARGB: dri_format =__DRI_IMAGE_FORMAT_ARGB; break; - case WL_DRM_FORMAT_XRGB32: + case WL_DRM_FORMAT_XRGB: dri_format = __DRI_IMAGE_FORMAT_XRGB; break; default: diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 16c613f..b2981a0 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -41,9 +41,8 @@ #include "wayland-drm-client-protocol.h" enum wl_drm_format_flags { - HAS_ARGB32 = 1, - HAS_PREMUL_ARGB32 = 2, - HAS_XRGB32 = 4 + HAS_ARGB = 1, + HAS_XRGB = 2 }; static void @@ -108,11 +107,9 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, dri2_surf->block_swap_buffers = EGL_FALSE; if (conf->AlphaSize == 0) - dri2_surf->format = WL_DRM_FORMAT_XRGB32; - else if (dri2_surf->base.VGAlphaFormat == EGL_VG_ALPHA_FORMAT_PRE) - dri2_surf->format = WL_DRM_FORMAT_PREMULTIPLIED_ARGB32; + dri2_surf->format = WL_DRM_FORMAT_XRGB; else - dri2_surf->format = WL_DRM_FORMAT_ARGB32; + dri2_surf->format = WL_DRM_FORMAT_ARGB; switch (type) { case EGL_WINDOW_BIT: @@ -671,7 +668,7 @@ dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx, wl_egl_pixmap->width, wl_egl_pixmap->height, dri2_buf->dri_buffer->pitch, - WL_DRM_FORMAT_PREMULTIPLIED_ARGB32); + WL_DRM_FORMAT_ARGB); wl_attr_list[1] = wl_egl_pixmap->width; wl_attr_list[3] = wl_egl_pixmap->height; @@ -768,14 +765,11 @@ drm_handle_format(void *data, struct wl_drm *drm, uint32_t format) struct dri2_egl_display *dri2_dpy = data; switch (format) { - case WL_DRM_FORMAT_ARGB32: - dri2_dpy->formats |= HAS_ARGB32; + case WL_DRM_FORMAT_ARGB: + dri2_dpy->formats |= HAS_ARGB; break; - case WL_DRM_FORMAT_PREMULTIPLIED_ARGB32: - dri2_dpy->formats |= HAS_PREMUL_ARGB32; - break; - case WL_DRM_FORMAT_XRGB32: - dri2_dpy->formats |= HAS_XRGB32; + case WL_DRM_FORMAT_XRGB: + dri2_dpy->formats |= HAS_XRGB; break; } } @@ -871,14 +865,11 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp) goto cleanup_driver; types = EGL_WINDOW_BIT | EGL_PIXMAP_BIT; - if (dri2_dpy->formats & HAS_PREMUL_ARGB32) - types |= EGL_VG_ALPHA_FORMAT_PRE_BIT; - for (i = 0; dri2_dpy->driver_configs[i]; i++) { config = dri2_dpy->driver_configs[i]; - if (dri2_dpy->formats & HAS_XRGB32) + if (dri2_dpy->formats & HAS_XRGB) dri2_add_config(disp, config, i + 1, 0, types, NULL, rgb_masks); - if (dri2_dpy->formats & (HAS_ARGB32 | HAS_PREMUL_ARGB32)) + if (dri2_dpy->formats & HAS_ARGB) dri2_add_config(disp, config, i + 1, 0, types, NULL, argb_masks); } diff --git a/src/egl/wayland/wayland-drm/protocol/wayland-drm.xml b/src/egl/wayland/wayland-drm/protocol/wayland-drm.xml index f63bebd..89fd8f0 100644 --- a/src/egl/way
Mesa (master): draw: Store the new pre_clip_pos member as well.
Module: Mesa Branch: master Commit: 1306644a67ad90c39c55f76e9b4734d943b6b5cc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1306644a67ad90c39c55f76e9b4734d943b6b5cc Author: José Fonseca Date: Wed Jan 11 18:10:43 2012 + draw: Store the new pre_clip_pos member as well. Again, not much testing nor peer review, but should be better than what's now. --- src/gallium/auxiliary/draw/draw_llvm.c | 22 -- 1 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 50c7e25..e71c802 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -885,7 +885,8 @@ convert_to_aos(struct gallivm_state *gallivm, static void store_clip(struct gallivm_state *gallivm, LLVMValueRef io_ptr, - LLVMValueRef (*outputs)[NUM_CHANNELS]) + LLVMValueRef (*outputs)[NUM_CHANNELS], + boolean pre_clip_pos) { LLVMBuilderRef builder = gallivm->builder; LLVMValueRef out[4]; @@ -914,10 +915,18 @@ store_clip(struct gallivm_state *gallivm, io2_ptr = LLVMBuildGEP(builder, io_ptr, &ind2, 1, ""); io3_ptr = LLVMBuildGEP(builder, io_ptr, &ind3, 1, ""); - clip_ptr0 = draw_jit_header_clip(gallivm, io0_ptr); - clip_ptr1 = draw_jit_header_clip(gallivm, io1_ptr); - clip_ptr2 = draw_jit_header_clip(gallivm, io2_ptr); - clip_ptr3 = draw_jit_header_clip(gallivm, io3_ptr); + /* FIXME: this needs updating for clip vertex support */ + if (!pre_clip_pos) { + clip_ptr0 = draw_jit_header_clip(gallivm, io0_ptr); + clip_ptr1 = draw_jit_header_clip(gallivm, io1_ptr); + clip_ptr2 = draw_jit_header_clip(gallivm, io2_ptr); + clip_ptr3 = draw_jit_header_clip(gallivm, io3_ptr); + } else { + clip_ptr0 = draw_jit_header_pre_clip_pos(gallivm, io0_ptr); + clip_ptr1 = draw_jit_header_pre_clip_pos(gallivm, io1_ptr); + clip_ptr2 = draw_jit_header_pre_clip_pos(gallivm, io2_ptr); + clip_ptr3 = draw_jit_header_pre_clip_pos(gallivm, io3_ptr); + } for (i = 0; i<4; i++) { clip0_ptr = LLVMBuildGEP(builder, clip_ptr0, indices, 2, ""); /* x0 */ @@ -1361,7 +1370,8 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant, variant->key.clamp_vertex_color); /* store original positions in clip before further manipulation */ - store_clip(gallivm, io, outputs); + store_clip(gallivm, io, outputs, 0); + store_clip(gallivm, io, outputs, 1); /* do cliptest */ if (enable_cliptest) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl_dri2: Put the _eglError call in the case switch case
Module: Mesa Branch: master Commit: 513d1feee46d05b71094c60ee09fa263867f25b7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=513d1feee46d05b71094c60ee09fa263867f25b7 Author: Kristian Høgsberg Date: Wed Jan 11 12:36:37 2012 -0500 egl_dri2: Put the _eglError call in the case switch case Log an error in case we get an unknown format, not in case for XRGB32. I botched the edit of Roberts patch. --- src/egl/drivers/dri2/egl_dri2.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index a7ebf59..5fff7e1 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -1099,11 +1099,11 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx, format = __DRI_IMAGE_FORMAT_ARGB; break; case WL_DRM_FORMAT_XRGB32: - _eglError(EGL_BAD_PARAMETER, - "dri2_create_image_khr: unsupported wl_buffer format"); format = __DRI_IMAGE_FORMAT_XRGB; break; default: + _eglError(EGL_BAD_PARAMETER, + "dri2_create_image_khr: unsupported wl_buffer format"); return NULL; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: rename translate_texture_target, and make translate_opcode static.
Module: Mesa Branch: master Commit: 3f80b69b5f2093ffc624bb901ce34f0e289bc25d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3f80b69b5f2093ffc624bb901ce34f0e289bc25d Author: Dave Airlie Date: Wed Jan 11 17:32:40 2012 + st/mesa: rename translate_texture_target, and make translate_opcode static. As suggested by Brian. Signed-off-by: Dave Airlie --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp |2 +- src/mesa/state_tracker/st_mesa_to_tgsi.c |6 +++--- src/mesa/state_tracker/st_mesa_to_tgsi.h |5 + 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index a947e18..555f88b 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -4182,7 +4182,7 @@ compile_tgsi_instruction(struct st_translate *t, ureg_tex_insn(ureg, inst->op, dst, num_dst, -translate_texture_target(inst->tex_target, inst->tex_shadow), +st_translate_texture_target(inst->tex_target, inst->tex_shadow), texoffsets, inst->tex_offset_num_offset, src, num_src); return; diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index e467ffd..0764234 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -269,7 +269,7 @@ src_register( struct st_translate *t, * Map mesa texture target to TGSI texture target. */ unsigned -translate_texture_target( GLuint textarget, +st_translate_texture_target( GLuint textarget, GLboolean shadow ) { if (shadow) { @@ -516,7 +516,7 @@ static void emit_ddy( struct st_translate *t, -unsigned +static unsigned translate_opcode( unsigned op ) { switch( op ) { @@ -708,7 +708,7 @@ compile_instruction( ureg_tex_insn( ureg, translate_opcode( inst->Opcode ), dst, num_dst, - translate_texture_target( inst->TexSrcTarget, + st_translate_texture_target( inst->TexSrcTarget, inst->TexShadow ), NULL, 0, src, num_src ); diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.h b/src/mesa/state_tracker/st_mesa_to_tgsi.h index 0dbdf5f..7563c80 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.h +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.h @@ -65,10 +65,7 @@ void st_free_tokens(const struct tgsi_token *tokens); unsigned -translate_opcode(unsigned op); - -unsigned -translate_texture_target(GLuint textarget, GLboolean shadow); +st_translate_texture_target(GLuint textarget, GLboolean shadow); #if defined __cplusplus ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): softpipe: route correct coordinates for shadow cube sampling .
Module: Mesa Branch: master Commit: fffca9046c96e3411493c39ebb1855012620495c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fffca9046c96e3411493c39ebb1855012620495c Author: Dave Airlie Date: Thu Jan 5 16:16:24 2012 + softpipe: route correct coordinates for shadow cube sampling. This fixes the shadow cube map sampling on softpipe. Signed-off-by: Dave Airlie --- src/gallium/drivers/softpipe/sp_tex_sample.c |3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c index f552b5e..bd0546e 100644 --- a/src/gallium/drivers/softpipe/sp_tex_sample.c +++ b/src/gallium/drivers/softpipe/sp_tex_sample.c @@ -2118,7 +2118,8 @@ sample_compare(struct tgsi_sampler *tgsi_sampler, * RGBA channels. We look at the red channel here. */ - if (samp->view->texture->target == PIPE_TEXTURE_2D_ARRAY) { + if (samp->view->texture->target == PIPE_TEXTURE_2D_ARRAY || + samp->view->texture->target == PIPE_TEXTURE_CUBE) { pc0 = CLAMP(c0[0], 0.0F, 1.0F); pc1 = CLAMP(c0[1], 0.0F, 1.0F); pc2 = CLAMP(c0[2], 0.0F, 1.0F); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glsl_to_tgsi: add support for shadow cube map sampling.
Module: Mesa Branch: master Commit: 2f275466f78b7268e4f7ae8890eafd4243a2b8b0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2f275466f78b7268e4f7ae8890eafd4243a2b8b0 Author: Dave Airlie Date: Wed Jan 11 13:23:38 2012 + glsl_to_tgsi: add support for shadow cube map sampling. This along with the TGSI support lets the piglit sampler-cube-shadow test pass on softpipe. Signed-off-by: Dave Airlie --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp |5 +++-- src/mesa/state_tracker/st_mesa_to_tgsi.c |1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index cb44e2b..a947e18 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -2646,8 +2646,9 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir) ir->shadow_comparitor->accept(this); /* XXX This will need to be updated for cubemap array samplers. */ - if (sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_2D && - sampler_type->sampler_array) { + if ((sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_2D && + sampler_type->sampler_array) || + sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_CUBE) { coord_dst.writemask = WRITEMASK_W; } else { coord_dst.writemask = WRITEMASK_Z; diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index ac61534..e467ffd 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -279,6 +279,7 @@ translate_texture_target( GLuint textarget, case TEXTURE_RECT_INDEX: return TGSI_TEXTURE_SHADOWRECT; case TEXTURE_1D_ARRAY_INDEX: return TGSI_TEXTURE_SHADOW1D_ARRAY; case TEXTURE_2D_ARRAY_INDEX: return TGSI_TEXTURE_SHADOW2D_ARRAY; + case TEXTURE_CUBE_INDEX: return TGSI_TEXTURE_SHADOWCUBE; default: break; } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tgsi: add TGSI_TEXTURE_SHADOWCUBEMAP
Module: Mesa Branch: master Commit: 0ec30805a4aad945515957e980374f65fbd3b66e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0ec30805a4aad945515957e980374f65fbd3b66e Author: Dave Airlie Date: Wed Jan 11 13:22:22 2012 + tgsi: add TGSI_TEXTURE_SHADOWCUBEMAP This adds support for shadow cubemap texture sampling instructions. This is required for GL 3.0. Signed-off-by: Dave Airlie --- src/gallium/auxiliary/tgsi/tgsi_exec.c |2 ++ src/gallium/auxiliary/tgsi/tgsi_strings.c |1 + src/gallium/auxiliary/tgsi/tgsi_util.c |1 + src/gallium/include/pipe/p_shader_tokens.h |3 ++- 4 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 72b1dca..c0bd2d0 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -1865,6 +1865,7 @@ exec_tex(struct tgsi_exec_machine *mach, &r[0], &r[1], &r[2], &r[3]); /* outputs */ break; case TGSI_TEXTURE_SHADOW2D_ARRAY: + case TGSI_TEXTURE_SHADOWCUBE: FETCH(&r[0], 0, CHAN_X); FETCH(&r[1], 0, CHAN_Y); FETCH(&r[2], 0, CHAN_Z); @@ -2182,6 +2183,7 @@ exec_sample(struct tgsi_exec_machine *mach, break; case TGSI_TEXTURE_SHADOW2D_ARRAY: + case TGSI_TEXTURE_SHADOWCUBE: FETCH(&r[0], 0, CHAN_X); FETCH(&r[1], 0, CHAN_Y); FETCH(&r[2], 0, CHAN_Z); diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c b/src/gallium/auxiliary/tgsi/tgsi_strings.c index de9152d..520452c 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_strings.c +++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c @@ -90,6 +90,7 @@ const char *tgsi_texture_names[TGSI_TEXTURE_COUNT] = "2DARRAY", "SHADOW1DARRAY", "SHADOW2DARRAY", + "SHADOWCUBE" }; const char *tgsi_property_names[TGSI_PROPERTY_COUNT] = diff --git a/src/gallium/auxiliary/tgsi/tgsi_util.c b/src/gallium/auxiliary/tgsi/tgsi_util.c index 9f6997d..36dc10d 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_util.c +++ b/src/gallium/auxiliary/tgsi/tgsi_util.c @@ -284,6 +284,7 @@ tgsi_util_get_inst_usage_mask(const struct tgsi_full_instruction *inst, read_mask = TGSI_WRITEMASK_XYZ; break; case TGSI_TEXTURE_SHADOW2D_ARRAY: + case TGSI_TEXTURE_SHADOWCUBE: read_mask = TGSI_WRITEMASK_XYZW; break; default: diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h index a131630..df2dd5e 100644 --- a/src/gallium/include/pipe/p_shader_tokens.h +++ b/src/gallium/include/pipe/p_shader_tokens.h @@ -454,7 +454,8 @@ struct tgsi_instruction_label #define TGSI_TEXTURE_2D_ARRAY 10 #define TGSI_TEXTURE_SHADOW1D_ARRAY 11 #define TGSI_TEXTURE_SHADOW2D_ARRAY 12 -#define TGSI_TEXTURE_COUNT 13 +#define TGSI_TEXTURE_SHADOWCUBE 13 +#define TGSI_TEXTURE_COUNT 14 struct tgsi_instruction_texture { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: Update for TGSI_INTERPOLATE_COLOR.
Module: Mesa Branch: master Commit: ec4d691474bcf84bb69161cda25494962a08172c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ec4d691474bcf84bb69161cda25494962a08172c Author: José Fonseca Date: Wed Jan 11 17:14:26 2012 + llvmpipe: Update for TGSI_INTERPOLATE_COLOR. Not thoroughly tested nor reviewed. But should at least prevent the assertion failure. --- src/gallium/drivers/llvmpipe/lp_state_fs.c | 10 +++--- 1 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 53e35ef..c7bab82 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -1025,19 +1025,15 @@ llvmpipe_create_fs_state(struct pipe_context *pipe, case TGSI_INTERPOLATE_PERSPECTIVE: shader->inputs[i].interp = LP_INTERP_PERSPECTIVE; break; + case TGSI_INTERPOLATE_COLOR: +shader->inputs[i].interp = LP_INTERP_COLOR; +break; default: assert(0); break; } switch (shader->info.base.input_semantic_name[i]) { - case TGSI_SEMANTIC_COLOR: - /* Colors may be either linearly or constant interpolated in - * the fragment shader, but that information isn't available - * here. Mark color inputs and fix them up later. - */ -shader->inputs[i].interp = LP_INTERP_COLOR; - break; case TGSI_SEMANTIC_FACE: shader->inputs[i].interp = LP_INTERP_FACING; break; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl_dri2/wayland: handle creating xrgb8888 images
Module: Mesa Branch: master Commit: 670f182a1f0401f34b1fb7ead50644589737f0d2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=670f182a1f0401f34b1fb7ead50644589737f0d2 Author: Robert Bragg Date: Tue Jan 10 22:16:26 2012 + egl_dri2/wayland: handle creating xrgb images When creating an EGLImage from a struct wl_buffer * this ensures that we create an XRGB image if the wayland buffer doesn't have an alpha channel. To determine if a wl_buffer has a valid alpha channel this patch adds an internal wayland_drm_buffer_has_alpha() function. It's important to get the internal format for an EGLImage right so that if a GL texture is later created from the image then the GL driver will know if it should sample the alpha from the texture or flatten it to a constant of 1.0. This avoids needing fragment program workarounds in wayland compositors to manually ignore the alpha component of textures created from wayland buffers. krh: Edited to use wl_buffer_get_format() instead of wl_buffer_has_alpha(). Reviewed-by: Kristian Høgsberg --- src/egl/drivers/dri2/egl_dri2.c | 125 - src/egl/wayland/wayland-drm/wayland-drm.c |8 ++ src/egl/wayland/wayland-drm/wayland-drm.h |3 + 3 files changed, 80 insertions(+), 56 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 47de978..a7ebf59 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -993,40 +993,17 @@ dri2_create_image_khr_renderbuffer(_EGLDisplay *disp, _EGLContext *ctx, } static _EGLImage * -dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx, - EGLClientBuffer buffer, const EGLint *attr_list) +dri2_create_image_drm_name(_EGLDisplay *disp, _EGLContext *ctx, + EGLint name, + const _EGLImageAttribs *attrs, + EGLint format, + EGLint pitch) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_image *dri2_img; - EGLint format, name, pitch, err; - _EGLImageAttribs attrs; (void) ctx; - name = (EGLint) (uintptr_t) buffer; - - err = _eglParseImageAttribList(&attrs, disp, attr_list); - if (err != EGL_SUCCESS) - return NULL; - - if (attrs.Width <= 0 || attrs.Height <= 0 || - attrs.DRMBufferStrideMESA <= 0) { - _eglError(EGL_BAD_PARAMETER, - "bad width, height or stride"); - return NULL; - } - - switch (attrs.DRMBufferFormatMESA) { - case EGL_DRM_BUFFER_FORMAT_ARGB32_MESA: - format = __DRI_IMAGE_FORMAT_ARGB; - pitch = attrs.DRMBufferStrideMESA; - break; - default: - _eglError(EGL_BAD_PARAMETER, - "dri2_create_image_khr: unsupported pixmap depth"); - return NULL; - } - dri2_img = malloc(sizeof *dri2_img); if (!dri2_img) { _eglError(EGL_BAD_ALLOC, "dri2_create_image_mesa_drm"); @@ -1040,8 +1017,8 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx, dri2_img->dri_image = dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen, - attrs.Width, - attrs.Height, + attrs->Width, + attrs->Height, format, name, pitch, @@ -1055,48 +1032,84 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx, return &dri2_img->base; } -#ifdef HAVE_WAYLAND_PLATFORM static _EGLImage * -dri2_reference_drm_image(_EGLDisplay *disp, _EGLContext *ctx, -__DRIimage *dri_image, EGLint width, EGLint height) +dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx, + EGLClientBuffer buffer, const EGLint *attr_list) { - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); - EGLint attr_list[] = { - EGL_WIDTH, 0, - EGL_HEIGHT, 0, - EGL_DRM_BUFFER_STRIDE_MESA, 0, - EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, - EGL_NONE - }; - EGLint name, stride; - - dri2_dpy->image->queryImage(dri_image, __DRI_IMAGE_ATTRIB_NAME, &name); - dri2_dpy->image->queryImage(dri_image, __DRI_IMAGE_ATTRIB_STRIDE, &stride); + EGLint format, name, pitch, err; + _EGLImageAttribs attrs; + + name = (EGLint) (uintptr_t) buffer; + + err = _eglParseImageAttribList(&attrs, disp, attr_list); + if (err != EGL_SUCCESS) + return NULL; - attr_list[1] = width; - attr_list[3] = height; - attr_list[5] = stride / 4; + if (attrs.Width <= 0 || attrs.Height <= 0 || + attrs.DRMBufferStrideMESA <= 0) { + _eglErr
Mesa (master): glx: Suppress unused variable warning for cmdlen
Module: Mesa Branch: master Commit: 765ed3a6a9317607311bac1dcb0edee13ebcee16 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=765ed3a6a9317607311bac1dcb0edee13ebcee16 Author: Paul Berry Date: Mon Jan 9 11:24:17 2012 -0800 glx: Suppress unused variable warning for cmdlen No functional change. In the function __indirect_glAreTexturesResident(), the variable cmdlen is only used if USE_XCB is not defined. This patch avoids a compile warning in the event that USE_XCB is defined. v2: just move cmdlen declaration inside the #else part. Reviewed-by: Ian Romanick Reviewed-by: Kenneth Graunke --- src/glx/single2.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/glx/single2.c b/src/glx/single2.c index 66281fa..259c4fe 100644 --- a/src/glx/single2.c +++ b/src/glx/single2.c @@ -887,7 +887,6 @@ __indirect_glAreTexturesResident(GLsizei n, const GLuint * textures, struct glx_context *const gc = __glXGetCurrentContext(); Display *const dpy = gc->currentDpy; GLboolean retval = (GLboolean) 0; - const GLuint cmdlen = 4 + __GLX_PAD((n * 4)); if (__builtin_expect((n >= 0) && (dpy != NULL), 1)) { #ifdef USE_XCB xcb_connection_t *c = XGetXCBConnection(dpy); @@ -903,6 +902,7 @@ __indirect_glAreTexturesResident(GLsizei n, const GLuint * textures, retval = reply->ret_val; free(reply); #else + const GLuint cmdlen = 4 + __GLX_PAD((n * 4)); GLubyte const *pc = __glXSetupSingleRequest(gc, X_GLsop_AreTexturesResident, cmdlen); (void) memcpy((void *) (pc + 0), (void *) (&n), 4); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: Move transform feedback error check to reduce array overflow risk.
Module: Mesa Branch: master Commit: d3150ebc8c1833322daf24b2cd47e31a5b2f8a1f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3150ebc8c1833322daf24b2cd47e31a5b2f8a1f Author: Paul Berry Date: Mon Jan 9 11:25:14 2012 -0800 mesa: Move transform feedback error check to reduce array overflow risk. Previous to this patch, we didn't do the limit check for MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS until the end of the store_tfeedback_info() function, *after* storing all of the transform feedback info in the gl_transform_feedback_info::Outputs array. This meant that the limit check wouldn't prevent us from overflowing the array and corrupting memory. This patch moves the limit check to the top of tfeedback_decl::store() so that there is no risk of overflowing the array. It also adds assertions to verify that the checks for MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS and MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS are sufficient to avoid array overflow. Note: strictly speaking this patch isn't necessary, since the maximum possible number of varyings is MAX_VARYING (16), whereas the size of the Outputs array is MAX_PROGRAM_OUTPUTS (64), so it's impossible to have enough varyings to overflow the array. However it seems prudent to do the limit check before the array access in case these limits change in the future. Reviewed-by: Ian Romanick --- src/glsl/linker.cpp | 52 +++--- 1 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 39a9c46..0d85aee 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -1388,7 +1388,7 @@ public: static bool is_same(const tfeedback_decl &x, const tfeedback_decl &y); bool assign_location(struct gl_context *ctx, struct gl_shader_program *prog, ir_variable *output_var); - bool store(struct gl_shader_program *prog, + bool store(struct gl_context *ctx, struct gl_shader_program *prog, struct gl_transform_feedback_info *info, unsigned buffer, unsigned varying) const; @@ -1631,7 +1631,7 @@ tfeedback_decl::assign_location(struct gl_context *ctx, * is returned. */ bool -tfeedback_decl::store(struct gl_shader_program *prog, +tfeedback_decl::store(struct gl_context *ctx, struct gl_shader_program *prog, struct gl_transform_feedback_info *info, unsigned buffer, unsigned varying) const { @@ -1647,6 +1647,35 @@ tfeedback_decl::store(struct gl_shader_program *prog, this->orig_name); return false; } + + /* From GL_EXT_transform_feedback: +* A program will fail to link if: +* +* * the total number of components to capture is greater than +* the constant MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT +* and the buffer mode is INTERLEAVED_ATTRIBS_EXT. +*/ + if (prog->TransformFeedback.BufferMode == GL_INTERLEAVED_ATTRIBS && + info->BufferStride[buffer] + this->num_components() > + ctx->Const.MaxTransformFeedbackInterleavedComponents) { + linker_error(prog, "The MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS " + "limit has been exceeded."); + return false; + } + + /* Verify that the checks on MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS +* and MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS are sufficient to prevent +* overflow of info->Outputs[]. In worst case we generate one entry in +* Outputs[] per component so a conservative check is to verify that the +* size of the array is greater than or equal to both +* MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS and +* MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS. +*/ + assert(Elements(info->Outputs) >= + ctx->Const.MaxTransformFeedbackInterleavedComponents); + assert(Elements(info->Outputs) >= + ctx->Const.MaxTransformFeedbackSeparateComponents); + unsigned translated_size = this->size; if (this->is_clip_distance_mesa) translated_size = (translated_size + 3) / 4; @@ -1943,7 +1972,6 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, unsigned num_tfeedback_decls, tfeedback_decl *tfeedback_decls) { - unsigned total_tfeedback_components = 0; bool separate_attribs_mode = prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS; @@ -1962,25 +1990,9 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, for (unsigned i = 0; i < num_tfeedback_decls; ++i) { unsigned buffer = separate_attribs_mode ? i : 0; - if (!tfeedback_decls[i].store(prog, &prog->LinkedTransformFeedback, + if (!tfeedback_decls[i].store(ctx, prog, &prog->LinkedTransformFeedback, buffer, i)) return false; - total_tfeedback_components += tfeedback_decls[i].num_components(); -
Mesa (master): mesa: Fix transform feedback of unsubscripted gl_ClipDistance array.
Module: Mesa Branch: master Commit: 642e5b413e0890b2070ba78fde42db381eaf02e5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=642e5b413e0890b2070ba78fde42db381eaf02e5 Author: Paul Berry Date: Wed Jan 4 13:57:52 2012 -0800 mesa: Fix transform feedback of unsubscripted gl_ClipDistance array. On drivers that set gl_shader_compiler_options::LowerClipDistance (for example i965), we need to handle transform feedback of gl_ClipDistance specially, to account for the fact that the hardware represents it as an array of vec4's rather than an array of floats. The previous way this was accounted for (translating the request for gl_ClipDistance[n] to a request for a component of gl_ClipDistanceMESA[n/4]) doesn't work when performing transform feedback on the whole unsubscripted array, because we need to keep track of the size of the gl_ClipDistance array prior to the lowering pass. So I replaced it with a boolean is_clip_distance_mesa, which switches on the special logic that is needed to handle the lowered version of gl_ClipDistance. Fixes Piglit tests "EXT_transform_feedback/builtin-varyings gl_ClipDistance[{1,2,3,5,6,7}]-no-subscript". Reviewed-by: Eric Anholt --- src/glsl/linker.cpp| 89 ++-- src/mesa/main/mtypes.h |2 + 2 files changed, 58 insertions(+), 33 deletions(-) diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index f32c217..39a9c46 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -246,7 +246,8 @@ count_attribute_slots(const glsl_type *t) /** * Verify that a vertex shader executable meets all semantic requirements. * - * Also sets prog->Vert.UsesClipDistance as a side effect. + * Also sets prog->Vert.UsesClipDistance and prog->Vert.ClipDistanceArraySize + * as a side effect. * * \param shader Vertex shader executable to be verified */ @@ -264,6 +265,8 @@ validate_vertex_shader_executable(struct gl_shader_program *prog, return false; } + prog->Vert.ClipDistanceArraySize = 0; + if (prog->Version >= 130) { /* From section 7.1 (Vertex Shader Special Variables) of the * GLSL 1.30 spec: @@ -282,6 +285,10 @@ validate_vertex_shader_executable(struct gl_shader_program *prog, return false; } prog->Vert.UsesClipDistance = clip_distance.variable_found(); + ir_variable *clip_distance_var = + shader->symbols->get_variable("gl_ClipDistance"); + if (clip_distance_var) + prog->Vert.ClipDistanceArraySize = clip_distance_var->type->length; } return true; @@ -1399,7 +1406,10 @@ public: */ bool matches_var(ir_variable *var) const { - return strcmp(var->name, this->var_name) == 0; + if (this->is_clip_distance_mesa) + return strcmp(var->name, "gl_ClipDistanceMESA") == 0; + else + return strcmp(var->name, this->var_name) == 0; } /** @@ -1408,10 +1418,10 @@ public: */ unsigned num_components() const { - if (this->single_component == -1) - return this->vector_elements * this->matrix_columns * this->size; + if (this->is_clip_distance_mesa) + return this->size; else - return 1; + return this->vector_elements * this->matrix_columns * this->size; } private: @@ -1437,11 +1447,10 @@ private: unsigned array_subscript; /** -* Which component to extract from the vertex shader output location that -* the linker assigned to this variable. -1 if all components should be -* extracted. +* True if the variable is gl_ClipDistance and the driver lowers +* gl_ClipDistance to gl_ClipDistanceMESA. */ - int single_component; + bool is_clip_distance_mesa; /** * The vertex shader output location that the linker assigned for this @@ -1487,7 +1496,7 @@ tfeedback_decl::init(struct gl_context *ctx, struct gl_shader_program *prog, this->location = -1; this->orig_name = input; - this->single_component = -1; + this->is_clip_distance_mesa = false; const char *bracket = strrchr(input, '['); @@ -1503,17 +1512,13 @@ tfeedback_decl::init(struct gl_context *ctx, struct gl_shader_program *prog, this->is_subscripted = false; } - /* For drivers that lower gl_ClipDistance to gl_ClipDistanceMESA, we need -* to convert a request for gl_ClipDistance[n] into a request for a -* component of gl_ClipDistanceMESA[n/4]. + /* For drivers that lower gl_ClipDistance to gl_ClipDistanceMESA, this +* class must behave specially to account for the fact that gl_ClipDistance +* is converted from a float[8] to a vec4[2]. */ if (ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].LowerClipDistance && strcmp(this->var_name, "gl_ClipDistance") == 0) { - this->var_name = "gl_ClipDistanceMESA"; - if (this->is_subscripted) { - this->single_component = this->array_subscript % 4; - this->array_subscript /= 4; - } + this->i
Mesa (master): mesa: Fix computation of transform feedback num_components.
Module: Mesa Branch: master Commit: be4e9f7a0ccb7aa0edef5e5b589bdbbfd4eab3cb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=be4e9f7a0ccb7aa0edef5e5b589bdbbfd4eab3cb Author: Paul Berry Date: Wed Jan 4 12:21:55 2012 -0800 mesa: Fix computation of transform feedback num_components. The function tfeedback_decl::num_components() was not correctly accounting for transform feedback of whole arrays and gl_ClipDistance. The bug was hard to notice in tests, because it only affected the checks for MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS and MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS. This patch fixes the computation, and adds an assertion to verify num_components() even when MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS and MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS are not exceeded. The assertion requires keeping track of components_so_far in tfeedback_decl::store(); this will be useful in a future patch to fix non-multiple-of-4-sized gl_ClipDistance. Reviewed-by: Eric Anholt --- src/glsl/linker.cpp |8 +++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index e8472d4..f32c217 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -1408,7 +1408,10 @@ public: */ unsigned num_components() const { - return this->vector_elements * this->matrix_columns; + if (this->single_component == -1) + return this->vector_elements * this->matrix_columns * this->size; + else + return 1; } private: @@ -1631,6 +1634,7 @@ tfeedback_decl::store(struct gl_shader_program *prog, this->orig_name); return false; } + unsigned components_so_far = 0; for (unsigned index = 0; index < this->size; ++index) { for (unsigned v = 0; v < this->matrix_columns; ++v) { unsigned num_components = @@ -1644,8 +1648,10 @@ tfeedback_decl::store(struct gl_shader_program *prog, this->single_component >= 0 ? this->single_component : 0; ++info->NumOutputs; info->BufferStride[buffer] += num_components; + components_so_far += num_components; } } + assert(components_so_far == this->num_components()); info->Varyings[varying].Name = ralloc_strdup(prog, this->orig_name); info->Varyings[varying].Type = this->type; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st_extensions: fixup GLSL 1.30 related enables (v3)
Module: Mesa Branch: master Commit: c62e02000d11e29e70a1000d32cb08d9a450485f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c62e02000d11e29e70a1000d32cb08d9a450485f Author: Dave Airlie Date: Thu Jan 5 14:35:54 2012 + st_extensions: fixup GLSL 1.30 related enables (v3) This just fixes up the enables for native integers and EXT_texture_integer support in st/mesa. It also set the MaxClipPlanes to 8. We should consider exposing caps for MCP vs MCD, but since core mesa doesn't care yet maybe we can wait for now. v2: use 32-bit formats as per Marek's mail. v3: add calim's fix for INT_DIV_TO_MUL_RCP disabling. Signed-off-by: Dave Airlie --- src/mesa/state_tracker/st_extensions.c | 31 ++- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 11 +++-- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index a9d4054..49c8747 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -263,12 +263,6 @@ void st_init_extensions(struct st_context *st) ctx->Const.GLSLVersion = 120; _mesa_override_glsl_version(st->ctx); - /* Extensions that only depend on the GLSL version: -*/ - if (ctx->Const.GLSLVersion >= 130) { - ctx->Extensions.ARB_conservative_depth = GL_TRUE; - } - /* * Extensions that are supported by all Gallium drivers: */ @@ -587,6 +581,23 @@ void st_init_extensions(struct st_context *st) #endif } + if (screen->get_shader_param(screen, PIPE_SHADER_VERTEX, +PIPE_SHADER_CAP_INTEGERS) && + screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, +PIPE_SHADER_CAP_INTEGERS)) { + ctx->Const.NativeIntegers = GL_TRUE; + } + + if (ctx->Const.NativeIntegers) + ctx->Const.GLSLVersion = 130; + + /* Extensions that only depend on the GLSL version: +*/ + if (ctx->Const.GLSLVersion >= 130) { + ctx->Extensions.ARB_conservative_depth = GL_TRUE; + ctx->Const.MaxClipPlanes = 8; + } + ctx->Extensions.NV_primitive_restart = GL_TRUE; if (!screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART)) { st->sw_primitive_restart = GL_TRUE; @@ -703,4 +714,12 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.ARB_transform_feedback2 = GL_TRUE; } } + + if (ctx->Const.NativeIntegers && + screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_UINT, PIPE_TEXTURE_2D, 0, + PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET) && + screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_SINT, PIPE_TEXTURE_2D, 0, + PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET)) + ctx->Extensions.EXT_texture_integer = GL_TRUE; + } diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index e450d13..cb44e2b 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -5010,13 +5010,18 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) num_clip_distances[i] = get_clip_distance_size(ir); do { + unsigned what_to_lower = MOD_TO_FRACT | DIV_TO_MUL_RCP | +EXP_TO_EXP2 | LOG_TO_LOG2; + if (options->EmitNoPow) +what_to_lower |= POW_TO_EXP2; + if (!ctx->Const.NativeIntegers) +what_to_lower |= INT_DIV_TO_MUL_RCP; + progress = false; /* Lowering */ do_mat_op_to_vec(ir); - lower_instructions(ir, (MOD_TO_FRACT | DIV_TO_MUL_RCP | EXP_TO_EXP2 -| LOG_TO_LOG2 | INT_DIV_TO_MUL_RCP -| ((options->EmitNoPow) ? POW_TO_EXP2 : 0))); + lower_instructions(ir, what_to_lower); progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st_glsl_to_tgsi: use ISSG and fixup IABS
Module: Mesa Branch: master Commit: cc94f0541c7729bca95f21b879c2071722ca3017 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cc94f0541c7729bca95f21b879c2071722ca3017 Author: Dave Airlie Date: Mon Jan 9 11:50:14 2012 + st_glsl_to_tgsi: use ISSG and fixup IABS It doesn't look like the GLSL compiler will produce sign op for an unsigned anyways (seems insane anyways). Signed-off-by: Dave Airlie --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp |8 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 3b8e2fe..e450d13 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -664,6 +664,9 @@ glsl_to_tgsi_visitor::get_opcode(ir_instruction *ir, unsigned op, case3(SLT, ISLT, USLT); case2iu(ISHR, USHR); + + case2fi(SSG, ISSG); + case3(ABS, IABS, IABS); default: break; } @@ -1410,10 +1413,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir) } break; case ir_unop_abs: - if (result_dst.type == GLSL_TYPE_INT || result_dst.type == GLSL_TYPE_UINT) - emit(ir, TGSI_OPCODE_IABS, result_dst, op[0]); - else - emit(ir, TGSI_OPCODE_ABS, result_dst, op[0]); + emit(ir, TGSI_OPCODE_ABS, result_dst, op[0]); break; case ir_unop_sign: emit(ir, TGSI_OPCODE_SSG, result_dst, op[0]); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tgsi: add ISSG support
Module: Mesa Branch: master Commit: b6cbc28533a3fd68dbfe694c0774735233df8758 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b6cbc28533a3fd68dbfe694c0774735233df8758 Author: Dave Airlie Date: Mon Jan 9 11:49:34 2012 + tgsi: add ISSG support This adds integer version of SSG that GLSL 1.30 can produce. Signed-off-by: Dave Airlie Reviewed-by: Brian Paul --- src/gallium/auxiliary/tgsi/tgsi_exec.c | 14 ++ src/gallium/auxiliary/tgsi/tgsi_info.c |1 + src/gallium/include/pipe/p_shader_tokens.h |3 ++- 3 files changed, 17 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 3046656..72b1dca 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -375,6 +375,16 @@ micro_sgn(union tgsi_exec_channel *dst, } static void +micro_isgn(union tgsi_exec_channel *dst, + const union tgsi_exec_channel *src) +{ + dst->i[0] = src->i[0] < 0 ? -1 : src->i[0] > 0 ? 1 : 0; + dst->i[1] = src->i[1] < 0 ? -1 : src->i[1] > 0 ? 1 : 0; + dst->i[2] = src->i[2] < 0 ? -1 : src->i[2] > 0 ? 1 : 0; + dst->i[3] = src->i[3] < 0 ? -1 : src->i[3] > 0 ? 1 : 0; +} + +static void micro_sgt(union tgsi_exec_channel *dst, const union tgsi_exec_channel *src0, const union tgsi_exec_channel *src1) @@ -4207,6 +4217,10 @@ exec_instruction( exec_vector_unary(mach, inst, micro_iabs, TGSI_EXEC_DATA_INT, TGSI_EXEC_DATA_INT); break; + case TGSI_OPCODE_ISSG: + exec_vector_unary(mach, inst, micro_isgn, TGSI_EXEC_DATA_INT, TGSI_EXEC_DATA_INT); + break; + default: assert( 0 ); } diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c b/src/gallium/auxiliary/tgsi/tgsi_info.c index c9acdb9..5b26d8f 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_info.c +++ b/src/gallium/auxiliary/tgsi/tgsi_info.c @@ -193,6 +193,7 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] = { 1, 1, 0, 0, 0, 0, "UARL", TGSI_OPCODE_UARL }, { 1, 3, 0, 0, 0, 0, "UCMP", TGSI_OPCODE_UCMP }, { 1, 1, 0, 0, 0, 0, "IABS", TGSI_OPCODE_IABS }, + { 1, 1, 0, 0, 0, 0, "ISSG", TGSI_OPCODE_ISSG }, }; const struct tgsi_opcode_info * diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h index cb1e698..a131630 100644 --- a/src/gallium/include/pipe/p_shader_tokens.h +++ b/src/gallium/include/pipe/p_shader_tokens.h @@ -379,8 +379,9 @@ struct tgsi_property_data { #define TGSI_OPCODE_UARL157 #define TGSI_OPCODE_UCMP158 #define TGSI_OPCODE_IABS159 +#define TGSI_OPCODE_ISSG160 -#define TGSI_OPCODE_LAST160 +#define TGSI_OPCODE_LAST161 #define TGSI_SAT_NONE0 /* do not saturate */ #define TGSI_SAT_ZERO_ONE1 /* clamp to [0,1] */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): softpipe: enable clamping control
Module: Mesa Branch: master Commit: 0fe2b397bbee346f72f48f364a78459e5a54c534 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0fe2b397bbee346f72f48f364a78459e5a54c534 Author: Dave Airlie Date: Thu Jan 5 15:36:43 2012 + softpipe: enable clamping control This enables fragment clamping in softpipe, it passes more tests than it did previously with no regressions, There are still a couple of failures in the SNORM types to investigate. Signed-off-by: Dave Airlie --- src/gallium/drivers/softpipe/sp_quad_blend.c |9 ++--- src/gallium/drivers/softpipe/sp_screen.c |2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_quad_blend.c b/src/gallium/drivers/softpipe/sp_quad_blend.c index 7180fa1..d546b14 100644 --- a/src/gallium/drivers/softpipe/sp_quad_blend.c +++ b/src/gallium/drivers/softpipe/sp_quad_blend.c @@ -894,7 +894,7 @@ blend_fallback(struct quad_stage *qs, /* If fixed-point dest color buffer, need to clamp the incoming * fragment colors now. */ - if (clamp) { + if (clamp || softpipe->rasterizer->clamp_fragment_color) { clamp_colors(quadColor); } @@ -982,7 +982,7 @@ blend_single_add_src_alpha_inv_src_alpha(struct quad_stage *qs, /* If fixed-point dest color buffer, need to clamp the incoming * fragment colors now. */ - if (bqs->clamp[0]) { + if (bqs->clamp[0] || qs->softpipe->rasterizer->clamp_fragment_color) { clamp_colors(quadColor); } @@ -1055,7 +1055,7 @@ blend_single_add_one_one(struct quad_stage *qs, /* If fixed-point dest color buffer, need to clamp the incoming * fragment colors now. */ - if (bqs->clamp[0]) { + if (bqs->clamp[0] || qs->softpipe->rasterizer->clamp_fragment_color) { clamp_colors(quadColor); } @@ -,6 +,9 @@ single_output_color(struct quad_stage *qs, const int itx = (quad->input.x0 & (TILE_SIZE-1)); const int ity = (quad->input.y0 & (TILE_SIZE-1)); + if (qs->softpipe->rasterizer->clamp_fragment_color) + clamp_colors(quadColor); + rebase_colors(bqs->base_format[0], quadColor); for (j = 0; j < QUAD_SIZE; j++) { diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c index a9d70f9..37aa585 100644 --- a/src/gallium/drivers/softpipe/sp_screen.c +++ b/src/gallium/drivers/softpipe/sp_screen.c @@ -128,6 +128,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param) return 7; case PIPE_CAP_CONDITIONAL_RENDER: return 1; + case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL: + return 1; default: return 0; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): softpipe: fix texel fetch swizzles
Module: Mesa Branch: master Commit: e809b7a6787e40f974883104606550fb3d53ba47 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e809b7a6787e40f974883104606550fb3d53ba47 Author: Dave Airlie Date: Fri Jan 6 16:28:32 2012 + softpipe: fix texel fetch swizzles This fixes a number of texelFetch swizzle tests, and consoldiates the swizzle handling in a new function. Signed-off-by: Dave Airlie --- src/gallium/drivers/softpipe/sp_tex_sample.c | 69 -- 1 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c index 8123d7b..f552b5e 100644 --- a/src/gallium/drivers/softpipe/sp_tex_sample.c +++ b/src/gallium/drivers/softpipe/sp_tex_sample.c @@ -2286,87 +2286,94 @@ sample_cube(struct tgsi_sampler *tgsi_sampler, samp->compare(tgsi_sampler, , , NULL, c0, control, rgba); } - -static void -sample_swizzle(struct tgsi_sampler *tgsi_sampler, - const float s[QUAD_SIZE], - const float t[QUAD_SIZE], - const float p[QUAD_SIZE], - const float c0[QUAD_SIZE], - enum tgsi_sampler_control control, - float rgba[NUM_CHANNELS][QUAD_SIZE]) +static void do_swizzling(const struct sp_sampler_variant *samp, + float in[NUM_CHANNELS][QUAD_SIZE], + float out[NUM_CHANNELS][QUAD_SIZE]) { - struct sp_sampler_variant *samp = sp_sampler_variant(tgsi_sampler); - float rgba_temp[NUM_CHANNELS][QUAD_SIZE]; + int j; const unsigned swizzle_r = samp->key.bits.swizzle_r; const unsigned swizzle_g = samp->key.bits.swizzle_g; const unsigned swizzle_b = samp->key.bits.swizzle_b; const unsigned swizzle_a = samp->key.bits.swizzle_a; - unsigned j; - - samp->sample_target(tgsi_sampler, s, t, p, c0, control, rgba_temp); switch (swizzle_r) { case PIPE_SWIZZLE_ZERO: for (j = 0; j < 4; j++) - rgba[0][j] = 0.0f; + out[0][j] = 0.0f; break; case PIPE_SWIZZLE_ONE: for (j = 0; j < 4; j++) - rgba[0][j] = 1.0f; + out[0][j] = 1.0f; break; default: assert(swizzle_r < 4); for (j = 0; j < 4; j++) - rgba[0][j] = rgba_temp[swizzle_r][j]; + out[0][j] = in[swizzle_r][j]; } switch (swizzle_g) { case PIPE_SWIZZLE_ZERO: for (j = 0; j < 4; j++) - rgba[1][j] = 0.0f; + out[1][j] = 0.0f; break; case PIPE_SWIZZLE_ONE: for (j = 0; j < 4; j++) - rgba[1][j] = 1.0f; + out[1][j] = 1.0f; break; default: assert(swizzle_g < 4); for (j = 0; j < 4; j++) - rgba[1][j] = rgba_temp[swizzle_g][j]; + out[1][j] = in[swizzle_g][j]; } switch (swizzle_b) { case PIPE_SWIZZLE_ZERO: for (j = 0; j < 4; j++) - rgba[2][j] = 0.0f; + out[2][j] = 0.0f; break; case PIPE_SWIZZLE_ONE: for (j = 0; j < 4; j++) - rgba[2][j] = 1.0f; + out[2][j] = 1.0f; break; default: assert(swizzle_b < 4); for (j = 0; j < 4; j++) - rgba[2][j] = rgba_temp[swizzle_b][j]; + out[2][j] = in[swizzle_b][j]; } switch (swizzle_a) { case PIPE_SWIZZLE_ZERO: for (j = 0; j < 4; j++) - rgba[3][j] = 0.0f; + out[3][j] = 0.0f; break; case PIPE_SWIZZLE_ONE: for (j = 0; j < 4; j++) - rgba[3][j] = 1.0f; + out[3][j] = 1.0f; break; default: assert(swizzle_a < 4); for (j = 0; j < 4; j++) - rgba[3][j] = rgba_temp[swizzle_a][j]; + out[3][j] = in[swizzle_a][j]; } } +static void +sample_swizzle(struct tgsi_sampler *tgsi_sampler, + const float s[QUAD_SIZE], + const float t[QUAD_SIZE], + const float p[QUAD_SIZE], + const float c0[QUAD_SIZE], + enum tgsi_sampler_control control, + float rgba[NUM_CHANNELS][QUAD_SIZE]) +{ + struct sp_sampler_variant *samp = sp_sampler_variant(tgsi_sampler); + float rgba_temp[NUM_CHANNELS][QUAD_SIZE]; + + samp->sample_target(tgsi_sampler, s, t, p, c0, control, rgba_temp); + + do_swizzling(samp, rgba_temp, rgba); +} + static wrap_nearest_func get_nearest_unorm_wrap(unsigned mode) @@ -2638,6 +2645,10 @@ sample_get_texels(struct tgsi_sampler *tgsi_sampler, const struct pipe_resource *texture = samp->view->texture; int j, c; const float *tx; + bool need_swizzle = (samp->key.bits.swizzle_r != PIPE_SWIZZLE_RED || +samp->key.bits.swizzle_g != PIPE_SWIZZLE_GREEN || +samp->key.bits.swizzle_b != PIPE_SWIZZLE_BLUE || +samp->key.bits.swizzle_a != PIPE_SWIZZLE_ALPHA); addr.value = 0; /* TODO write a better test for LOD */ @@ -2696,6 +2707,12 @@ sample_get_texels(struct tgsi_sampler *tgsi_sampler, asse
Mesa (master): i915g: Fix bugs in the shader optimizer.
Module: Mesa Branch: master Commit: 3235435e801122fb6d28c0bcc232ddaeb6b9c568 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3235435e801122fb6d28c0bcc232ddaeb6b9c568 Author: Stéphane Marchesin Date: Wed Jan 11 02:24:34 2012 -0800 i915g: Fix bugs in the shader optimizer. --- src/gallium/drivers/i915/i915_fpc_optimize.c | 126 -- 1 files changed, 80 insertions(+), 46 deletions(-) diff --git a/src/gallium/drivers/i915/i915_fpc_optimize.c b/src/gallium/drivers/i915/i915_fpc_optimize.c index d9b4c46..b09f18b 100644 --- a/src/gallium/drivers/i915/i915_fpc_optimize.c +++ b/src/gallium/drivers/i915/i915_fpc_optimize.c @@ -66,6 +66,8 @@ static boolean has_destination(unsigned opcode) { return (opcode != TGSI_OPCODE_NOP && opcode != TGSI_OPCODE_KIL && + opcode != TGSI_OPCODE_KILP && + opcode != TGSI_OPCODE_END && opcode != TGSI_OPCODE_RET); } @@ -130,6 +132,50 @@ static void set_neutral_element_swizzle(struct i915_full_src_register* r, r->Register.SwizzleW = TGSI_SWIZZLE_W; } +static void copy_src_reg(struct i915_src_register* o, const struct tgsi_src_register* i) +{ + o->File = i->File; + o->Indirect = i->Indirect; + o->Dimension = i->Dimension; + o->Index = i->Index; + o->SwizzleX = i->SwizzleX; + o->SwizzleY = i->SwizzleY; + o->SwizzleZ = i->SwizzleZ; + o->SwizzleW = i->SwizzleW; + o->Absolute = i->Absolute; + o->Negate= i->Negate; +} + +static void copy_dst_reg(struct i915_dst_register* o, const struct tgsi_dst_register* i) +{ + o->File = i->File; + o->WriteMask = i->WriteMask; + o->Indirect = i->Indirect; + o->Dimension = i->Dimension; + o->Index = i->Index; +} + +static void copy_instruction(struct i915_full_instruction* o, const struct tgsi_full_instruction* i) +{ + memcpy(&o->Instruction, &i->Instruction, sizeof(o->Instruction)); + memcpy(&o->Texture, &i->Texture, sizeof(o->Texture)); + + copy_dst_reg(&o->Dst[0].Register, &i->Dst[0].Register); + + copy_src_reg(&o->Src[0].Register, &i->Src[0].Register); + copy_src_reg(&o->Src[1].Register, &i->Src[1].Register); + copy_src_reg(&o->Src[2].Register, &i->Src[2].Register); +} + +static void copy_token(union i915_full_token* o, union tgsi_full_token* i) +{ + if (i->Token.Type != TGSI_TOKEN_TYPE_INSTRUCTION) + memcpy(o, i, sizeof(*o)); + else + copy_instruction(&o->FullInstruction, &i->FullInstruction); + +} + /* * Optimize away things like: *MUL OUT[0].xyz, TEMP[1], TEMP[2] @@ -147,6 +193,7 @@ static void i915_fpc_optimize_mov_after_alu(union i915_full_token* current, unio next->FullInstruction.Instruction.Opcode == TGSI_OPCODE_MOV && same_dst_reg(&next->FullInstruction.Dst[0], ¤t->FullInstruction.Dst[0]) && same_src_reg(&next->FullInstruction.Src[0], ¤t->FullInstruction.Src[1]) && +!same_src_dst_reg(&next->FullInstruction.Src[0], ¤t->FullInstruction.Dst[0]) && is_unswizzled(¤t->FullInstruction.Src[0], current->FullInstruction.Dst[0].Register.WriteMask) && is_unswizzled(¤t->FullInstruction.Src[1], current->FullInstruction.Dst[0].Register.WriteMask) && is_unswizzled(&next->FullInstruction.Src[0], next->FullInstruction.Dst[0].Register.WriteMask) ) @@ -170,6 +217,7 @@ static void i915_fpc_optimize_mov_after_alu(union i915_full_token* current, unio next->FullInstruction.Instruction.Opcode == TGSI_OPCODE_MOV && same_dst_reg(&next->FullInstruction.Dst[0], ¤t->FullInstruction.Dst[0]) && same_src_reg(&next->FullInstruction.Src[0], ¤t->FullInstruction.Src[0]) && +!same_src_dst_reg(&next->FullInstruction.Src[0], ¤t->FullInstruction.Dst[0]) && is_unswizzled(¤t->FullInstruction.Src[0], current->FullInstruction.Dst[0].Register.WriteMask) && is_unswizzled(¤t->FullInstruction.Src[1], current->FullInstruction.Dst[0].Register.WriteMask) && is_unswizzled(&next->FullInstruction.Src[0], next->FullInstruction.Dst[0].Register.WriteMask) ) @@ -189,12 +237,36 @@ static void i915_fpc_optimize_mov_after_alu(union i915_full_token* current, unio /* * Optimize away things like: + *MOV TEMP[0].xyz TEMP[0].xyzx + * into: + *NOP + */ +static boolean i915_fpc_useless_mov(union tgsi_full_token* tgsi_current) +{ + union i915_full_token current; + copy_token(¤t , tgsi_current); + if ( current.Token.Type == TGSI_TOKEN_TYPE_INSTRUCTION && +current.FullInstruction.Instruction.Opcode == TGSI_OPCODE_MOV && +has_destination(current.FullInstruction.Instruction.Opcode) && +current.FullInstruction.Instruction.Saturate == TGSI_SAT_NONE && +current.FullInstruction.Src[0].Register.Absolute == 0 && +current.FullInstruction.Src[0].Register.Negate == 0 && +is_unswizzled(¤t.FullInstruction.Src[0], current.FullInstruction.Dst[0].Register.WriteMask) && +same_src_dst_reg(¤t.FullInstruction.Src[0], ¤t.FullI
Mesa (master): softpipe: fix llvm build
Module: Mesa Branch: master Commit: 5840ec2d41d09895bec7074a90521978fb933695 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5840ec2d41d09895bec7074a90521978fb933695 Author: Dave Airlie Date: Wed Jan 11 10:16:56 2012 + softpipe: fix llvm build Thanks to Wubbbi on #dri-devel for pointing it out. Signed-off-by: Dave Airlie --- src/gallium/drivers/softpipe/sp_context.c |2 +- src/gallium/drivers/softpipe/sp_screen.c |2 +- src/gallium/drivers/softpipe/sp_screen.h |2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c index abe0507..1fb0a79 100644 --- a/src/gallium/drivers/softpipe/sp_context.c +++ b/src/gallium/drivers/softpipe/sp_context.c @@ -305,7 +305,7 @@ softpipe_create_context( struct pipe_screen *screen, /* * Create drawing context and plug our rendering stage into it. */ - if (sp_screen->using_llvm) + if (sp_screen->use_llvm) softpipe->draw = draw_create(&softpipe->pipe); else softpipe->draw = draw_create_no_llvm(&softpipe->pipe); diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c index 35521b6..a9d70f9 100644 --- a/src/gallium/drivers/softpipe/sp_screen.c +++ b/src/gallium/drivers/softpipe/sp_screen.c @@ -334,7 +334,7 @@ softpipe_create_screen(struct sw_winsys *winsys) screen->base.context_create = softpipe_create_context; screen->base.flush_frontbuffer = softpipe_flush_frontbuffer; - screen->using_llvm = debug_get_option_use_llvm(); + screen->use_llvm = debug_get_option_use_llvm(); util_format_s3tc_init(); diff --git a/src/gallium/drivers/softpipe/sp_screen.h b/src/gallium/drivers/softpipe/sp_screen.h index 2cac816..007feec 100644 --- a/src/gallium/drivers/softpipe/sp_screen.h +++ b/src/gallium/drivers/softpipe/sp_screen.h @@ -46,7 +46,7 @@ struct softpipe_screen { * this. */ unsigned timestamp; - boolean using_llvm; + boolean use_llvm; }; static INLINE struct softpipe_screen * ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): draw: clipdistance support (v2)
Module: Mesa Branch: master Commit: 1865f341d8f45b389061fc08d2da90b7aa8a6099 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1865f341d8f45b389061fc08d2da90b7aa8a6099 Author: Dave Airlie Date: Fri Jan 6 12:23:00 2012 + draw: clipdistance support (v2) Add support for using the clipdistance instead of clip plane. Passes all piglit clipdistance tests. v2: fixup some comments from Brian in review. Signed-off-by: Dave Airlie --- src/gallium/auxiliary/draw/draw_cliptest_tmp.h | 30 +++-- src/gallium/auxiliary/draw/draw_context.c |6 +++ src/gallium/auxiliary/draw/draw_pipe_clip.c| 42 ++- src/gallium/auxiliary/draw/draw_private.h |5 ++- src/gallium/auxiliary/draw/draw_pt_post_vs.c |4 +- src/gallium/auxiliary/draw/draw_vs.c |7 src/gallium/auxiliary/draw/draw_vs.h |2 +- 7 files changed, 79 insertions(+), 17 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_cliptest_tmp.h b/src/gallium/auxiliary/draw/draw_cliptest_tmp.h index 7dba49b..bff266b 100644 --- a/src/gallium/auxiliary/draw/draw_cliptest_tmp.h +++ b/src/gallium/auxiliary/draw/draw_cliptest_tmp.h @@ -36,12 +36,19 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs, /* const */ float (*plane)[4] = pvs->draw->plane; const unsigned pos = draw_current_shader_position_output(pvs->draw); const unsigned cv = draw_current_shader_clipvertex_output(pvs->draw); + unsigned cd[2]; const unsigned ef = pvs->draw->vs.edgeflag_output; const unsigned ucp_enable = pvs->draw->rasterizer->clip_plane_enable; const unsigned flags = (FLAGS); unsigned need_pipeline = 0; unsigned j; unsigned i; + bool have_cd = false; + cd[0] = draw_current_shader_clipdistance_output(pvs->draw, 0); + cd[1] = draw_current_shader_clipdistance_output(pvs->draw, 1); + + if (cd[0] != pos || cd[1] != pos) + have_cd = true; for (j = 0; j < info->count; j++) { float *position = out->data[pos]; @@ -89,14 +96,31 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs, if (flags & DO_CLIP_USER) { unsigned ucp_mask = ucp_enable; - +int num_written_clipdistance = pvs->draw->vs.vertex_shader->info.num_written_clipdistance; while (ucp_mask) { unsigned plane_idx = ffs(ucp_mask)-1; ucp_mask &= ~(1 << plane_idx); plane_idx += 6; - if (dot4(clipvertex, plane[plane_idx]) < 0) { - mask |= 1 << plane_idx; + /* +* for user clipping check if we have a clip distance output +* and the shader has written to it, otherwise use clipvertex +* to decide when the plane is clipping. +*/ + if (have_cd && num_written_clipdistance) { + float clipdist; + i = plane_idx - 6; + out->have_clipdist = 1; + /* first four clip distance in first vector etc. */ + if (i < 4) + clipdist = out->data[cd[0]][i]; + else + clipdist = out->data[cd[1]][i-4]; + if (clipdist < 0) + mask |= 1 << plane_idx; + } else { + if (dot4(clipvertex, plane[plane_idx]) < 0) + mask |= 1 << plane_idx; } } } diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c index 6d7075e..7e554dc 100644 --- a/src/gallium/auxiliary/draw/draw_context.c +++ b/src/gallium/auxiliary/draw/draw_context.c @@ -701,6 +701,12 @@ draw_current_shader_clipvertex_output(const struct draw_context *draw) return draw->vs.clipvertex_output; } +uint +draw_current_shader_clipdistance_output(const struct draw_context *draw, int index) +{ + return draw->vs.clipdistance_output[index]; +} + /** * Return a pointer/handle for a driver/CSO rasterizer object which * disabled culling, stippling, unfilled tris, etc. diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c index fbc8f67..f701972 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_clip.c +++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c @@ -119,13 +119,17 @@ static void interp( const struct clip_stage *clip, const unsigned nr_attrs = draw_current_shader_outputs(clip->stage.draw); const unsigned pos_attr = draw_current_shader_position_output(clip->stage.draw); const unsigned clip_attr = draw_current_shader_clipvertex_output(clip->stage.draw); + unsigned clip_dist[2]; unsigned j; + clip_dist[0] = draw_current_shader_clipdistance_output(clip->stage.draw, 0); + clip_dist[1] = draw_current_shader_clipdistance_output(clip->stage.draw, 1); + /* Vertex header. */ dst->clipmask = 0; dst->edgeflag = 0;/* will get o
Mesa (master): tgsi_scan: add support to count number of output clip distances
Module: Mesa Branch: master Commit: f7e3e46f72fffe4b83cd3f922173ff28e9ab9c7c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f7e3e46f72fffe4b83cd3f922173ff28e9ab9c7c Author: Dave Airlie Date: Fri Jan 6 12:21:54 2012 + tgsi_scan: add support to count number of output clip distances Just add support to the scanner to count the number of clip distances. Signed-off-by: Dave Airlie --- src/gallium/auxiliary/tgsi/tgsi_scan.c |4 src/gallium/auxiliary/tgsi/tgsi_scan.h |1 + 2 files changed, 5 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c index 97d74e4..e4e9c03 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c @@ -191,6 +191,10 @@ tgsi_scan_shader(const struct tgsi_token *tokens, info->output_semantic_index[reg] = (ubyte)fulldecl->Semantic.Index; info->num_outputs++; + if (procType == TGSI_PROCESSOR_VERTEX && + fulldecl->Semantic.Name == TGSI_SEMANTIC_CLIPDIST) { + info->num_written_clipdistance += util_bitcount(fulldecl->Declaration.UsageMask); + } /* extra info for special outputs */ if (procType == TGSI_PROCESSOR_FRAGMENT && fulldecl->Semantic.Name == TGSI_SEMANTIC_POSITION) diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h index 482c106..235e6a3 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h @@ -75,6 +75,7 @@ struct tgsi_shader_info boolean pixel_center_integer; boolean color0_writes_all_cbufs; + unsigned num_written_clipdistance; /** * Bitmask indicating which register files are accessed with * indirect addressing. The bits are (1 << TGSI_FILE_x), etc. ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): draw/softpipe: add clip vertex support. (v2)
Module: Mesa Branch: master Commit: 40c5987ed84f9f0b8bb1f707bb13c1aafc39330a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=40c5987ed84f9f0b8bb1f707bb13c1aafc39330a Author: Dave Airlie Date: Wed Jan 4 11:52:30 2012 + draw/softpipe: add clip vertex support. (v2) softpipe always clipped using the position vector, however for unclipped vertices it stored the position in window coordinates, however when position and clipping are separated, we need to store the clip-space position and the clip-space vertex clip, so we can interpolate both separately. This means we have to take the clip space position and store it to use later. This allows softpipe to pass all the clip-vertex piglit tests. v2: fix llvm draw regression, the structure being passed into llvm needed updating, remove some hardcoded ints that should have been enums while there. Signed-off-by: Dave Airlie --- src/gallium/auxiliary/draw/draw_cliptest_tmp.h | 17 - src/gallium/auxiliary/draw/draw_context.c | 10 ++ src/gallium/auxiliary/draw/draw_llvm.c | 12 src/gallium/auxiliary/draw/draw_llvm.h | 10 +++--- src/gallium/auxiliary/draw/draw_pipe_clip.c|9 ++--- src/gallium/auxiliary/draw/draw_private.h |4 +++- src/gallium/auxiliary/draw/draw_pt_fetch.c |4 ++-- src/gallium/auxiliary/draw/draw_vs.c |9 + src/gallium/auxiliary/draw/draw_vs.h |1 + 9 files changed, 58 insertions(+), 18 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_cliptest_tmp.h b/src/gallium/auxiliary/draw/draw_cliptest_tmp.h index 9e6827c..7dba49b 100644 --- a/src/gallium/auxiliary/draw/draw_cliptest_tmp.h +++ b/src/gallium/auxiliary/draw/draw_cliptest_tmp.h @@ -35,11 +35,13 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs, const float *trans = pvs->draw->viewport.translate; /* const */ float (*plane)[4] = pvs->draw->plane; const unsigned pos = draw_current_shader_position_output(pvs->draw); + const unsigned cv = draw_current_shader_clipvertex_output(pvs->draw); const unsigned ef = pvs->draw->vs.edgeflag_output; const unsigned ucp_enable = pvs->draw->rasterizer->clip_plane_enable; const unsigned flags = (FLAGS); unsigned need_pipeline = 0; unsigned j; + unsigned i; for (j = 0; j < info->count; j++) { float *position = out->data[pos]; @@ -49,10 +51,15 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs, if (flags & (DO_CLIP_XY | DO_CLIP_XY_GUARD_BAND | DO_CLIP_FULL_Z | DO_CLIP_HALF_Z | DO_CLIP_USER)) { - out->clip[0] = position[0]; - out->clip[1] = position[1]; - out->clip[2] = position[2]; - out->clip[3] = position[3]; + float *clipvertex = position; + + if ((flags & DO_CLIP_USER) && cv != pos) +clipvertex = out->data[cv]; + + for (i = 0; i < 4; i++) { +out->clip[i] = clipvertex[i]; +out->pre_clip_pos[i] = position[i]; + } /* Do the hardwired planes first: */ @@ -88,7 +95,7 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs, ucp_mask &= ~(1 << plane_idx); plane_idx += 6; - if (dot4(position, plane[plane_idx]) < 0) { + if (dot4(clipvertex, plane[plane_idx]) < 0) { mask |= 1 << plane_idx; } } diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c index 10a20f7..6d7075e 100644 --- a/src/gallium/auxiliary/draw/draw_context.c +++ b/src/gallium/auxiliary/draw/draw_context.c @@ -692,6 +692,16 @@ draw_current_shader_position_output(const struct draw_context *draw) /** + * Return the index of the shader output which will contain the + * vertex position. + */ +uint +draw_current_shader_clipvertex_output(const struct draw_context *draw) +{ + return draw->vs.clipvertex_output; +} + +/** * Return a pointer/handle for a driver/CSO rasterizer object which * disabled culling, stippling, unfilled tris, etc. * This is used by some pipeline stages (such as wide_point, aa_line diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index cf97e82..50c7e25 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -268,15 +268,16 @@ static LLVMTypeRef create_jit_vertex_header(struct gallivm_state *gallivm, int data_elems) { LLVMTargetDataRef target = gallivm->target; - LLVMTypeRef elem_types[3]; + LLVMTypeRef elem_types[4]; LLVMTypeRef vertex_header; char struct_name[24]; util_snprintf(struct_name, 23, "vertex_header%d", data_elems); - elem_types[0] = LLVMIntTypeInContext(gallivm->context, 32); - elem_types[1] = LLVMArrayType(LLVMFloatTypeInContext(gallivm->context), 4); - elem_types[2] = LLVMArrayType(elem_types[1], data_elems); +
Mesa (master): tgsi/softpipe: add VertexID support.
Module: Mesa Branch: master Commit: 34a78b7ef6b0edf217acf221eab4b63542be5552 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=34a78b7ef6b0edf217acf221eab4b63542be5552 Author: Dave Airlie Date: Thu Jan 5 16:59:24 2012 + tgsi/softpipe: add VertexID support. This required changing the system value semantics, so we stored a system value per vertex, instance id is the only other system value we currently support, so I span it across the channels. This passes the 3 vertexid-* piglit tests + lots of instanceid tests. Signed-off-by: Dave Airlie --- src/gallium/auxiliary/draw/draw_vs_exec.c |9 - src/gallium/auxiliary/tgsi/tgsi_exec.c| 14 ++ src/gallium/auxiliary/tgsi/tgsi_exec.h|2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_vs_exec.c b/src/gallium/auxiliary/draw/draw_vs_exec.c index 3f89881..bfe7aea 100644 --- a/src/gallium/auxiliary/draw/draw_vs_exec.c +++ b/src/gallium/auxiliary/draw/draw_vs_exec.c @@ -103,7 +103,8 @@ vs_exec_run_linear( struct draw_vertex_shader *shader, if (shader->info.uses_instanceid) { unsigned i = machine->SysSemanticToIndex[TGSI_SEMANTIC_INSTANCEID]; assert(i < Elements(machine->SystemValue)); - machine->SystemValue[i][0] = shader->draw->instance_id; + for (j = 0; j < QUAD_SIZE; j++) + machine->SystemValue[i].i[j] = shader->draw->instance_id; } for (i = 0; i < count; i += MAX_TGSI_VERTICES) { @@ -123,6 +124,12 @@ vs_exec_run_linear( struct draw_vertex_shader *shader, } #endif + if (shader->info.uses_vertexid) { +unsigned vid = machine->SysSemanticToIndex[TGSI_SEMANTIC_VERTEXID]; +assert(vid < Elements(machine->SystemValue)); +machine->SystemValue[vid].i[j] = i + j; + } + for (slot = 0; slot < shader->info.num_inputs; slot++) { #if 0 assert(!util_is_inf_or_nan(input[slot][0])); diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 52d4ff4..3046656 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -1037,6 +1037,7 @@ micro_sub(union tgsi_exec_channel *dst, static void fetch_src_file_channel(const struct tgsi_exec_machine *mach, + const uint chan_index, const uint file, const uint swizzle, const union tgsi_exec_channel *index, @@ -1097,7 +1098,7 @@ fetch_src_file_channel(const struct tgsi_exec_machine *mach, * gl_FragCoord, for example, in a sys value register. */ for (i = 0; i < QUAD_SIZE; i++) { - chan->f[i] = mach->SystemValue[index->i[i]][0]; + chan->u[i] = mach->SystemValue[index->i[i]].u[i]; } break; @@ -1221,6 +1222,7 @@ fetch_source(const struct tgsi_exec_machine *mach, /* get current value of address register[swizzle] */ swizzle = tgsi_util_get_src_register_swizzle( ®->Indirect, CHAN_X ); fetch_src_file_channel(mach, + chan_index, reg->Indirect.File, swizzle, &index2, @@ -1280,6 +1282,7 @@ fetch_source(const struct tgsi_exec_machine *mach, swizzle = tgsi_util_get_src_register_swizzle( ®->DimIndirect, CHAN_X ); fetch_src_file_channel(mach, +chan_index, reg->DimIndirect.File, swizzle, &index2, @@ -1314,6 +1317,7 @@ fetch_source(const struct tgsi_exec_machine *mach, swizzle = tgsi_util_get_full_src_register_swizzle( reg, chan_index ); fetch_src_file_channel(mach, + chan_index, reg->Register.File, swizzle, &index, @@ -1384,6 +1388,7 @@ store_dest(struct tgsi_exec_machine *mach, /* fetch values from the address/indirection register */ fetch_src_file_channel(mach, + chan_index, reg->Indirect.File, swizzle, &index, @@ -1433,6 +1438,7 @@ store_dest(struct tgsi_exec_machine *mach, swizzle = tgsi_util_get_src_register_swizzle( ®->DimIndirect, CHAN_X ); fetch_src_file_channel(mach, +chan_index, reg->DimIndirect.File, swizzle, &index2, @@ -1995,11 +2001,11 @@ exec_txf(struct tgsi_exec_machine *mach, if (inst->Texture.NumOffsets == 1) { union tgsi_exec_channel index; index.i[0] = index.i[1] = index.i[2] = index.i[3] = inst->TexOffsets[0].Index; - fetch_src_file_channel(mach, inst->TexOffsets[