aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkihiko Odaki <akihiko.odaki@gmail.com>2021-02-05 21:40:25 +0900
committerAkihiko Odaki <akihiko.odaki@gmail.com>2021-02-23 22:39:04 +0900
commit0bf0fa4f8a688f4b5dcc2b4965b1749aa29f5e7a (patch)
tree5a730c6dcda58b5d81a19f99b8fb3a92f244fa12
parent7e7a4e72a1fc3cd97377cc19e372948b39928c51 (diff)
downloadvirglrenderer-0bf0fa4f8a688f4b5dcc2b4965b1749aa29f5e7a.tar.gz
Align sampler feature detections to Epoxy
Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com> Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
-rw-r--r--src/vrend_renderer.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
index 91e69f5a..df766c8a 100644
--- a/src/vrend_renderer.c
+++ b/src/vrend_renderer.c
@@ -166,6 +166,7 @@ enum features_id
feat_sample_mask,
feat_sample_shading,
feat_samplers,
+ feat_sampler_border_colors,
feat_shader_clock,
feat_separate_shader_objects,
feat_ssbo,
@@ -262,6 +263,7 @@ static const struct {
FEAT(sample_mask, 32, 31, "GL_ARB_texture_multisample" ),
FEAT(sample_shading, 40, 32, "GL_ARB_sample_shading", "GL_OES_sample_shading" ),
FEAT(samplers, 33, 30, "GL_ARB_sampler_objects" ),
+ FEAT(sampler_border_colors, 33, 32, "GL_ARB_sampler_objects", "GL_EXT_texture_border_clamp", "GL_OES_texture_border_clamp" ),
FEAT(separate_shader_objects, 41, 31, "GL_ARB_seperate_shader_objects"),
FEAT(shader_clock, UNAVAIL, UNAVAIL, "GL_ARB_shader_clock" ),
FEAT(ssbo, 43, 31, "GL_ARB_shader_storage_buffer_object" ),
@@ -274,7 +276,7 @@ static const struct {
FEAT(texture_barrier, 45, UNAVAIL, "GL_ARB_texture_barrier" ),
FEAT(texture_buffer_range, 43, 32, "GL_ARB_texture_buffer_range" ),
FEAT(texture_gather, 40, 31, "GL_ARB_texture_gather" ),
- FEAT(texture_multisample, 32, 30, "GL_ARB_texture_multisample" ),
+ FEAT(texture_multisample, 32, 31, "GL_ARB_texture_multisample" ),
FEAT(texture_query_lod, 40, UNAVAIL, "GL_ARB_texture_query_lod", "GL_EXT_texture_query_lod"),
FEAT(texture_srgb_decode, UNAVAIL, UNAVAIL, "GL_EXT_texture_sRGB_decode" ),
FEAT(texture_storage, 42, 30, "GL_ARB_texture_storage" ),
@@ -1996,6 +1998,16 @@ static inline GLenum convert_min_filter(unsigned int filter, unsigned int mip_fi
return 0;
}
+static void apply_sampler_border_color(GLuint sampler,
+ const GLuint colors[static 4])
+{
+ if (has_feature(feat_sampler_border_colors)) {
+ glSamplerParameterIuiv(sampler, GL_TEXTURE_BORDER_COLOR, colors);
+ } else if (colors[0] || colors[1] || colors[2] || colors[3]) {
+ vrend_printf("sampler border color setting requested but not supported\n");
+ }
+}
+
int vrend_create_sampler_state(struct vrend_context *ctx,
uint32_t handle,
struct pipe_sampler_state *templ)
@@ -2036,7 +2048,7 @@ int vrend_create_sampler_state(struct vrend_context *ctx,
}
- glSamplerParameterIuiv(state->ids[i], GL_TEXTURE_BORDER_COLOR, templ->border_color.ui);
+ apply_sampler_border_color(state->ids[i], templ->border_color.ui);
glSamplerParameteri(state->ids[i], GL_TEXTURE_SRGB_DECODE_EXT, i == 0 ? GL_SKIP_DECODE_EXT : GL_DECODE_EXT);
}
}
@@ -5710,11 +5722,11 @@ static void vrend_apply_sampler_state(struct vrend_sub_context *sub_ctx,
border_color = state->border_color;
border_color.ui[0] = border_color.ui[3];
border_color.ui[3] = 0;
- glSamplerParameterIuiv(sampler, GL_TEXTURE_BORDER_COLOR, border_color.ui);
+ apply_sampler_border_color(sampler, border_color.ui);
} else {
union pipe_color_union border_color;
if (get_swizzled_border_color(tview->format, &state->border_color, &border_color))
- glSamplerParameterIuiv(sampler, GL_TEXTURE_BORDER_COLOR, border_color.ui);
+ apply_sampler_border_color(sampler, border_color.ui);
}
glBindSampler(sampler_id, sampler);
@@ -6399,6 +6411,10 @@ static int check_resource_valid(const struct vrend_renderer_resource_create_args
snprintf(errmsg, 256, "Multisample textures don't support mipmaps");
return -1;
}
+ if (!format_can_texture_storage && vrend_state.use_gles) {
+ snprintf(errmsg, 256, "Unsupported multisample texture format %d", args->format);
+ return -1;
+ }
}
if (args->last_level > 0) {