bc = &sampler->border_color;
- /*
- * XXX HACK ALERT XXX
- *
- * The border colors need to be swizzled in a particular
- * format-dependent order. Even though samplers don't know about
- * formats, we can assume that with a GL state tracker, there's a
- * 1:1 correspondence between sampler and texture. Take advantage
- * of that knowledge.
- */
- if ((i >= tex->num_textures) || !tex->textures[i])
- continue;
-
- enum pipe_format format = tex->textures[i]->format;
+ enum pipe_format format = sampler->border_color_format;
const struct util_format_description *desc =
util_format_description(format);
bc = &sampler->border_color;
- /*
- * XXX HACK ALERT XXX
- *
- * The border colors need to be swizzled in a particular
- * format-dependent order. Even though samplers don't know about
- * formats, we can assume that with a GL state tracker, there's a
- * 1:1 correspondence between sampler and texture. Take advantage
- * of that knowledge.
- */
- if ((i >= tex->num_textures) || !tex->textures[i])
- continue;
-
- struct pipe_sampler_view *view = tex->textures[i];
- enum pipe_format format = view->format;
+ enum pipe_format format = sampler->border_color_format;
const struct util_format_description *desc =
util_format_description(format);
if (!sampler)
continue;
- /*
- * XXX HACK ALERT XXX
- *
- * The border colors need to be swizzled in a particular
- * format-dependent order. Even though samplers don't know about
- * formats, we can assume that with a GL state tracker, there's a
- * 1:1 correspondence between sampler and texture. Take advantage
- * of that knowledge.
- */
- if (i < tex->num_textures && tex->textures[i]) {
- const struct util_format_description *desc =
- util_format_description(tex->textures[i]->format);
- for (j = 0; j < 4; j++) {
- if (desc->swizzle[j] >= 4)
- continue;
-
- const struct util_format_channel_description *chan =
+ enum pipe_format format = sampler->border_color_format;
+
+ const struct util_format_description *desc =
+ util_format_description(sampler->border_color_format);
+ for (j = 0; j < 4; j++) {
+ if (desc->swizzle[j] >= 4)
+ continue;
+
+ const struct util_format_channel_description *chan =
&desc->channel[desc->swizzle[j]];
- uint8_t native = desc->swizzle[j];
- /* Special cases:
- * - X24S8 is implemented with 8_8_8_8_UINT, so the 'native'
- * location is actually 0 rather than 1
- * - X32_S8X24_UINT has stencil with a secretly-S8_UINT resource
- * so again we want 0 rather than 1
- *
- * In both cases, there is only one non-void format, so we don't
- * have to be too careful.
- *
- * Note that this only affects a4xx -- a3xx did not support
- * stencil texturing, and a5xx+ don't use this helper.
- */
- if (tex->textures[i]->format == PIPE_FORMAT_X24S8_UINT ||
- tex->textures[i]->format == PIPE_FORMAT_X32_S8X24_UINT) {
- native = 0;
- }
-
- if (chan->pure_integer) {
- bcolor32[native + 4] = sampler->border_color.i[j];
- bcolor[native + 8] = sampler->border_color.i[j];
- } else {
- bcolor32[native] = fui(sampler->border_color.f[j]);
- bcolor[native] =
+ uint8_t native = desc->swizzle[j];
+ /* Special cases:
+ * - X24S8 is implemented with 8_8_8_8_UINT, so the 'native'
+ * location is actually 0 rather than 1
+ * - X32_S8X24_UINT has stencil with a secretly-S8_UINT resource
+ * so again we want 0 rather than 1
+ *
+ * In both cases, there is only one non-void format, so we don't
+ * have to be too careful.
+ *
+ * Note that this only affects a4xx -- a3xx did not support
+ * stencil texturing, and a5xx+ don't use this helper.
+ */
+ if (format == PIPE_FORMAT_X24S8_UINT ||
+ format == PIPE_FORMAT_X32_S8X24_UINT) {
+ native = 0;
+ }
+
+ if (chan->pure_integer) {
+ bcolor32[native + 4] = sampler->border_color.i[j];
+ bcolor[native + 8] = sampler->border_color.i[j];
+ } else {
+ bcolor32[native] = fui(sampler->border_color.f[j]);
+ bcolor[native] =
_mesa_float_to_half(sampler->border_color.f[j]);
- }
}
}
}