On 02/06/2015 02:32 PM, Kenneth Graunke wrote: > This should have no effect, but will make it easier to implement other > bug fixes. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > Cc: Chris Forbes <chr...@ijw.co.nz> > Cc: mesa-sta...@lists.freedesktop.org > --- > src/mesa/drivers/dri/i965/brw_sampler_state.c | 107 > +++++++++++++------------- > 1 file changed, 54 insertions(+), 53 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_sampler_state.c > b/src/mesa/drivers/dri/i965/brw_sampler_state.c > index 0fe0853..c6a8ab1 100644 > --- a/src/mesa/drivers/dri/i965/brw_sampler_state.c > +++ b/src/mesa/drivers/dri/i965/brw_sampler_state.c > @@ -208,7 +208,9 @@ upload_default_color(struct brw_context *brw, > struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; > struct gl_texture_object *texObj = texUnit->_Current; > struct gl_texture_image *firstImage = texObj->Image[0][texObj->BaseLevel]; > - float color[4]; > + union gl_color_union color; > + > + unsigned one = float_as_int(1.0);
const? Either way, this patch is Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> > > switch (firstImage->_BaseFormat) { > case GL_DEPTH_COMPONENT: > @@ -216,40 +218,40 @@ upload_default_color(struct brw_context *brw, > * R channel, while the hardware uses A. Spam R into all the > * channels for safety. > */ > - color[0] = sampler->BorderColor.f[0]; > - color[1] = sampler->BorderColor.f[0]; > - color[2] = sampler->BorderColor.f[0]; > - color[3] = sampler->BorderColor.f[0]; > + color.ui[0] = sampler->BorderColor.ui[0]; > + color.ui[1] = sampler->BorderColor.ui[0]; > + color.ui[2] = sampler->BorderColor.ui[0]; > + color.ui[3] = sampler->BorderColor.ui[0]; > break; > case GL_ALPHA: > - color[0] = 0.0; > - color[1] = 0.0; > - color[2] = 0.0; > - color[3] = sampler->BorderColor.f[3]; > + color.ui[0] = 0u; > + color.ui[1] = 0u; > + color.ui[2] = 0u; > + color.ui[3] = sampler->BorderColor.ui[3]; > break; > case GL_INTENSITY: > - color[0] = sampler->BorderColor.f[0]; > - color[1] = sampler->BorderColor.f[0]; > - color[2] = sampler->BorderColor.f[0]; > - color[3] = sampler->BorderColor.f[0]; > + color.ui[0] = sampler->BorderColor.ui[0]; > + color.ui[1] = sampler->BorderColor.ui[0]; > + color.ui[2] = sampler->BorderColor.ui[0]; > + color.ui[3] = sampler->BorderColor.ui[0]; > break; > case GL_LUMINANCE: > - color[0] = sampler->BorderColor.f[0]; > - color[1] = sampler->BorderColor.f[0]; > - color[2] = sampler->BorderColor.f[0]; > - color[3] = 1.0; > + color.ui[0] = sampler->BorderColor.ui[0]; > + color.ui[1] = sampler->BorderColor.ui[0]; > + color.ui[2] = sampler->BorderColor.ui[0]; > + color.ui[3] = one; > break; > case GL_LUMINANCE_ALPHA: > - color[0] = sampler->BorderColor.f[0]; > - color[1] = sampler->BorderColor.f[0]; > - color[2] = sampler->BorderColor.f[0]; > - color[3] = sampler->BorderColor.f[3]; > + color.ui[0] = sampler->BorderColor.ui[0]; > + color.ui[1] = sampler->BorderColor.ui[0]; > + color.ui[2] = sampler->BorderColor.ui[0]; > + color.ui[3] = sampler->BorderColor.ui[3]; > break; > default: > - color[0] = sampler->BorderColor.f[0]; > - color[1] = sampler->BorderColor.f[1]; > - color[2] = sampler->BorderColor.f[2]; > - color[3] = sampler->BorderColor.f[3]; > + color.ui[0] = sampler->BorderColor.ui[0]; > + color.ui[1] = sampler->BorderColor.ui[1]; > + color.ui[2] = sampler->BorderColor.ui[2]; > + color.ui[3] = sampler->BorderColor.ui[3]; > break; > } > > @@ -258,18 +260,17 @@ upload_default_color(struct brw_context *brw, > * the border color alpha to 1.0 in that case. > */ > if (firstImage->_BaseFormat == GL_RGB) > - color[3] = 1.0; > + color.ui[3] = one; > > if (brw->gen >= 8) { > /* On Broadwell, the border color is represented as four 32-bit floats, > * integers, or unsigned values, interpreted according to the surface > - * format. This matches the sampler->BorderColor union exactly. Since > - * we use floats both here and in the above reswizzling code, we > preserve > - * the original bit pattern. So we actually handle all three formats. > + * format. This matches the sampler->BorderColor union exactly; just > + * memcpy the values. > */ > - float *sdc = brw_state_batch(brw, AUB_TRACE_SAMPLER_DEFAULT_COLOR, > - 4 * 4, 64, sdc_offset); > - COPY_4FV(sdc, color); > + uint32_t *sdc = brw_state_batch(brw, AUB_TRACE_SAMPLER_DEFAULT_COLOR, > + 4 * 4, 64, sdc_offset); > + memcpy(sdc, color.ui, 4 * 4); > } else if (brw->gen == 5 || brw->gen == 6) { > struct gen5_sampler_default_color *sdc; > > @@ -278,39 +279,39 @@ upload_default_color(struct brw_context *brw, > > memset(sdc, 0, sizeof(*sdc)); > > - UNCLAMPED_FLOAT_TO_UBYTE(sdc->ub[0], color[0]); > - UNCLAMPED_FLOAT_TO_UBYTE(sdc->ub[1], color[1]); > - UNCLAMPED_FLOAT_TO_UBYTE(sdc->ub[2], color[2]); > - UNCLAMPED_FLOAT_TO_UBYTE(sdc->ub[3], color[3]); > + UNCLAMPED_FLOAT_TO_UBYTE(sdc->ub[0], color.f[0]); > + UNCLAMPED_FLOAT_TO_UBYTE(sdc->ub[1], color.f[1]); > + UNCLAMPED_FLOAT_TO_UBYTE(sdc->ub[2], color.f[2]); > + UNCLAMPED_FLOAT_TO_UBYTE(sdc->ub[3], color.f[3]); > > - UNCLAMPED_FLOAT_TO_USHORT(sdc->us[0], color[0]); > - UNCLAMPED_FLOAT_TO_USHORT(sdc->us[1], color[1]); > - UNCLAMPED_FLOAT_TO_USHORT(sdc->us[2], color[2]); > - UNCLAMPED_FLOAT_TO_USHORT(sdc->us[3], color[3]); > + UNCLAMPED_FLOAT_TO_USHORT(sdc->us[0], color.f[0]); > + UNCLAMPED_FLOAT_TO_USHORT(sdc->us[1], color.f[1]); > + UNCLAMPED_FLOAT_TO_USHORT(sdc->us[2], color.f[2]); > + UNCLAMPED_FLOAT_TO_USHORT(sdc->us[3], color.f[3]); > > - UNCLAMPED_FLOAT_TO_SHORT(sdc->s[0], color[0]); > - UNCLAMPED_FLOAT_TO_SHORT(sdc->s[1], color[1]); > - UNCLAMPED_FLOAT_TO_SHORT(sdc->s[2], color[2]); > - UNCLAMPED_FLOAT_TO_SHORT(sdc->s[3], color[3]); > + UNCLAMPED_FLOAT_TO_SHORT(sdc->s[0], color.f[0]); > + UNCLAMPED_FLOAT_TO_SHORT(sdc->s[1], color.f[1]); > + UNCLAMPED_FLOAT_TO_SHORT(sdc->s[2], color.f[2]); > + UNCLAMPED_FLOAT_TO_SHORT(sdc->s[3], color.f[3]); > > - sdc->hf[0] = _mesa_float_to_half(color[0]); > - sdc->hf[1] = _mesa_float_to_half(color[1]); > - sdc->hf[2] = _mesa_float_to_half(color[2]); > - sdc->hf[3] = _mesa_float_to_half(color[3]); > + sdc->hf[0] = _mesa_float_to_half(color.f[0]); > + sdc->hf[1] = _mesa_float_to_half(color.f[1]); > + sdc->hf[2] = _mesa_float_to_half(color.f[2]); > + sdc->hf[3] = _mesa_float_to_half(color.f[3]); > > sdc->b[0] = sdc->s[0] >> 8; > sdc->b[1] = sdc->s[1] >> 8; > sdc->b[2] = sdc->s[2] >> 8; > sdc->b[3] = sdc->s[3] >> 8; > > - sdc->f[0] = color[0]; > - sdc->f[1] = color[1]; > - sdc->f[2] = color[2]; > - sdc->f[3] = color[3]; > + sdc->f[0] = color.f[0]; > + sdc->f[1] = color.f[1]; > + sdc->f[2] = color.f[2]; > + sdc->f[3] = color.f[3]; > } else { > float *sdc = brw_state_batch(brw, AUB_TRACE_SAMPLER_DEFAULT_COLOR, > 4 * 4, 32, sdc_offset); > - memcpy(sdc, color, 4 * 4); > + memcpy(sdc, color.f, 4 * 4); > } > } > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev