Mesa (master): lavapipe: resolve border-color when creating sampler
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Apr 19 14:11:56 UTC 2021
Module: Mesa
Branch: master
Commit: a20e0b8a97780392c0bbfd025860ed9027eafc08
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a20e0b8a97780392c0bbfd025860ed9027eafc08
Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date: Mon Apr 19 13:25:36 2021 +0200
lavapipe: resolve border-color when creating sampler
This is going to make it easier to implement the custom border-color
extension.
While we're moving the code, tweak the memset code a bit, so we don't do
any float-ism in the int-case. It doesn't change anything functionally,
just makes it slightly clearer what's going on here.
Reviewed-by: Joshua Ashton <joshua at froggi.es>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10320>
---
src/gallium/frontends/lavapipe/lvp_device.c | 28 ++++++++++++++++++++++++++++
src/gallium/frontends/lavapipe/lvp_execute.c | 26 ++------------------------
src/gallium/frontends/lavapipe/lvp_private.h | 1 +
3 files changed, 31 insertions(+), 24 deletions(-)
diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c
index 7f58d1d1d34..abdc68e35cc 100644
--- a/src/gallium/frontends/lavapipe/lvp_device.c
+++ b/src/gallium/frontends/lavapipe/lvp_device.c
@@ -1929,6 +1929,34 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateSampler(
VK_OBJECT_TYPE_SAMPLER);
sampler->create_info = *pCreateInfo;
+ switch (pCreateInfo->borderColor) {
+ case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
+ case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:
+ default:
+ memset(&sampler->border_color, 0, sizeof(union pipe_color_union));
+ break;
+ case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:
+ sampler->border_color.f[0] = sampler->border_color.f[1] =
+ sampler->border_color.f[2] = 0.0f;
+ sampler->border_color.f[3] = 1.0f;
+ break;
+ case VK_BORDER_COLOR_INT_OPAQUE_BLACK:
+ sampler->border_color.i[0] = sampler->border_color.i[1] =
+ sampler->border_color.i[2] = 0;
+ sampler->border_color.i[3] = 1;
+ break;
+ case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:
+ sampler->border_color.f[0] = sampler->border_color.f[1] =
+ sampler->border_color.f[2] = 1.0f;
+ sampler->border_color.f[3] = 1.0f;
+ break;
+ case VK_BORDER_COLOR_INT_OPAQUE_WHITE:
+ sampler->border_color.i[0] = sampler->border_color.i[1] =
+ sampler->border_color.i[2] = 1;
+ sampler->border_color.i[3] = 1;
+ break;
+ }
+
sampler->reduction_mode = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE;
if (reduction_mode_create_info)
sampler->reduction_mode = reduction_mode_create_info->reductionMode;
diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c
index 0a39a9d596f..e19acb7141c 100644
--- a/src/gallium/frontends/lavapipe/lvp_execute.c
+++ b/src/gallium/frontends/lavapipe/lvp_execute.c
@@ -781,30 +781,8 @@ static void fill_sampler(struct pipe_sampler_state *ss,
ss->compare_func = samp->create_info.compareOp;
ss->seamless_cube_map = true;
ss->reduction_mode = samp->reduction_mode;
-
- switch (samp->create_info.borderColor) {
- case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
- case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:
- default:
- memset(ss->border_color.f, 0, 4 * sizeof(float));
- break;
- case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:
- ss->border_color.f[0] = ss->border_color.f[1] = ss->border_color.f[2] = 0.0f;
- ss->border_color.f[3] = 1.0f;
- break;
- case VK_BORDER_COLOR_INT_OPAQUE_BLACK:
- ss->border_color.i[0] = ss->border_color.i[1] = ss->border_color.i[2] = 0;
- ss->border_color.i[3] = 1;
- break;
- case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:
- ss->border_color.f[0] = ss->border_color.f[1] = ss->border_color.f[2] = 1.0f;
- ss->border_color.f[3] = 1.0f;
- break;
- case VK_BORDER_COLOR_INT_OPAQUE_WHITE:
- ss->border_color.i[0] = ss->border_color.i[1] = ss->border_color.i[2] = 1;
- ss->border_color.i[3] = 1;
- break;
- }
+ memcpy(&ss->border_color, &samp->border_color,
+ sizeof(union pipe_color_union));
}
static void fill_sampler_stage(struct rendering_state *state,
diff --git a/src/gallium/frontends/lavapipe/lvp_private.h b/src/gallium/frontends/lavapipe/lvp_private.h
index d1e0b27ce31..86b2bf0264f 100644
--- a/src/gallium/frontends/lavapipe/lvp_private.h
+++ b/src/gallium/frontends/lavapipe/lvp_private.h
@@ -309,6 +309,7 @@ struct lvp_render_pass {
struct lvp_sampler {
struct vk_object_base base;
VkSamplerCreateInfo create_info;
+ union pipe_color_union border_color;
VkSamplerReductionMode reduction_mode;
uint32_t state[4];
};
More information about the mesa-commit
mailing list