diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c index 9eb8539..99bf8a0 100644 --- a/src/gallium/drivers/r300/r300_state.c +++ b/src/gallium/drivers/r300/r300_state.c @@ -1076,7 +1076,7 @@ r300_create_sampler_view(struct pipe_context *pipe, * everywhere. And do testing! */ view->format = tex->tx_format; view->format.format1 |= r300_translate_texformat(templ->format, - 0); /*swizzle);*/ + swizzle); if (r300_screen(pipe->screen)->caps.is_r500) { view->format.format2 |= r500_tx_format_msb_bit(templ->format); } diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index 8bebeac..86dc8c6 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -147,7 +147,7 @@ uint32_t r300_translate_texformat(enum pipe_format format, /* Add swizzle. */ if (!swizzle) { swizzle = desc->swizzle; - } /*else { + } else { if (swizzle[0] != desc->swizzle[0] || swizzle[1] != desc->swizzle[1] || swizzle[2] != desc->swizzle[2] || @@ -161,9 +161,10 @@ uint32_t r300_translate_texformat(enum pipe_format format, n[swizzle[0]], n[swizzle[1]], n[swizzle[2]], n[swizzle[3]]); } - }*/ + } for (i = 0; i < 4; i++) { + fprintf(stderr,"%d %d\n", i, swizzle[i]); switch (swizzle[i]) { case UTIL_FORMAT_SWIZZLE_X: case UTIL_FORMAT_SWIZZLE_NONE: @@ -188,6 +189,7 @@ uint32_t r300_translate_texformat(enum pipe_format format, return ~0; /* Unsupported. */ } } + fprintf(stderr,"%x\n", result); /* S3TC formats. */ if (desc->layout == UTIL_FORMAT_LAYOUT_S3TC) { diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c index f4294ac..1c7b573 100644 --- a/src/mesa/state_tracker/st_atom_texture.c +++ b/src/mesa/state_tracker/st_atom_texture.c @@ -33,6 +33,7 @@ #include "main/macros.h" +#include "shader/prog_instruction.h" #include "st_context.h" #include "st_atom.h" @@ -86,8 +87,15 @@ update_textures(struct st_context *st) st->state.num_textures = su + 1; sampler_view = st_get_texture_sampler_view(stObj, pipe); - } + /* set the sampler view swizzles */ + if (texObj->_Swizzle != SWIZZLE_NOOP) { + sampler_view->swizzle_r = GET_SWZ(texObj->_Swizzle, 0); + sampler_view->swizzle_g = GET_SWZ(texObj->_Swizzle, 1); + sampler_view->swizzle_b = GET_SWZ(texObj->_Swizzle, 2); + sampler_view->swizzle_a = GET_SWZ(texObj->_Swizzle, 3); + } + } /* if (pt) { printf("%s su=%u non-null\n", __FUNCTION__, su); diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index b2045cf..06edf72 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -195,6 +195,7 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE; ctx->Extensions.EXT_texture_lod_bias = GL_TRUE; ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE; + ctx->Extensions.EXT_texture_swizzle = GL_TRUE; ctx->Extensions.APPLE_vertex_array_object = GL_TRUE;