Mesa (master): i965: Refactor Sandybridge implied move handling.
Module: Mesa Branch: master Commit: 9a21bc640188e4078075b9f8e6701853a4f0bbe4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a21bc640188e4078075b9f8e6701853a4f0bbe4 Author: Kenneth Graunke kenn...@whitecape.org Date: Wed Mar 16 14:09:17 2011 -0700 i965: Refactor Sandybridge implied move handling. This was open-coded in three different places, and more are necessary. Extract this into a function so it can be reused. Unfortunately, not all variations were the same: in particular, one set compression control and checked that the source register was not ARF_NULL. This seemed like a good idea, so all cases now do so. --- src/mesa/drivers/dri/i965/brw_eu_emit.c | 68 ++ 1 files changed, 32 insertions(+), 36 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c index 21ce92c..b663594 100644 --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c @@ -52,6 +52,35 @@ static void guess_execution_size(struct brw_compile *p, } +/** + * Prior to Sandybridge, the SEND instruction accepted non-MRF source + * registers, implicitly moving the operand to a message register. + * + * On Sandybridge, this is no longer the case. This function performs the + * explicit move; it should be called before emitting a SEND instruction. + */ +static void +gen6_resolve_implied_move(struct brw_compile *p, + struct brw_reg *src, + GLuint msg_reg_nr) +{ + struct intel_context *intel = p-brw-intel; + if (intel-gen != 6) + return; + + if (src-file == BRW_ARCHITECTURE_REGISTER_FILE src-nr == BRW_ARF_NULL) + return; + + brw_push_insn_state(p); + brw_set_mask_control(p, BRW_MASK_DISABLE); + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD), + retype(*src, BRW_REGISTER_TYPE_UD)); + brw_pop_insn_state(p); + *src = brw_message_reg(msg_reg_nr); +} + + static void brw_set_dest(struct brw_compile *p, struct brw_instruction *insn, struct brw_reg dest) @@ -1966,20 +1995,7 @@ void brw_SAMPLE(struct brw_compile *p, { struct brw_instruction *insn; - /* Sandybridge doesn't have the implied move for SENDs, - * and the first message register index comes from src0. - */ - if (intel-gen = 6) { -if (src0.file != BRW_ARCHITECTURE_REGISTER_FILE || -src0.nr != BRW_ARF_NULL) { - brw_push_insn_state(p); - brw_set_mask_control( p, BRW_MASK_DISABLE ); - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - brw_MOV(p, retype(brw_message_reg(msg_reg_nr), src0.type), src0); - brw_pop_insn_state(p); -} -src0 = brw_message_reg(msg_reg_nr); - } + gen6_resolve_implied_move(p, src0, msg_reg_nr); insn = next_insn(p, BRW_OPCODE_SEND); insn-header.predicate_control = 0; /* XXX */ @@ -2034,17 +2050,7 @@ void brw_urb_WRITE(struct brw_compile *p, struct intel_context *intel = p-brw-intel; struct brw_instruction *insn; - /* Sandybridge doesn't have the implied move for SENDs, -* and the first message register index comes from src0. -*/ - if (intel-gen = 6) { - brw_push_insn_state(p); - brw_set_mask_control( p, BRW_MASK_DISABLE ); - brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD), - retype(src0, BRW_REGISTER_TYPE_UD)); - brw_pop_insn_state(p); - src0 = brw_message_reg(msg_reg_nr); - } + gen6_resolve_implied_move(p, src0, msg_reg_nr); insn = next_insn(p, BRW_OPCODE_SEND); @@ -2154,17 +2160,7 @@ void brw_ff_sync(struct brw_compile *p, struct intel_context *intel = p-brw-intel; struct brw_instruction *insn; - /* Sandybridge doesn't have the implied move for SENDs, -* and the first message register index comes from src0. -*/ - if (intel-gen = 6) { - brw_push_insn_state(p); - brw_set_mask_control( p, BRW_MASK_DISABLE ); - brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD), - retype(src0, BRW_REGISTER_TYPE_UD)); - brw_pop_insn_state(p); - src0 = brw_message_reg(msg_reg_nr); - } + gen6_resolve_implied_move(p, src0, msg_reg_nr); insn = next_insn(p, BRW_OPCODE_SEND); brw_set_dest(p, insn, dest); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: Resolve implied moves in brw_dp_READ_4_vs_relative.
Module: Mesa Branch: master Commit: 9d60a7ce08a67eb8b79c60f829d090ba4a37ed7e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d60a7ce08a67eb8b79c60f829d090ba4a37ed7e Author: Kenneth Graunke kenn...@whitecape.org Date: Tue Mar 29 05:49:40 2011 -0700 i965: Resolve implied moves in brw_dp_READ_4_vs_relative. Fixes piglit test glsl-vs-arrays-3 on Sandybridge, as well as garbage rendering in 3DMarkMobileES 2.0's Taiji demo and GLBenchmark 2.0's Egypt and PRO demos. NOTE: This a candidate for stable release branches. It depends on commit 9a21bc640188e4078075b9f8e6701853a4f0bbe4. --- src/mesa/drivers/dri/i965/brw_eu_emit.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c index b663594..32ee37f 100644 --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c @@ -1800,6 +1800,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p, GLuint bind_table_index) { struct intel_context *intel = p-brw-intel; + struct brw_reg src = brw_vec8_grf(0, 0); int msg_type; /* Setup MRF[1] with offset into const buffer */ @@ -1816,6 +1817,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p, addr_reg, brw_imm_d(offset)); brw_pop_insn_state(p); + gen6_resolve_implied_move(p, src, 0); struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND); insn-header.predicate_control = BRW_PREDICATE_NONE; @@ -1824,7 +1826,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p, insn-header.mask_control = BRW_MASK_DISABLE; brw_set_dest(p, insn, dest); - brw_set_src0(insn, brw_vec8_grf(0, 0)); + brw_set_src0(insn, src); if (intel-gen == 6) msg_type = GEN6_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: implement clamping controls (ARB_color_buffer_float )
Module: Mesa Branch: master Commit: 47e3896dfd89a26abbe4ca2469c2480f3982b204 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=47e3896dfd89a26abbe4ca2469c2480f3982b204 Author: Luca Barbieri l...@luca-barbieri.com Date: Wed Feb 16 00:14:49 2011 +0100 gallium: implement clamping controls (ARB_color_buffer_float) BTW this changes the gallium interface. Some rather cosmetic changes by Marek. Squashed commit of the following: commit 513b37d484f0318311e84bb86ed4c93cdff71f13 Author: Luca Barbieri l...@luca-barbieri.com Date: Thu Aug 26 18:17:54 2010 +0200 mesa/st: respect fragment clamping in st_DrawPixels commit 546a31e42cad459d7a7a10ebf77fc5ffcf89e9b8 Author: Luca Barbieri l...@luca-barbieri.com Date: Thu Aug 26 18:17:28 2010 +0200 mesa/st: support fragment and vertex color clamping commit c406514a1fbee6891da4cf9ac3eebe4e4407ec13 Author: Luca Barbieri l...@luca-barbieri.com Date: Tue Aug 24 21:56:37 2010 +0200 mesa/st: expose ARB_color_buffer_float if unclamping is supported commit d0c5ea11b6f75f3da2f4ca989115f150ebc7cf8d Author: Luca Barbieri l...@luca-barbieri.com Date: Thu Aug 26 17:53:41 2010 +0200 mesa/st: use unclamped colors This assumes that Gallium is to be interpreted as given drivers the responsibility to clamp these colors if necessary. commit aef5c3c6be6edd076e955e37c80905bc447f8a82 Author: Luca Barbieri l...@luca-barbieri.com Date: Thu Aug 26 18:12:34 2010 +0200 mesa, mesa/st: handle read color clamping properly We set IMAGE_CLAMP_BIT in the caller based on _ClampReadColor, where the operation mandates it. (see the removed XXX comment. -Marek) TODO: did I get the set of operations mandating it right? commit 76bdfcfe3ff4145a1818e6cb6e227b730a5f12d8 Author: Luca Barbieri l...@luca-barbieri.com Date: Thu Aug 26 18:18:25 2010 +0200 gallium: add color clamping to the interface --- src/gallium/docs/source/cso/rasterizer.rst | 24 src/gallium/include/pipe/p_defines.h|2 ++ src/gallium/include/pipe/p_state.h |2 ++ src/mesa/state_tracker/st_atom_blend.c |2 +- src/mesa/state_tracker/st_atom_depth.c |2 +- src/mesa/state_tracker/st_atom_rasterizer.c |8 +++- src/mesa/state_tracker/st_cb_clear.c|4 ++-- src/mesa/state_tracker/st_cb_drawpixels.c |1 + src/mesa/state_tracker/st_cb_readpixels.c |7 +-- src/mesa/state_tracker/st_extensions.c |7 +++ 10 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/gallium/docs/source/cso/rasterizer.rst b/src/gallium/docs/source/cso/rasterizer.rst index d547055..e10c16e 100644 --- a/src/gallium/docs/source/cso/rasterizer.rst +++ b/src/gallium/docs/source/cso/rasterizer.rst @@ -7,6 +7,30 @@ The rasterizer state controls the rendering of points, lines and triangles. Attributes include polygon culling state, line width, line stipple, multisample state, scissoring and flat/smooth shading. +Linkage + +clamp_vertex_color +^^ + +If set, TGSI_SEMANTIC_COLOR registers are clamped to the [0, 1] range after +the execution of the vertex shader, before being passed to the geometry +shader or fragment shader. + +OpenGL: glClampColor(GL_CLAMP_VERTEX_COLOR) in GL 3.0 or GL_ARB_color_buffer_float + +D3D11: seems always disabled + +clamp_fragment_color + + +Controls whether TGSI_SEMANTIC_COLOR outputs of the fragment shader +are clamped to [0, 1]. + +OpenGL: glClampColor(GL_CLAMP_FRAGMENT_COLOR) in GL 3.0 or ARB_color_buffer_float + +D3D11: seems always disabled + + Shading --- diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index bac3300..4f6daa8 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -463,6 +463,8 @@ enum pipe_cap { PIPE_CAP_SHADER_STENCIL_EXPORT, PIPE_CAP_TGSI_INSTANCEID, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR, + PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL, + PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL }; /* Shader caps not specific to any single stage */ diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index cf6c5b5..f6ad456 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -81,6 +81,8 @@ struct pipe_rasterizer_state { unsigned flatshade:1; unsigned light_twoside:1; + unsigned clamp_vertex_color:1; + unsigned clamp_fragment_color:1; unsigned front_ccw:1; unsigned cull_face:2; /** PIPE_FACE_x */ unsigned fill_front:2; /** PIPE_POLYGON_MODE_x */ diff --git a/src/mesa/state_tracker/st_atom_blend.c b/src/mesa/state_tracker/st_atom_blend.c index fb1c7a4..d1844e1 100644 --- a/src/mesa/state_tracker/st_atom_blend.c +++ b/src/mesa/state_tracker/st_atom_blend.c @@ -286,7 +286,7 @@ update_blend( struct st_context *st ) { struct pipe_blend_color bc; - COPY_4FV(bc.color,
Mesa (master): mesa: initial EXT_texture_snorm support
Module: Mesa Branch: master Commit: 0be369975fdfa79bcb702d0c13aa0a221055f61b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0be369975fdfa79bcb702d0c13aa0a221055f61b Author: Marek Olšák mar...@gmail.com Date: Fri Mar 18 13:44:51 2011 +0100 mesa: initial EXT_texture_snorm support The component ordering of some formats has been been reversed to match Gallium types. --- src/mesa/main/extensions.c |3 +- src/mesa/main/fbobject.c | 38 - src/mesa/main/formats.c| 100 src/mesa/main/formats.h| 15 +- src/mesa/main/image.c | 28 +++- src/mesa/main/macros.h |3 +- src/mesa/main/mtypes.h |2 +- src/mesa/main/texformat.c | 49 ++--- src/mesa/main/teximage.c | 31 +- src/mesa/main/version.c|1 + 10 files changed, 233 insertions(+), 37 deletions(-) diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 7844b50..285e08d 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -203,6 +203,7 @@ static const struct extension extension_table[] = { { GL_EXT_texture, o(EXT_texture), GL, 1996 }, { GL_EXT_texture_rectangle, o(NV_texture_rectangle), GL, 2004 }, { GL_EXT_texture_shared_exponent, o(EXT_texture_shared_exponent), GL, 2004 }, + { GL_EXT_texture_snorm, o(EXT_texture_snorm), GL, 2009 }, { GL_EXT_texture_sRGB,o(EXT_texture_sRGB), GL, 2004 }, { GL_EXT_texture_sRGB_decode, o(EXT_texture_sRGB_decode), GL, 2006 }, { GL_EXT_texture_swizzle, o(EXT_texture_swizzle), GL, 2008 }, @@ -274,7 +275,7 @@ static const struct extension extension_table[] = { { GL_MESA_pack_invert,o(MESA_pack_invert), GL, 2002 }, { GL_MESA_resize_buffers, o(MESA_resize_buffers), GL, 1999 }, { GL_MESA_texture_array, o(MESA_texture_array), GL, 2007 }, - { GL_MESA_texture_signed_rgba, o(MESA_texture_signed_rgba),GL, 2009 }, + { GL_MESA_texture_signed_rgba,o(EXT_texture_snorm), GL, 2009 }, { GL_MESA_window_pos, o(ARB_window_pos), GL, 2000 }, { GL_MESAX_texture_float, o(ARB_texture_float), GL, 2009 }, { GL_MESA_ycbcr_texture, o(MESA_ycbcr_texture), GL, 2002 }, diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index cc13103..4eab3e1 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -1081,7 +1081,6 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat) case GL_RGB10_A2: case GL_RGBA12: case GL_RGBA16: - case GL_RGBA16_SNORM: case GL_SRGB8_ALPHA8_EXT: return GL_RGBA; case GL_STENCIL_INDEX: @@ -1109,6 +1108,43 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat) case GL_RG8: case GL_RG16: return ctx-Extensions.ARB_texture_rg ? GL_RG : 0; + /* signed normalized texture formats */ + case GL_RED_SNORM: + case GL_R8_SNORM: + case GL_R16_SNORM: + return ctx-Extensions.EXT_texture_snorm ? GL_RED : 0; + case GL_RG_SNORM: + case GL_RG8_SNORM: + case GL_RG16_SNORM: + return ctx-Extensions.EXT_texture_snorm ? GL_RG : 0; + case GL_RGB_SNORM: + case GL_RGB8_SNORM: + case GL_RGB16_SNORM: + return ctx-Extensions.EXT_texture_snorm ? GL_RGB : 0; + case GL_RGBA_SNORM: + case GL_RGBA8_SNORM: + case GL_RGBA16_SNORM: + return ctx-Extensions.EXT_texture_snorm ? GL_RGBA : 0; + case GL_ALPHA_SNORM: + case GL_ALPHA8_SNORM: + case GL_ALPHA16_SNORM: + return ctx-Extensions.EXT_texture_snorm + ctx-Extensions.ARB_framebuffer_object ? GL_ALPHA : 0; + case GL_LUMINANCE_SNORM: + case GL_LUMINANCE8_SNORM: + case GL_LUMINANCE16_SNORM: + return ctx-Extensions.EXT_texture_snorm + ctx-Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0; + case GL_LUMINANCE_ALPHA_SNORM: + case GL_LUMINANCE8_ALPHA8_SNORM: + case GL_LUMINANCE16_ALPHA16_SNORM: + return ctx-Extensions.EXT_texture_snorm + ctx-Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0; + case GL_INTENSITY_SNORM: + case GL_INTENSITY8_SNORM: + case GL_INTENSITY16_SNORM: + return ctx-Extensions.EXT_texture_snorm +
Mesa (master): mesa: implement texstore and texfetch hooks for signed normalized formats
Module: Mesa Branch: master Commit: daa5242f9eafaf61f9f492f1e798de8701e6f498 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=daa5242f9eafaf61f9f492f1e798de8701e6f498 Author: Marek Olšák mar...@gmail.com Date: Sun Mar 13 14:48:09 2011 +0100 mesa: implement texstore and texfetch hooks for signed normalized formats The snorm texstore functions were all broken. swrast support done except for mipmap generation, but I leave it disabled. --- src/mesa/main/texfetch.c | 86 ++-- src/mesa/main/texfetch_tmp.h | 227 +++--- src/mesa/main/texstore.c | 319 ++--- 3 files changed, 514 insertions(+), 118 deletions(-) diff --git a/src/mesa/main/texfetch.c b/src/mesa/main/texfetch.c index 988a7e0..b2181af 100644 --- a/src/mesa/main/texfetch.c +++ b/src/mesa/main/texfetch.c @@ -696,11 +696,11 @@ texfetch_funcs[MESA_FORMAT_COUNT] = store_texel_signed_r8 }, { - MESA_FORMAT_SIGNED_RG88, - fetch_texel_1d_signed_rg88, - fetch_texel_2d_signed_rg88, - fetch_texel_3d_signed_rg88, - store_texel_signed_rg88 + MESA_FORMAT_SIGNED_RG88_REV, + fetch_texel_1d_signed_rg88_rev, + fetch_texel_2d_signed_rg88_rev, + fetch_texel_3d_signed_rg88_rev, + store_texel_signed_rg88_rev }, { MESA_FORMAT_SIGNED_RGBX, @@ -724,18 +724,18 @@ texfetch_funcs[MESA_FORMAT_COUNT] = store_texel_signed_rgba_rev }, { - MESA_FORMAT_SIGNED_R_16, - fetch_texel_1d_signed_r_16, - fetch_texel_2d_signed_r_16, - fetch_texel_3d_signed_r_16, - store_texel_signed_r_16 + MESA_FORMAT_SIGNED_R16, + fetch_texel_1d_signed_r16, + fetch_texel_2d_signed_r16, + fetch_texel_3d_signed_r16, + store_texel_signed_r16 }, { - MESA_FORMAT_SIGNED_RG_16, - fetch_texel_1d_signed_rg_16, - fetch_texel_2d_signed_rg_16, - fetch_texel_3d_signed_rg_16, - store_texel_signed_rg_16 + MESA_FORMAT_SIGNED_GR1616, + fetch_texel_1d_signed_rg1616, + fetch_texel_2d_signed_rg1616, + fetch_texel_3d_signed_rg1616, + store_texel_signed_rg1616 }, { MESA_FORMAT_SIGNED_RGB_16, @@ -814,6 +814,62 @@ texfetch_funcs[MESA_FORMAT_COUNT] = NULL, NULL }, + { + MESA_FORMAT_SIGNED_A8, + fetch_texel_1d_signed_a8, + fetch_texel_2d_signed_a8, + fetch_texel_3d_signed_a8, + store_texel_signed_a8 + }, + { + MESA_FORMAT_SIGNED_L8, + fetch_texel_1d_signed_l8, + fetch_texel_2d_signed_l8, + fetch_texel_3d_signed_l8, + store_texel_signed_l8 + }, + { + MESA_FORMAT_SIGNED_AL88, + fetch_texel_1d_signed_al88, + fetch_texel_2d_signed_al88, + fetch_texel_3d_signed_al88, + store_texel_signed_al88 + }, + { + MESA_FORMAT_SIGNED_I8, + fetch_texel_1d_signed_i8, + fetch_texel_2d_signed_i8, + fetch_texel_3d_signed_i8, + store_texel_signed_i8 + }, + { + MESA_FORMAT_SIGNED_A16, + fetch_texel_1d_signed_a16, + fetch_texel_2d_signed_a16, + fetch_texel_3d_signed_a16, + store_texel_signed_a16 + }, + { + MESA_FORMAT_SIGNED_L16, + fetch_texel_1d_signed_l16, + fetch_texel_2d_signed_l16, + fetch_texel_3d_signed_l16, + store_texel_signed_l16 + }, + { + MESA_FORMAT_SIGNED_AL1616, + fetch_texel_1d_signed_al1616, + fetch_texel_2d_signed_al1616, + fetch_texel_3d_signed_al1616, + store_texel_signed_al1616 + }, + { + MESA_FORMAT_SIGNED_I16, + fetch_texel_1d_signed_i16, + fetch_texel_2d_signed_i16, + fetch_texel_3d_signed_i16, + store_texel_signed_i16 + }, }; diff --git a/src/mesa/main/texfetch_tmp.h b/src/mesa/main/texfetch_tmp.h index 36dede5..f1f6a01 100644 --- a/src/mesa/main/texfetch_tmp.h +++ b/src/mesa/main/texfetch_tmp.h @@ -1673,25 +1673,117 @@ static void store_texel_signed_r8(struct gl_texture_image *texImage, #endif -/* MESA_FORMAT_SIGNED_RG88 ***/ +/* MESA_FORMAT_SIGNED_A8 ***/ -static void FETCH(signed_rg88)( const struct gl_texture_image *texImage, -GLint i, GLint j, GLint k, GLfloat *texel ) +static void FETCH(signed_a8)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLbyte s = *TEXEL_ADDR(GLbyte, texImage, i, j, k, 1); + texel[RCOMP] = 0.0F; + texel[GCOMP] = 0.0F; + texel[BCOMP] = 0.0F; + texel[ACOMP] = BYTE_TO_FLOAT_TEX( s ); +} + +#if DIM == 3 +static void store_texel_signed_a8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLbyte *rgba = (const GLbyte *) texel; + GLbyte *dst = TEXEL_ADDR(GLbyte, texImage, i, j, k, 1); + *dst = rgba[ACOMP]; +} +#endif + + +/* MESA_FORMAT_SIGNED_L8
Mesa (master): gallium: add EXT_texture_snorm support
Module: Mesa Branch: master Commit: 2af1da15468d06d3ce9d89bcc706276ecc66f761 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2af1da15468d06d3ce9d89bcc706276ecc66f761 Author: Marek Olšák mar...@gmail.com Date: Mon Mar 14 10:04:36 2011 +0100 gallium: add EXT_texture_snorm support --- src/gallium/auxiliary/util/u_format.csv |8 + src/gallium/include/pipe/p_format.h |9 ++ src/mesa/state_tracker/st_extensions.c |6 + src/mesa/state_tracker/st_format.c | 232 ++- 4 files changed, 253 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/util/u_format.csv b/src/gallium/auxiliary/util/u_format.csv index 6f5cc61..771bd49 100644 --- a/src/gallium/auxiliary/util/u_format.csv +++ b/src/gallium/auxiliary/util/u_format.csv @@ -88,6 +88,14 @@ PIPE_FORMAT_L16_UNORM , plain, 1, 1, un16, , , , xxx1, r PIPE_FORMAT_A16_UNORM , plain, 1, 1, un16, , , , 000x, rgb PIPE_FORMAT_I16_UNORM , plain, 1, 1, un16, , , , , rgb PIPE_FORMAT_L16A16_UNORM , plain, 1, 1, un16, un16, , , xxxy, rgb +PIPE_FORMAT_A8_SNORM , plain, 1, 1, sn8 , , , , 000x, rgb +PIPE_FORMAT_L8_SNORM , plain, 1, 1, sn8 , , , , xxx1, rgb +PIPE_FORMAT_L8A8_SNORM, plain, 1, 1, sn8 , sn8 , , , xxxy, rgb +PIPE_FORMAT_I8_SNORM , plain, 1, 1, sn8 , , , , , rgb +PIPE_FORMAT_A16_SNORM , plain, 1, 1, sn16, , , , 000x, rgb +PIPE_FORMAT_L16_SNORM , plain, 1, 1, sn16, , , , xxx1, rgb +PIPE_FORMAT_L16A16_SNORM , plain, 1, 1, sn16, sn16, , , xxxy, rgb +PIPE_FORMAT_I16_SNORM , plain, 1, 1, sn16, , , , , rgb # SRGB formats PIPE_FORMAT_L8_SRGB , plain, 1, 1, un8 , , , , xxx1, srgb diff --git a/src/gallium/include/pipe/p_format.h b/src/gallium/include/pipe/p_format.h index d53af59..3ea9a39 100644 --- a/src/gallium/include/pipe/p_format.h +++ b/src/gallium/include/pipe/p_format.h @@ -211,6 +211,15 @@ enum pipe_format { PIPE_FORMAT_LATC2_UNORM = 145, PIPE_FORMAT_LATC2_SNORM = 146, + PIPE_FORMAT_A8_SNORM= 147, + PIPE_FORMAT_L8_SNORM= 148, + PIPE_FORMAT_L8A8_SNORM = 149, + PIPE_FORMAT_I8_SNORM= 150, + PIPE_FORMAT_A16_SNORM = 151, + PIPE_FORMAT_L16_SNORM = 152, + PIPE_FORMAT_L16A16_SNORM= 153, + PIPE_FORMAT_I16_SNORM = 154, + PIPE_FORMAT_COUNT }; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 89bb030..ba1a0af 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -453,6 +453,12 @@ void st_init_extensions(struct st_context *st) ctx-Extensions.ATI_texture_compression_3dc = GL_TRUE; } + if (screen-is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_SAMPLER_VIEW)) { + ctx-Extensions.EXT_texture_snorm = GL_TRUE; + } + /* ycbcr support */ if (screen-is_format_supported(screen, PIPE_FORMAT_UYVY, PIPE_TEXTURE_2D, 0, diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 03655ee..957a06c 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -259,6 +259,39 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat) case MESA_FORMAT_SIGNED_LA_LATC2: return PIPE_FORMAT_LATC2_SNORM; + /* signed normalized formats */ + case MESA_FORMAT_SIGNED_R8: + return PIPE_FORMAT_R8_SNORM; + case MESA_FORMAT_SIGNED_RG88_REV: + return PIPE_FORMAT_R8G8_SNORM; + case MESA_FORMAT_SIGNED_RGBA_REV: + return PIPE_FORMAT_R8G8B8A8_SNORM; + + case MESA_FORMAT_SIGNED_A8: + return PIPE_FORMAT_A8_SNORM; + case MESA_FORMAT_SIGNED_L8: + return PIPE_FORMAT_L8_SNORM; + case MESA_FORMAT_SIGNED_AL88: + return PIPE_FORMAT_L8A8_SNORM; + case MESA_FORMAT_SIGNED_I8: + return PIPE_FORMAT_I8_SNORM; + + case MESA_FORMAT_SIGNED_R16: + return PIPE_FORMAT_R16_SNORM; + case MESA_FORMAT_SIGNED_GR1616: + return PIPE_FORMAT_R16G16_SNORM; + case MESA_FORMAT_SIGNED_RGBA_16: + return PIPE_FORMAT_R16G16B16A16_SNORM; + + case MESA_FORMAT_SIGNED_A16: + return PIPE_FORMAT_A16_SNORM; + case MESA_FORMAT_SIGNED_L16: + return PIPE_FORMAT_L16_SNORM; + case MESA_FORMAT_SIGNED_AL1616: + return PIPE_FORMAT_L16A16_SNORM; + case MESA_FORMAT_SIGNED_I16: + return PIPE_FORMAT_I16_SNORM; + default: assert(0); return PIPE_FORMAT_NONE; @@ -318,8 +351,6 @@ st_pipe_format_to_mesa_format(enum pipe_format format) case
Mesa (master): mesa: clamp texture border color if ARB_texture_float is unsupported
Module: Mesa Branch: master Commit: e28fe8fe5d05c87a065f8e72adef8b5077da2c73 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e28fe8fe5d05c87a065f8e72adef8b5077da2c73 Author: Marek Olšák mar...@gmail.com Date: Sat Mar 26 13:06:22 2011 +0100 mesa: clamp texture border color if ARB_texture_float is unsupported ARB_texture_float disables clamping of the texture border color, ARB_color_buffer_float only modifies clamping of the glGet query. --- src/mesa/main/texparam.c | 16 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index adb6bce..34b6add 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -534,10 +534,18 @@ set_tex_parameterf(struct gl_context *ctx, case GL_TEXTURE_BORDER_COLOR: flush(ctx); - texObj-BorderColor.f[RCOMP] = params[0]; - texObj-BorderColor.f[GCOMP] = params[1]; - texObj-BorderColor.f[BCOMP] = params[2]; - texObj-BorderColor.f[ACOMP] = params[3]; + /* ARB_texture_float disables clamping */ + if (ctx-Extensions.ARB_texture_float) { + texObj-BorderColor.f[RCOMP] = params[0]; + texObj-BorderColor.f[GCOMP] = params[1]; + texObj-BorderColor.f[BCOMP] = params[2]; + texObj-BorderColor.f[ACOMP] = params[3]; + } else { + texObj-BorderColor.f[RCOMP] = CLAMP(params[0], 0.0F, 1.0F); + texObj-BorderColor.f[GCOMP] = CLAMP(params[1], 0.0F, 1.0F); + texObj-BorderColor.f[BCOMP] = CLAMP(params[2], 0.0F, 1.0F); + texObj-BorderColor.f[ACOMP] = CLAMP(params[3], 0.0F, 1.0F); + } return GL_TRUE; default: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: choose an appropriate texture format for DrawPixels
Module: Mesa Branch: master Commit: b518f4d0ea72dc3872f351250034aa9155756dd3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b518f4d0ea72dc3872f351250034aa9155756dd3 Author: Marek Olšák mar...@gmail.com Date: Tue Mar 15 15:00:02 2011 +0100 st/mesa: choose an appropriate texture format for DrawPixels --- src/mesa/state_tracker/st_cb_drawpixels.c | 52 +++-- 1 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index dc53e27..1707f82 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -296,7 +296,7 @@ base_format(GLenum format) * of the given format and type. */ static GLenum -internal_format(GLenum format, GLenum type) +internal_format(struct gl_context *ctx, GLenum format, GLenum type) { switch (format) { case GL_DEPTH_COMPONENT: @@ -326,7 +326,53 @@ internal_format(GLenum format, GLenum type) } } else { - return GL_RGBA; + switch (type) { + case GL_UNSIGNED_BYTE: + case GL_UNSIGNED_INT_8_8_8_8: + case GL_UNSIGNED_INT_8_8_8_8_REV: + default: +return GL_RGBA8; + + case GL_UNSIGNED_BYTE_3_3_2: + case GL_UNSIGNED_BYTE_2_3_3_REV: + case GL_UNSIGNED_SHORT_4_4_4_4: + case GL_UNSIGNED_SHORT_4_4_4_4_REV: +return GL_RGBA4; + + case GL_UNSIGNED_SHORT_5_6_5: + case GL_UNSIGNED_SHORT_5_6_5_REV: + case GL_UNSIGNED_SHORT_5_5_5_1: + case GL_UNSIGNED_SHORT_1_5_5_5_REV: +return GL_RGB5_A1; + + case GL_UNSIGNED_INT_10_10_10_2: + case GL_UNSIGNED_INT_2_10_10_10_REV: +return GL_RGB10_A2; + + case GL_UNSIGNED_SHORT: + case GL_UNSIGNED_INT: +return GL_RGBA16; + + case GL_BYTE: +return + ctx-Extensions.EXT_texture_snorm ? GL_RGBA8_SNORM : GL_RGBA8; + + case GL_SHORT: + case GL_INT: +return + ctx-Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16; + + case GL_HALF_FLOAT_ARB: +return + ctx-Extensions.ARB_texture_float ? GL_RGBA16F : + ctx-Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16; + + case GL_FLOAT: + case GL_DOUBLE: +return + ctx-Extensions.ARB_texture_float ? GL_RGBA32F : + ctx-Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16; + } } } } @@ -369,7 +415,7 @@ make_texture(struct st_context *st, GLenum baseFormat, intFormat; baseFormat = base_format(format); - intFormat = internal_format(format, type); + intFormat = internal_format(ctx, format, type); mformat = st_ChooseTextureFormat_renderable(ctx, intFormat, format, type, GL_FALSE); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: remove PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL
Module: Mesa Branch: master Commit: 8d4ec87d7f987b3852dafa6802815bb9a3ec7ad4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8d4ec87d7f987b3852dafa6802815bb9a3ec7ad4 Author: Marek Olšák mar...@gmail.com Date: Sat Mar 26 13:19:23 2011 +0100 gallium: remove PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL The vertex color clamp control is a property of an API, a lot like gl_rasterization_rules. The state should be set according to the API being implemented, for example: OpenGL Compatibility: enabled by default OpenGL Core: disabled by default D3D11: always disabled This patch also changes the way ARB_color_buffer_float is advertised. If no SNORM or FLOAT render target is supported, fragment color clamping is not required. --- src/gallium/include/pipe/p_defines.h |1 - src/mesa/state_tracker/st_extensions.c | 30 ++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 4f6daa8..1c1a8f2 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -463,7 +463,6 @@ enum pipe_cap { PIPE_CAP_SHADER_STENCIL_EXPORT, PIPE_CAP_TGSI_INSTANCEID, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR, - PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL }; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index ba1a0af..e327790 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -514,12 +514,34 @@ void st_init_extensions(struct st_context *st) ctx-Extensions.ARB_depth_clamp = GL_TRUE; } - /* this extension does not actually require support of floating point -* render targets, just clamping controls + /* This extension does not actually require support of floating point +* render targets, just clamping controls. +* Advertise this extension if either fragment color clamping is supported +* or no render targets having color values outside of the range [0, 1] +* are supported, in which case the fragment color clamping has no effect +* on rendering. */ - if(screen-get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL) - screen-get_param(screen, PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL)) + if (screen-get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL) || + (!screen-is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) +!screen-is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_SNORM, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) +!screen-is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) +!screen-is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FLOAT, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) +!screen-is_format_supported(screen, PIPE_FORMAT_R11G11B10_FLOAT, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) +!screen-is_format_supported(screen, PIPE_FORMAT_R9G9B9E5_FLOAT, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET))) { ctx-Extensions.ARB_color_buffer_float = GL_TRUE; + } if (screen-get_param(screen, PIPE_CAP_SHADER_STENCIL_EXPORT)) { ctx-Extensions.ARB_shader_stencil_export = GL_TRUE; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: update GL3 status
Module: Mesa Branch: master Commit: 8cbdfe1de4a5793d2d43dca81dd8996419b7aeed URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8cbdfe1de4a5793d2d43dca81dd8996419b7aeed Author: Marek Olšák mar...@gmail.com Date: Tue Mar 29 13:03:26 2011 +0200 docs: update GL3 status --- docs/GL3.txt |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/GL3.txt b/docs/GL3.txt index ca265af..c704699 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -15,7 +15,7 @@ GL 3.0: GLSL changes (GL_EXT_gpu_shader4, etc)not started Conditional rendering (GL_NV_conditional_render) DONE (swrast softpipe) Map buffer subranges (GL_ARB_map_buffer_range)DONE -Clamping controls (GL_ARB_color_buffer_float) BRANCH ~mareko/mesa floating2 +Clamping controls (GL_ARB_color_buffer_float) DONE Float textures, renderbuffers (GL_ARB_texture_float) BRANCH ~mareko/mesa floating2 GL_EXT_packed_float not started GL_EXT_texture_shared_exponentnot started @@ -53,7 +53,7 @@ Primitive restart (GL_NV_primitive_restart) DONE (gallium) Texture buffer objs (GL_ARB_texture_buffer_object)not started Rectangular textures (GL_ARB_texture_rectangle) DONE Uniform buffer objs (GL_ARB_uniform_buffer_object)not started -Signed normalized textures (GL_EXT_texture_snorm) ~50% done +Signed normalized textures (GL_EXT_texture_snorm) DONE (gallium) GL 3.2: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i915: Detect allocation failure of batch buffer
Module: Mesa Branch: master Commit: b094dff50a05e56f5415d31daa5e4542f321c858 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b094dff50a05e56f5415d31daa5e4542f321c858 Author: Chris Wilson ch...@chris-wilson.co.uk Date: Thu Mar 10 18:01:32 2011 + i915: Detect allocation failure of batch buffer Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk --- src/mesa/drivers/dri/i915/i915_vtbl.c |4 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/i915/i915_vtbl.c b/src/mesa/drivers/dri/i915/i915_vtbl.c index 921183b..942ebec 100644 --- a/src/mesa/drivers/dri/i915/i915_vtbl.c +++ b/src/mesa/drivers/dri/i915/i915_vtbl.c @@ -307,6 +307,10 @@ i915_emit_state(struct intel_context *intel) false); count = 0; again: + if (intel-batch.bo == NULL) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, i915 emit state); + assert(0); + } aper_count = 0; dirty = get_dirty(state); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: Avoid name clash of loop counter and member
Module: Mesa Branch: master Commit: 252eaa765e69a70036ec33a7e1e0ffeac1aab2ff URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=252eaa765e69a70036ec33a7e1e0ffeac1aab2ff Author: Chris Wilson ch...@chris-wilson.co.uk Date: Tue Mar 29 15:39:01 2011 +0100 i965: Avoid name clash of loop counter and member src/mesa/drivers/dri/i965/brw_fs.cpp:565 warning: name lookup of ‘c’ changed Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk --- src/mesa/drivers/dri/i965/brw_fs.cpp | 10 +- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index b2336b7..bdf0523 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -547,16 +547,16 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) * handed us defined values in only the constant offset * field of the setup reg. */ - for (unsigned int c = 0; c type-vector_elements; c++) { - struct brw_reg interp = interp_reg(location, c); + for (unsigned int k = 0; k type-vector_elements; k++) { + struct brw_reg interp = interp_reg(location, k); interp = suboffset(interp, 3); emit(FS_OPCODE_CINTERP, attr, fs_reg(interp)); attr.reg_offset++; } } else { /* Perspective interpolation case. */ - for (unsigned int c = 0; c type-vector_elements; c++) { - struct brw_reg interp = interp_reg(location, c); + for (unsigned int k = 0; k type-vector_elements; k++) { + struct brw_reg interp = interp_reg(location, k); emit(FS_OPCODE_LINTERP, attr, this-delta_x, this-delta_y, fs_reg(interp)); attr.reg_offset++; @@ -564,7 +564,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) if (intel-gen 6 !(is_gl_Color c-key.linear_color)) { attr.reg_offset -= type-vector_elements; - for (unsigned int c = 0; c type-vector_elements; c++) { + for (unsigned int k = 0; k type-vector_elements; k++) { emit(BRW_OPCODE_MUL, attr, attr, this-pixel_w); attr.reg_offset++; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel: Protect intel_clear_with_blit from failed buffer allocations
Module: Mesa Branch: master Commit: 7bae1c3d85344b7229e0124d1f54376392682430 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7bae1c3d85344b7229e0124d1f54376392682430 Author: Chris Wilson ch...@chris-wilson.co.uk Date: Tue Mar 29 15:40:21 2011 +0100 intel: Protect intel_clear_with_blit from failed buffer allocations Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34419 Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk --- src/mesa/drivers/dri/intel/intel_blit.c | 21 +++-- 1 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c index e1ab7f1..d6a648c 100644 --- a/src/mesa/drivers/dri/intel/intel_blit.c +++ b/src/mesa/drivers/dri/intel/intel_blit.c @@ -239,12 +239,12 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask) if (cw == 0 || ch == 0) return 0; - GLuint buf; all = (cw == fb-Width ch == fb-Height); /* Loop over all renderbuffers */ - for (buf = 0; buf BUFFER_COUNT mask; buf++) { - const GLbitfield bufBit = 1 buf; + mask = (1 BUFFER_COUNT) - 1; + while (mask) { + GLuint buf = _mesa_ffs(mask) - 1; struct intel_renderbuffer *irb; drm_intel_bo *write_buffer; int x1, y1, x2, y2; @@ -253,11 +253,15 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask) int pitch, cpp; drm_intel_bo *aper_array[2]; - if (!(mask bufBit)) -continue; + mask = ~(1 buf); - /* OK, clear this renderbuffer */ irb = intel_get_renderbuffer(fb, buf); + if (irb == NULL || irb-region == NULL || irb-region-buffer == NULL) { + fail_mask |= 1 buf; + continue; + } + + /* OK, clear this renderbuffer */ write_buffer = intel_region_buffer(intel, irb-region, all ? INTEL_WRITE_FULL : INTEL_WRITE_PART); @@ -333,8 +337,7 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask) clear[3], clear[3]); break; default: - fail_mask |= bufBit; - mask = ~bufBit; + fail_mask |= 1 buf; continue; } } @@ -367,8 +370,6 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask) if (buf == BUFFER_DEPTH || buf == BUFFER_STENCIL) mask = ~(BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL); - else -mask = ~bufBit;/* turn off bit, for faster loop exit */ } return fail_mask; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel: fix build
Module: Mesa Branch: master Commit: 7d41857566d900aee3319f06c272049e6211acc1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d41857566d900aee3319f06c272049e6211acc1 Author: Marek Olšák mar...@gmail.com Date: Tue Mar 29 18:01:44 2011 +0200 intel: fix build broken with e5c6a92a12b5cd7db205d72039f58d302b0be9d5 (mesa: implement clamping controls (ARB_color_buffer_float)) --- src/mesa/drivers/dri/i915/i915_fragprog.c |2 +- src/mesa/drivers/dri/i965/brw_program.c |2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i915/i915_fragprog.c b/src/mesa/drivers/dri/i915/i915_fragprog.c index 89de2a8..7286e2b 100644 --- a/src/mesa/drivers/dri/i915/i915_fragprog.c +++ b/src/mesa/drivers/dri/i915/i915_fragprog.c @@ -1291,7 +1291,7 @@ i915ProgramStringNotify(struct gl_context * ctx, */ if (p-FragProg.FogOption) { /* add extra instructions to do fog, then turn off FogOption field */ - _mesa_append_fog_code(ctx, p-FragProg, TRUE); + _mesa_append_fog_code(ctx, p-FragProg, GL_TRUE); p-FragProg.FogOption = GL_NONE; } } diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c index 2132b82..b5ec55b 100644 --- a/src/mesa/drivers/dri/i965/brw_program.c +++ b/src/mesa/drivers/dri/i965/brw_program.c @@ -135,7 +135,7 @@ static GLboolean brwProgramStringNotify( struct gl_context *ctx, struct gl_shader_program *shader_program; if (fprog-FogOption) { - _mesa_append_fog_code(ctx, fprog, TRUE); + _mesa_append_fog_code(ctx, fprog, GL_TRUE); fprog-FogOption = GL_NONE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r300g: add support for all render targets with one and two channels
Module: Mesa Branch: master Commit: 0420ae3d9069ff5cbe067bdd5c6075d9292dbe66 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0420ae3d9069ff5cbe067bdd5c6075d9292dbe66 Author: Marek Olšák mar...@gmail.com Date: Tue Mar 29 16:35:13 2011 +0200 r300g: add support for all render targets with one and two channels The hardware should be set according to this table: FORMAT - R300 COLORFORMAT - X16- UV88 X16Y16 - ARGB X32- ARGB X32Y32 - ARGB16161616 US_OUT_FMT must contain the real format. I wasn't able to make B3G3R2 and L4A4 work, but those aren't important. --- src/gallium/drivers/r300/r300_texture.c | 160 +-- 1 files changed, 130 insertions(+), 30 deletions(-) diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index 57e0c61..6214380 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -404,6 +404,19 @@ static uint32_t r300_translate_colorformat(enum pipe_format format) case PIPE_FORMAT_L8A8_SNORM: case PIPE_FORMAT_R8G8_UNORM: case PIPE_FORMAT_R8G8_SNORM: +/* These formats work fine with UV88 if US_OUT_FMT is set correctly. */ +case PIPE_FORMAT_A16_UNORM: +case PIPE_FORMAT_A16_SNORM: +/*case PIPE_FORMAT_A16_FLOAT:*/ +case PIPE_FORMAT_L16_UNORM: +case PIPE_FORMAT_L16_SNORM: +/*case PIPE_FORMAT_L16_FLOAT:*/ +case PIPE_FORMAT_I16_UNORM: +case PIPE_FORMAT_I16_SNORM: +/*case PIPE_FORMAT_I16_FLOAT:*/ +case PIPE_FORMAT_R16_UNORM: +case PIPE_FORMAT_R16_SNORM: +case PIPE_FORMAT_R16_FLOAT: return R300_COLOR_FORMAT_UV88; case PIPE_FORMAT_B5G6R5_UNORM: @@ -434,19 +447,33 @@ static uint32_t r300_translate_colorformat(enum pipe_format format) /*case PIPE_FORMAT_X8B8G8R8_SNORM:*/ case PIPE_FORMAT_R8G8B8X8_UNORM: /*case PIPE_FORMAT_R8G8B8X8_SNORM:*/ -case PIPE_FORMAT_R8SG8SB8UX8U_NORM: +/* These formats work fine with ARGB if US_OUT_FMT is set + * correctly. */ +case PIPE_FORMAT_R16G16_UNORM: +case PIPE_FORMAT_R16G16_SNORM: +case PIPE_FORMAT_R16G16_FLOAT: +case PIPE_FORMAT_L16A16_UNORM: +case PIPE_FORMAT_L16A16_SNORM: +/*case PIPE_FORMAT_L16A16_FLOAT: +case PIPE_FORMAT_A32_FLOAT: +case PIPE_FORMAT_L32_FLOAT: +case PIPE_FORMAT_I32_FLOAT:*/ +case PIPE_FORMAT_R32_FLOAT: return R300_COLOR_FORMAT_ARGB; case PIPE_FORMAT_R10G10B10A2_UNORM: case PIPE_FORMAT_R10G10B10X2_SNORM: case PIPE_FORMAT_B10G10R10A2_UNORM: -case PIPE_FORMAT_R10SG10SB10SA2U_NORM: return R500_COLOR_FORMAT_ARGB2101010; /* R5xx-only? */ /* 64-bit buffers. */ case PIPE_FORMAT_R16G16B16A16_UNORM: case PIPE_FORMAT_R16G16B16A16_SNORM: case PIPE_FORMAT_R16G16B16A16_FLOAT: +/* These formats work fine with ARGB16161616 if US_OUT_FMT is set + * correctly. */ +case PIPE_FORMAT_R32G32_FLOAT: +/*case PIPE_FORMAT_L32A32_FLOAT:*/ return R300_COLOR_FORMAT_ARGB16161616; /* 128-bit buffers. */ @@ -489,12 +516,7 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format) uint32_t modifier = 0; unsigned i; const struct util_format_description *desc; -static const uint32_t sign_bit[4] = { -R300_OUT_SIGN(0x4), -R300_OUT_SIGN(0x2), -R300_OUT_SIGN(0x1), -R300_OUT_SIGN(0x8), -}; +boolean uniform_sign; desc = util_format_description(format); @@ -509,34 +531,82 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format) return ~0; /* Unsupported/unknown. */ /* Specifies how the shader output is written to the fog unit. */ -if (desc-channel[i].type == UTIL_FORMAT_TYPE_FLOAT) { -if (desc-channel[i].size == 32) { -modifier |= R300_US_OUT_FMT_C4_32_FP; -} else { -modifier |= R300_US_OUT_FMT_C4_16_FP; +switch (desc-channel[i].type) { +case UTIL_FORMAT_TYPE_FLOAT: +switch (desc-channel[i].size) { +case 32: +switch (desc-nr_channels) { +case 1: +modifier |= R300_US_OUT_FMT_C_32_FP; +break; +case 2: +modifier |= R300_US_OUT_FMT_C2_32_FP; +break; +case 4: +modifier |= R300_US_OUT_FMT_C4_32_FP; +break; +} +break; + +case 16: +switch (desc-nr_channels) { +case 1: +modifier |= R300_US_OUT_FMT_C_16_FP; +break; +case 2: +modifier |= R300_US_OUT_FMT_C2_16_FP; +break; +case 4: +modifier |= R300_US_OUT_FMT_C4_16_FP; +
Mesa (master): glsl: Calcluate Mesa state slots in front-end instead of back-end
Module: Mesa Branch: master Commit: 89d81ab16c05818b290ed735c1343d3abde449bf URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=89d81ab16c05818b290ed735c1343d3abde449bf Author: Ian Romanick ian.d.roman...@intel.com Date: Tue Jan 25 10:41:20 2011 -0800 glsl: Calcluate Mesa state slots in front-end instead of back-end This should be the last bit of infrastructure changes before generating GLSL IR for assembly shaders. This commit leaves some odd code formatting in ir_to_mesa and brw_fs. This was done to minimize whitespace changes / reindentation in some loops. The following commit will restore formatting sanity. Reviewed-by: Eric Anholt e...@anholt.net Reviewed-by: Chad Versace chad.vers...@intel.com --- src/glsl/ir.h| 26 src/glsl/ir_clone.cpp| 12 +++ src/glsl/ir_variable.cpp | 46 ++-- src/glsl/linker.cpp | 13 src/mesa/drivers/dri/i965/brw_fs.cpp | 37 --- src/mesa/program/ir_to_mesa.cpp | 56 ++--- 6 files changed, 117 insertions(+), 73 deletions(-) diff --git a/src/glsl/ir.h b/src/glsl/ir.h index 39d4ebc..a419843 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -253,6 +253,16 @@ enum ir_depth_layout { const char* depth_layout_string(ir_depth_layout layout); +/** + * Description of built-in state associated with a uniform + * + * \sa ir_variable::state_slots + */ +struct ir_state_slot { + int tokens[5]; + int swizzle; +}; + class ir_variable : public ir_instruction { public: ir_variable(const struct glsl_type *, const char *, ir_variable_mode); @@ -386,6 +396,22 @@ public: int location; /** +* Built-in state that backs this uniform +* +* Once set at variable creation, \c state_slots must remain invariant. +* This is because, ideally, this array would be shared by all clones of +* this variable in the IR tree. In other words, we'd really like for it +* to be a fly-weight. +* +* If the variable is not a uniform, \c num_state_slots will be zero and +* \c state_slots will be \c NULL. +*/ + /*@{*/ + unsigned num_state_slots;/** Number of state slots used */ + ir_state_slot *state_slots; /** State descriptors. */ + /*@}*/ + + /** * Emit a warning if this variable is accessed. */ const char *warn_extension; diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp index 2c0574d..069bb85 100644 --- a/src/glsl/ir_clone.cpp +++ b/src/glsl/ir_clone.cpp @@ -53,6 +53,18 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) const var-origin_upper_left = this-origin_upper_left; var-pixel_center_integer = this-pixel_center_integer; var-explicit_location = this-explicit_location; + + var-num_state_slots = this-num_state_slots; + if (this-state_slots) { + /* FINISHME: This really wants to use something like talloc_reference, but + * FINISHME: ralloc doesn't have any similar function. + */ + var-state_slots = ralloc_array(var, ir_state_slot, + this-num_state_slots); + memcpy(var-state_slots, this-state_slots, +sizeof(this-state_slots[0]) * var-num_state_slots); + } + if (this-explicit_location) var-location = this-location; diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index c271525..f357717 100644 --- a/src/glsl/ir_variable.cpp +++ b/src/glsl/ir_variable.cpp @@ -327,7 +327,43 @@ static ir_variable * add_uniform(exec_list *instructions, glsl_symbol_table *symtab, const char *name, const glsl_type *type) { - return add_variable(instructions, symtab, name, type, ir_var_uniform, -1); + ir_variable *const uni = + add_variable(instructions, symtab, name, type, ir_var_uniform, -1); + + unsigned i; + for (i = 0; _mesa_builtin_uniform_desc[i].name != NULL; i++) { + if (strcmp(_mesa_builtin_uniform_desc[i].name, name) == 0) { +break; + } + } + + assert(_mesa_builtin_uniform_desc[i].name != NULL); + const struct gl_builtin_uniform_desc* const statevar = + _mesa_builtin_uniform_desc[i]; + + const unsigned array_count = type-is_array() ? type-length : 1; + uni-num_state_slots = array_count * statevar-num_elements; + + ir_state_slot *slots = + ralloc_array(uni, ir_state_slot, uni-num_state_slots); + + uni-state_slots = slots; + + for (unsigned a = 0; a array_count; a++) { + for (unsigned j = 0; j statevar-num_elements; j++) { +struct gl_builtin_uniform_element *element = statevar-elements[j]; + +memcpy(slots-tokens, element-tokens, sizeof(element-tokens)); +if (type-is_array()) { + slots-tokens[1] = a; +} + +slots-swizzle = element-swizzle; +slots++; + } + } + + return uni; } static void @@ -341,8 +377,12 @@ add_builtin_variable(exec_list *instructions,
Mesa (master): glsl: Move _mesa_builtin_uniform_desc from uniforms. c to ir_variable.cpp
Module: Mesa Branch: master Commit: 92e412e788931ad464125113a64eec8a8223cda3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=92e412e788931ad464125113a64eec8a8223cda3 Author: Ian Romanick ian.d.roman...@intel.com Date: Mon Jan 24 16:55:50 2011 -0800 glsl: Move _mesa_builtin_uniform_desc from uniforms.c to ir_variable.cpp This array is going to be used in the main compiler soon. Leaving them uniforms.c caused problems for building the stand-alone compiler. Reviewed-by: Eric Anholt e...@anholt.net Reviewed-by: Chad Versace chad.vers...@intel.com --- src/glsl/ir_variable.cpp | 253 ++ src/mesa/main/uniforms.c | 248 - 2 files changed, 253 insertions(+), 248 deletions(-) diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index 68d9ab2..c271525 100644 --- a/src/glsl/ir_variable.cpp +++ b/src/glsl/ir_variable.cpp @@ -25,6 +25,10 @@ #include glsl_parser_extras.h #include glsl_symbol_table.h #include builtin_variables.h +#include main/uniforms.h +#include program/prog_parameter.h +#include program/prog_statevars.h +#include program/prog_instruction.h static void generate_ARB_draw_buffers_variables(exec_list *, struct _mesa_glsl_parse_state *, @@ -35,6 +39,255 @@ generate_ARB_draw_instanced_variables(exec_list *, struct _mesa_glsl_parse_state *, bool, _mesa_glsl_parser_targets); +static struct gl_builtin_uniform_element gl_DepthRange_elements[] = { + {near, {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_}, + {far, {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_}, + {diff, {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_ClipPlane_elements[] = { + {NULL, {STATE_CLIPPLANE, 0, 0}, SWIZZLE_XYZW} +}; + +static struct gl_builtin_uniform_element gl_Point_elements[] = { + {size, {STATE_POINT_SIZE}, SWIZZLE_}, + {sizeMin, {STATE_POINT_SIZE}, SWIZZLE_}, + {sizeMax, {STATE_POINT_SIZE}, SWIZZLE_}, + {fadeThresholdSize, {STATE_POINT_SIZE}, SWIZZLE_}, + {distanceConstantAttenuation, {STATE_POINT_ATTENUATION}, SWIZZLE_}, + {distanceLinearAttenuation, {STATE_POINT_ATTENUATION}, SWIZZLE_}, + {distanceQuadraticAttenuation, {STATE_POINT_ATTENUATION}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_FrontMaterial_elements[] = { + {emission, {STATE_MATERIAL, 0, STATE_EMISSION}, SWIZZLE_XYZW}, + {ambient, {STATE_MATERIAL, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, + {diffuse, {STATE_MATERIAL, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, + {specular, {STATE_MATERIAL, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, + {shininess, {STATE_MATERIAL, 0, STATE_SHININESS}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_BackMaterial_elements[] = { + {emission, {STATE_MATERIAL, 1, STATE_EMISSION}, SWIZZLE_XYZW}, + {ambient, {STATE_MATERIAL, 1, STATE_AMBIENT}, SWIZZLE_XYZW}, + {diffuse, {STATE_MATERIAL, 1, STATE_DIFFUSE}, SWIZZLE_XYZW}, + {specular, {STATE_MATERIAL, 1, STATE_SPECULAR}, SWIZZLE_XYZW}, + {shininess, {STATE_MATERIAL, 1, STATE_SHININESS}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_LightSource_elements[] = { + {ambient, {STATE_LIGHT, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, + {diffuse, {STATE_LIGHT, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, + {specular, {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, + {position, {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW}, + {halfVector, {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW}, + {spotDirection, {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, +MAKE_SWIZZLE4(SWIZZLE_X, + SWIZZLE_Y, + SWIZZLE_Z, + SWIZZLE_Z)}, + {spotCosCutoff, {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_}, + {spotCutoff, {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_}, + {spotExponent, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_}, + {constantAttenuation, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_}, + {linearAttenuation, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_}, + {quadraticAttenuation, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_LightModel_elements[] = { + {ambient, {STATE_LIGHTMODEL_AMBIENT, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_FrontLightModelProduct_elements[] = { + {sceneColor, {STATE_LIGHTMODEL_SCENECOLOR, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_BackLightModelProduct_elements[] = { + {sceneColor, {STATE_LIGHTMODEL_SCENECOLOR, 1}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_FrontLightProduct_elements[] = { + {ambient, {STATE_LIGHTPROD, 0, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, + {diffuse, {STATE_LIGHTPROD, 0, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, + {specular, {STATE_LIGHTPROD, 0, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
Mesa (master): mesa: Fix ugly indentation left from previous commit
Module: Mesa Branch: master Commit: a99e80d795f7c6aec0e73369a31d1728577b9727 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a99e80d795f7c6aec0e73369a31d1728577b9727 Author: Ian Romanick ian.d.roman...@intel.com Date: Thu Mar 24 18:31:05 2011 -0700 mesa: Fix ugly indentation left from previous commit Reviewed-by: Eric Anholt e...@anholt.net Reviewed-by: Chad Versace chad.vers...@intel.com --- src/mesa/drivers/dri/i965/brw_fs.cpp | 48 - src/mesa/program/ir_to_mesa.cpp | 31 ++--- 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index cf05fb4..bea6b18 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -402,31 +402,29 @@ fs_visitor::setup_builtin_uniform_values(ir_variable *ir) const ir_state_slot *const slots = ir-state_slots; assert(ir-state_slots != NULL); - { - for (unsigned int i = 0; i ir-num_state_slots; i++) { -/* This state reference has already been setup by ir_to_mesa, - * but we'll get the same index back here. - */ -int index = _mesa_add_state_reference(this-fp-Base.Parameters, - (gl_state_index *)slots[i].tokens); + for (unsigned int i = 0; i ir-num_state_slots; i++) { + /* This state reference has already been setup by ir_to_mesa, but we'll + * get the same index back here. + */ + int index = _mesa_add_state_reference(this-fp-Base.Parameters, + (gl_state_index *)slots[i].tokens); -/* Add each of the unique swizzles of the element as a - * parameter. This'll end up matching the expected layout of - * the array/matrix/structure we're trying to fill in. - */ -int last_swiz = -1; -for (unsigned int j = 0; j 4; j++) { - int swiz = GET_SWZ(slots[i].swizzle, j); - if (swiz == last_swiz) - break; - last_swiz = swiz; + /* Add each of the unique swizzles of the element as a parameter. + * This'll end up matching the expected layout of the + * array/matrix/structure we're trying to fill in. + */ + int last_swiz = -1; + for (unsigned int j = 0; j 4; j++) { +int swiz = GET_SWZ(slots[i].swizzle, j); +if (swiz == last_swiz) + break; +last_swiz = swiz; - c-prog_data.param_convert[c-prog_data.nr_params] = - PARAM_NO_CONVERT; - this-param_index[c-prog_data.nr_params] = index; - this-param_offset[c-prog_data.nr_params] = swiz; - c-prog_data.nr_params++; -} +c-prog_data.param_convert[c-prog_data.nr_params] = + PARAM_NO_CONVERT; +this-param_index[c-prog_data.nr_params] = index; +this-param_offset[c-prog_data.nr_params] = swiz; +c-prog_data.nr_params++; } } } diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 4cca2b7..bf2513d 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -795,26 +795,25 @@ ir_to_mesa_visitor::visit(ir_variable *ir) } - { -for (unsigned int i = 0; i ir-num_state_slots; i++) { - int index = _mesa_add_state_reference(this-prog-Parameters, - (gl_state_index *)slots[i].tokens); - - if (storage-file == PROGRAM_STATE_VAR) { - if (storage-index == -1) { - storage-index = index; - } else { - assert(index == storage-index + (int)i); - } + for (unsigned int i = 0; i ir-num_state_slots; i++) { +int index = _mesa_add_state_reference(this-prog-Parameters, + (gl_state_index *)slots[i].tokens); + +if (storage-file == PROGRAM_STATE_VAR) { + if (storage-index == -1) { + storage-index = index; } else { - ir_to_mesa_src_reg src(PROGRAM_STATE_VAR, index, NULL); - src.swizzle = slots[i].swizzle; - ir_to_mesa_emit_op1(ir, OPCODE_MOV, dst, src); - /* even a float takes up a whole vec4 reg in a struct/array. */ - dst.index++; + assert(index == storage-index + (int)i); } +} else { + ir_to_mesa_src_reg src(PROGRAM_STATE_VAR, index, NULL); + src.swizzle = slots[i].swizzle; + ir_to_mesa_emit_op1(ir, OPCODE_MOV, dst, src); + /* even a float takes up a whole vec4 reg in a struct/array. */ + dst.index++; } } + if (storage-file == PROGRAM_TEMPORARY dst.index != storage-index + ir-num_state_slots) { fail_link(this-shader_program,
Mesa (master): r600g: implement the pipe_screen fence functions
Module: Mesa Branch: master Commit: 948e1eb8e9c166ad5b74abc630d0760768ce78c9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=948e1eb8e9c166ad5b74abc630d0760768ce78c9 Author: Fredrik Höglund fred...@kde.org Date: Tue Mar 29 19:43:59 2011 +0200 r600g: implement the pipe_screen fence functions v2: Allocate the fences from a single shared buffer object. v3: Allocate the r600_fence structs in blocks of 16. Spin a few times before calling sched_yield in r600_fence_finish(). --- src/gallium/drivers/r600/r600.h |2 + src/gallium/drivers/r600/r600_pipe.c | 145 + src/gallium/drivers/r600/r600_pipe.h | 27 + src/gallium/winsys/r600/drm/r600_hw_context.c | 23 4 files changed, 197 insertions(+), 0 deletions(-) diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h index 0b7d6f7..75b8b50 100644 --- a/src/gallium/drivers/r600/r600.h +++ b/src/gallium/drivers/r600/r600.h @@ -288,6 +288,8 @@ void r600_context_queries_suspend(struct r600_context *ctx); void r600_context_queries_resume(struct r600_context *ctx); void r600_query_predication(struct r600_context *ctx, struct r600_query *query, int operation, int flag_wait); +void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence, + unsigned offset, unsigned value); int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon); void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *draw); diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 0e28bda..c5fc2ba 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -37,6 +37,7 @@ #include util/u_memory.h #include util/u_inlines.h #include util/u_upload_mgr.h +#include os/os_time.h #include pipebuffer/pb_buffer.h #include r600.h #include r600d.h @@ -48,15 +49,82 @@ /* * pipe_context */ +static struct r600_fence *r600_create_fence(struct r600_pipe_context *ctx) +{ + struct r600_fence *fence = NULL; + + if (!ctx-fences.bo) { + /* Create the shared buffer object */ + ctx-fences.bo = r600_bo(ctx-radeon, 4096, 0, 0, 0); + if (!ctx-fences.bo) { + R600_ERR(r600: failed to create bo for fence objects\n); + return NULL; + } + ctx-fences.data = r600_bo_map(ctx-radeon, ctx-fences.bo, PB_USAGE_UNSYNCHRONIZED, NULL); + } + + if (!LIST_IS_EMPTY(ctx-fences.pool)) { + struct r600_fence *entry; + + /* Try to find a freed fence that has been signalled */ + LIST_FOR_EACH_ENTRY(entry, ctx-fences.pool, head) { + if (ctx-fences.data[entry-index] != 0) { + LIST_DELINIT(entry-head); + fence = entry; + break; + } + } + } + + if (!fence) { + /* Allocate a new fence */ + struct r600_fence_block *block; + unsigned index; + + if ((ctx-fences.next_index + 1) = 1024) { + R600_ERR(r600: too many concurrent fences\n); + return NULL; + } + + index = ctx-fences.next_index++; + + if (!(index % FENCE_BLOCK_SIZE)) { + /* Allocate a new block */ + block = CALLOC_STRUCT(r600_fence_block); + if (block == NULL) + return NULL; + + LIST_ADD(block-head, ctx-fences.blocks); + } else { + block = LIST_ENTRY(struct r600_fence_block, ctx-fences.blocks.next, head); + } + + fence = block-fences[index % FENCE_BLOCK_SIZE]; + fence-ctx = ctx; + fence-index = index; + } + + pipe_reference_init(fence-reference, 1); + + ctx-fences.data[fence-index] = 0; + r600_context_emit_fence(ctx-ctx, ctx-fences.bo, fence-index, 1); + return fence; +} + static void r600_flush(struct pipe_context *ctx, struct pipe_fence_handle **fence) { struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx; + struct r600_fence **rfence = (struct r600_fence**)fence; + #if 0 static int dc = 0; char dname[256]; #endif + if (rfence) + *rfence = r600_create_fence(rctx); + if (!rctx-ctx.pm4_cdwords) return; @@ -112,6 +180,18 @@ static void r600_destroy_context(struct pipe_context *context) u_vbuf_mgr_destroy(rctx-vbuf_mgr); util_slab_destroy(rctx-pool_transfers); + if (rctx-fences.bo) { + struct r600_fence_block *entry, *tmp; +
Mesa (master): r600g: implement texture barrier
Module: Mesa Branch: master Commit: d04ab396a54d29948363c3353efa5aaa888076a3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d04ab396a54d29948363c3353efa5aaa888076a3 Author: Fredrik Höglund fred...@kde.org Date: Tue Mar 29 19:52:03 2011 +0200 r600g: implement texture barrier --- src/gallium/drivers/r600/evergreen_state.c|1 + src/gallium/drivers/r600/r600.h |1 + src/gallium/drivers/r600/r600_pipe.h |2 ++ src/gallium/drivers/r600/r600_state.c |8 src/gallium/winsys/r600/drm/r600_hw_context.c | 17 + 5 files changed, 29 insertions(+), 0 deletions(-) diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index 7743266..8f93eb8 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -920,6 +920,7 @@ void evergreen_init_state_functions(struct r600_pipe_context *rctx) rctx-context.set_viewport_state = evergreen_set_viewport_state; rctx-context.sampler_view_destroy = r600_sampler_view_destroy; rctx-context.redefine_user_buffer = u_default_redefine_user_buffer; + rctx-context.texture_barrier = r600_texture_barrier; } void evergreen_init_config(struct r600_pipe_context *rctx) diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h index 75b8b50..4256a7e 100644 --- a/src/gallium/drivers/r600/r600.h +++ b/src/gallium/drivers/r600/r600.h @@ -290,6 +290,7 @@ void r600_query_predication(struct r600_context *ctx, struct r600_query *query, int flag_wait); void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence, unsigned offset, unsigned value); +void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags); int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon); void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *draw); diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index 88aff0e..5b26d1f 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -298,6 +298,8 @@ void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index, struct pipe_resource *buffer); void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info); +void r600_texture_barrier(struct pipe_context *ctx); + /* * common helpers */ diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index d3adf03..e202056 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -934,6 +934,13 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx, } } +void r600_texture_barrier(struct pipe_context *ctx) +{ + struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx; + + r600_context_flush_all(rctx-ctx, S_0085F0_TC_ACTION_ENA(1)); +} + void r600_init_state_functions(struct r600_pipe_context *rctx) { rctx-context.create_blend_state = r600_create_blend_state; @@ -974,6 +981,7 @@ void r600_init_state_functions(struct r600_pipe_context *rctx) rctx-context.set_viewport_state = r600_set_viewport_state; rctx-context.sampler_view_destroy = r600_sampler_view_destroy; rctx-context.redefine_user_buffer = u_default_redefine_user_buffer; + rctx-context.texture_barrier = r600_texture_barrier; } void r600_init_config(struct r600_pipe_context *rctx) diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c b/src/gallium/winsys/r600/drm/r600_hw_context.c index 48bce81..7f8da12 100644 --- a/src/gallium/winsys/r600/drm/r600_hw_context.c +++ b/src/gallium/winsys/r600/drm/r600_hw_context.c @@ -771,6 +771,23 @@ static void rv6xx_context_surface_base_update(struct r600_context *ctx, } } +/* Flushes all surfaces */ +void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags) +{ + unsigned ndwords = 5; + + if ((ctx-pm4_dirty_cdwords + ndwords + ctx-pm4_cdwords) ctx-pm4_ndwords) { + /* need to flush */ + r600_context_flush(ctx); + } + + ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, ctx-predicate_drawing); + ctx-pm4[ctx-pm4_cdwords++] = flush_flags; /* CP_COHER_CNTL */ + ctx-pm4[ctx-pm4_cdwords++] = 0x; /* CP_COHER_SIZE */ + ctx-pm4[ctx-pm4_cdwords++] = 0; /* CP_COHER_BASE */ + ctx-pm4[ctx-pm4_cdwords++] = 0x000A; /* POLL_INTERVAL */ +} + void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags, unsigned flush_mask, struct r600_bo *rbo) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org
Mesa (master): nv50,nvc0: implement colour clamping controls
Module: Mesa Branch: master Commit: 8f060df60d1f5ad63a341e39f2ec5a0c3c452cf5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f060df60d1f5ad63a341e39f2ec5a0c3c452cf5 Author: Christoph Bumiller e0425...@student.tuwien.ac.at Date: Tue Mar 29 23:09:02 2011 +0200 nv50,nvc0: implement colour clamping controls --- src/gallium/drivers/nv50/nv50_3d.xml.h |2 +- src/gallium/drivers/nv50/nv50_context.h|4 ++- src/gallium/drivers/nv50/nv50_program.c|2 +- src/gallium/drivers/nv50/nv50_screen.c |2 + src/gallium/drivers/nv50/nv50_shader_state.c | 41 +++- src/gallium/drivers/nv50/nv50_state.c |3 ++ src/gallium/drivers/nv50/nv50_state_validate.c |2 +- src/gallium/drivers/nv50/nv50_stateobj.h |2 +- src/gallium/drivers/nvc0/nvc0_screen.c |4 +- src/gallium/drivers/nvc0/nvc0_shader_state.c |2 - src/gallium/drivers/nvc0/nvc0_state.c |4 ++ src/gallium/drivers/nvc0/nvc0_stateobj.h |2 +- 12 files changed, 59 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/nv50/nv50_3d.xml.h b/src/gallium/drivers/nv50/nv50_3d.xml.h index 9bb3211..92b97dd 100644 --- a/src/gallium/drivers/nv50/nv50_3d.xml.h +++ b/src/gallium/drivers/nv50/nv50_3d.xml.h @@ -1673,7 +1673,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define NV50_3D_MAP_SEMANTIC_0_BFC0_ID__SHIFT 8 #define NV50_3D_MAP_SEMANTIC_0_COLR_NR__MASK 0x00ff #define NV50_3D_MAP_SEMANTIC_0_COLR_NR__SHIFT 16 -#define NV50_3D_MAP_SEMANTIC_0_CLMP_EN 0xff00 +#define NV50_3D_MAP_SEMANTIC_0_CLMP_EN 0x0100 #define NV50_3D_MAP_SEMANTIC_1 0x1908 #define NV50_3D_MAP_SEMANTIC_1_CLIP_START__MASK 0x00ff diff --git a/src/gallium/drivers/nv50/nv50_context.h b/src/gallium/drivers/nv50/nv50_context.h index 46e6c22..f480f04 100644 --- a/src/gallium/drivers/nv50/nv50_context.h +++ b/src/gallium/drivers/nv50/nv50_context.h @@ -80,6 +80,8 @@ struct nv50_context { uint32_t instance_elts; /* bitmask of per-instance elements */ uint32_t instance_base; uint32_t interpolant_ctrl; + uint32_t semantic_color; + uint32_t semantic_psize; int32_t index_bias; boolean prim_restart; boolean point_sprite; @@ -183,7 +185,7 @@ void nv50_fragprog_validate(struct nv50_context *); void nv50_fp_linkage_validate(struct nv50_context *); void nv50_gp_linkage_validate(struct nv50_context *); void nv50_constbufs_validate(struct nv50_context *); -void nv50_sprite_coords_validate(struct nv50_context *); +void nv50_validate_derived_rs(struct nv50_context *); /* nv50_state.c */ extern void nv50_init_state_functions(struct nv50_context *); diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c index a63f9d8..37025a6 100644 --- a/src/gallium/drivers/nv50/nv50_program.c +++ b/src/gallium/drivers/nv50/nv50_program.c @@ -486,7 +486,7 @@ nv50_fragprog_prepare(struct nv50_translation_info *ti) ++nintp; } - p-fp.colors = (1 24) | 4; /* CLAMP, FFC0_ID = 4 */ + p-fp.colors = 4 NV50_3D_MAP_SEMANTIC_0_FFC0_ID__SHIFT; /* after HPOS */ for (i = 0; i p-in_nr; ++i) { int j = p-in[i].id; diff --git a/src/gallium/drivers/nv50/nv50_screen.c b/src/gallium/drivers/nv50/nv50_screen.c index 7690c80..9978d1e 100644 --- a/src/gallium/drivers/nv50/nv50_screen.c +++ b/src/gallium/drivers/nv50/nv50_screen.c @@ -108,6 +108,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) return 1; case PIPE_CAP_MAX_RENDER_TARGETS: return 8; + case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL: + return 1; case PIPE_CAP_TIMER_QUERY: case PIPE_CAP_OCCLUSION_QUERY: return 1; diff --git a/src/gallium/drivers/nv50/nv50_shader_state.c b/src/gallium/drivers/nv50/nv50_shader_state.c index bea9c09..82c346c 100644 --- a/src/gallium/drivers/nv50/nv50_shader_state.c +++ b/src/gallium/drivers/nv50/nv50_shader_state.c @@ -226,7 +226,7 @@ nv50_gmtyprog_validate(struct nv50_context *nv50) OUT_RING (chan, gp-code_base); } -void +static void nv50_sprite_coords_validate(struct nv50_context *nv50) { struct nouveau_channel *chan = nv50-screen-base.channel; @@ -282,6 +282,39 @@ nv50_sprite_coords_validate(struct nv50_context *nv50) OUT_RINGp (chan, pntc, 8); } +/* Validate state derived from shaders and the rasterizer cso. */ +void +nv50_validate_derived_rs(struct nv50_context *nv50) +{ + struct nouveau_channel *chan = nv50-screen-base.channel; + uint32_t color, psize; + + nv50_sprite_coords_validate(nv50); + + if (nv50-dirty NV50_NEW_FRAGPROG) + return; + psize = nv50-state.semantic_psize ~NV50_3D_MAP_SEMANTIC_3_PTSZ_EN__MASK; + color = nv50-state.semantic_color ~NV50_3D_MAP_SEMANTIC_0_CLMP_EN;
Mesa (7.10): st/mesa: Validate state before doing blits.
Module: Mesa Branch: 7.10 Commit: 7fcaf9ae80f82e37b82cfca367428730ebf097d5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7fcaf9ae80f82e37b82cfca367428730ebf097d5 Author: Henri Verbeet hverb...@gmail.com Date: Wed Mar 23 21:58:06 2011 +0100 st/mesa: Validate state before doing blits. Specifically, this ensures things like the front buffer actually exist. This fixes piglt fbo/fbo-sys-blit and fd.o bug 35483. Signed-off-by: Henri Verbeet hverb...@gmail.com (cherry picked from commit 5d7c27f5ec2f30c264dc2d53c4980970b3a13ee5) --- src/mesa/state_tracker/st_cb_blit.c |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_blit.c b/src/mesa/state_tracker/st_cb_blit.c index 06cee52..d9eb806 100644 --- a/src/mesa/state_tracker/st_cb_blit.c +++ b/src/mesa/state_tracker/st_cb_blit.c @@ -38,6 +38,7 @@ #include st_texture.h #include st_cb_blit.h #include st_cb_fbo.h +#include st_atom.h #include util/u_blit.h #include util/u_inlines.h @@ -75,6 +76,8 @@ st_BlitFramebuffer(struct gl_context *ctx, struct gl_framebuffer *readFB = ctx-ReadBuffer; struct gl_framebuffer *drawFB = ctx-DrawBuffer; + st_validate_state(st); + if (!_mesa_clip_blit(ctx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1)) { return; /* nothing to draw/blit */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel: Add IS_GT2 macro for recognizing Sandybridge GT2 systems.
Module: Mesa Branch: master Commit: ee8d182426d4ecda7b9f5089d19d36f7de2a4dfe URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ee8d182426d4ecda7b9f5089d19d36f7de2a4dfe Author: Kenneth Graunke kenn...@whitecape.org Date: Tue Mar 29 17:03:22 2011 -0700 intel: Add IS_GT2 macro for recognizing Sandybridge GT2 systems. Also, refactor IS_GEN6 to use the IS_GT1 and IS_GT2 macros. --- src/mesa/drivers/dri/intel/intel_chipset.h | 15 +++ 1 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_chipset.h b/src/mesa/drivers/dri/intel/intel_chipset.h index 4ff9140..a3f40ef 100644 --- a/src/mesa/drivers/dri/intel/intel_chipset.h +++ b/src/mesa/drivers/dri/intel/intel_chipset.h @@ -125,18 +125,17 @@ /* Compat macro for intel_decode.c */ #define IS_IRONLAKE(devid) IS_GEN5(devid) -#define IS_GEN6(devid) (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \ -devid == PCI_CHIP_SANDYBRIDGE_GT2 || \ -devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \ -devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \ -devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \ -devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS || \ -devid == PCI_CHIP_SANDYBRIDGE_S) - #define IS_GT1(devid) (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \ devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \ devid == PCI_CHIP_SANDYBRIDGE_S) +#define IS_GT2(devid) (devid == PCI_CHIP_SANDYBRIDGE_GT2 || \ +devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \ +devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \ +devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS) + +#define IS_GEN6(devid) (IS_GT1(devid) || IS_GT2(devid)) + #define IS_965(devid) (IS_GEN4(devid) || \ IS_G4X(devid) || \ IS_GEN5(devid) || \ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (7.9): u_blitter: remove invalid assertion
Module: Mesa Branch: 7.9 Commit: e3dcb53e6e7f27cd34ef109cc1120b60461d6e42 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e3dcb53e6e7f27cd34ef109cc1120b60461d6e42 Author: Marek Olšák mar...@gmail.com Date: Wed Mar 30 02:19:32 2011 +0200 u_blitter: remove invalid assertion --- src/gallium/auxiliary/util/u_blitter.c |2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index 7a16187..485d3c9 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -741,8 +741,6 @@ void util_blitter_copy_region(struct blitter_context *blitter, if (dst == src) { assert(!is_overlap(srcx, srcx + width, srcy, srcy + height, dstx, dstx + width, dsty, dsty + height)); - } else { - assert(dst-format == src-format); } assert(src-target PIPE_MAX_TEXTURE_TYPES); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (7.10): st/dri: Fix surfaceless gl using contexts with previous bound surfaces
Module: Mesa Branch: 7.10 Commit: 71b06c63ce4a5f58ceb72725d8320bc735997241 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=71b06c63ce4a5f58ceb72725d8320bc735997241 Author: Benjamin Franzke benjaminfran...@googlemail.com Date: Wed Feb 9 20:42:50 2011 +0100 st/dri: Fix surfaceless gl using contexts with previous bound surfaces ctx-dPriv might be != NULL then draw which is NULL is accessed: struct dri_drawable *draw = dri_drawable(driDrawPriv); [..] if (ctx-dPriv != driDrawPriv) { ctx-dPriv = driDrawPriv; draw-texture_stamp = driDrawPriv-lastStamp - 1; } Cherry-picked from 0acb31be171f01aec8b38ceaddf47b7da6dae2a0 Signed-off-by: Jakob Bornecrantz wallbra...@gmail.com --- .../state_trackers/dri/common/dri_context.c|8 ++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/dri/common/dri_context.c b/src/gallium/state_trackers/dri/common/dri_context.c index aef1892..fc68ee1 100644 --- a/src/gallium/state_trackers/dri/common/dri_context.c +++ b/src/gallium/state_trackers/dri/common/dri_context.c @@ -175,6 +175,11 @@ dri_make_current(__DRIcontext * cPriv, ++ctx-bind_count; + if (!driDrawPriv !driReadPriv) + return ctx-stapi-make_current(ctx-stapi, ctx-st, NULL, NULL); + else if (!driDrawPriv || !driReadPriv) + return GL_FALSE; + draw-context = ctx; if (ctx-dPriv != driDrawPriv) { ctx-dPriv = driDrawPriv; @@ -186,8 +191,7 @@ dri_make_current(__DRIcontext * cPriv, read-texture_stamp = driReadPriv-lastStamp - 1; } - ctx-stapi-make_current(ctx-stapi, ctx-st, - (draw) ? draw-base : NULL, (read) ? read-base : NULL); + ctx-stapi-make_current(ctx-stapi, ctx-st, draw-base, read-base); return GL_TRUE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit