[Piglit] [PATCH 17/17] ext_framebuffer_multisample: Use full value range for integer formats
Topi Pohjolainen
topi.pohjolainen at gmail.com
Tue Jul 18 19:16:42 UTC 2017
Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
.../draw-buffers-common.cpp | 39 ++++++++++++++++------
tests/util/sized-internalformats.h | 8 +++++
2 files changed, 36 insertions(+), 11 deletions(-)
diff --git a/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp b/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp
index 7ca2e1d22..9c95af8a1 100644
--- a/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp
+++ b/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp
@@ -22,6 +22,7 @@
*/
#include "draw-buffers-common.h"
+#include "sized-internalformats.h"
using namespace piglit_util_fbo;
/**
@@ -93,7 +94,6 @@ static bool is_dual_src_blending = false;
static GLenum draw_buffer_zero_format;
static const int num_components = 4; /* for RGBA formats */
-static const int num_color_bits = 8; /* for GL_RGBA & GL_RGBA8I formats */
static const float bg_depth = 0.8;
static const float bg_color[4] = {
@@ -303,11 +303,17 @@ free_data_arrays(void)
expected_color = NULL;
}
-void
-float_color_to_int_color(int *dst, float *src)
+static void
+float_color_to_int_color(int *dst, const float *src)
{
- float offset = 1 - (1 << (num_color_bits - 1));
- float scale = -2.0 * offset;
+ assert(is_buffer_zero_integer_format);
+
+ const GLenum format = resolve_int_fbo.config.color_internalformat;
+ const struct sized_internalformat *sized_fmt =
+ get_sized_internalformat(format);
+ const unsigned num_color_bits = get_channel_size(sized_fmt, R);
+ const float offset = 1 - (1 << (num_color_bits - 1));
+ const float scale = -2.0 * offset;
for (int j = 0; j < num_rects; ++j) {
for (int k = 0; k < num_components; ++k) {
@@ -317,6 +323,22 @@ float_color_to_int_color(int *dst, float *src)
}
}
+static void
+int_color_to_float_color(float *image, unsigned size)
+{
+ assert(is_buffer_zero_integer_format);
+
+ const GLenum format = resolve_int_fbo.config.color_internalformat;
+ const struct sized_internalformat *sized_fmt =
+ get_sized_internalformat(format);
+ const unsigned num_color_bits = get_channel_size(sized_fmt, R);
+ const float color_offset = 1.0 - (1 << (num_color_bits - 1));
+ const float color_scale = -2.0 * color_offset;
+
+ for (unsigned i = 0; i < size; ++i)
+ image[i] = (image[i] - color_offset) / color_scale;
+}
+
void
draw_pattern(bool sample_alpha_to_coverage,
bool sample_alpha_to_one,
@@ -732,13 +754,8 @@ draw_image_to_window_system_fb(int draw_buffer_count, bool rhs)
image[i] = tmp[i];
}
- /* Convert integer color data to float color data */
- float color_offset = 1.0 - (1 << (num_color_bits - 1));
- float color_scale = -2.0 * color_offset;
+ int_color_to_float_color(image, array_size);
- for (unsigned i = 0; i < array_size; ++i) {
- image[i] = (image[i] - color_offset) / color_scale;
- }
free(tmp);
}
else{
diff --git a/tests/util/sized-internalformats.h b/tests/util/sized-internalformats.h
index e71abf564..9416c29b5 100644
--- a/tests/util/sized-internalformats.h
+++ b/tests/util/sized-internalformats.h
@@ -20,6 +20,10 @@
* IN THE SOFTWARE.
*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* F=float, UN=unsigned normalized, SN=signed normalized, I=int,
* U=uint.
*
@@ -116,3 +120,7 @@ valid_for_gl_version(const struct required_format *format, int target_version);
void
setup_required_size_test(int argc, char **argv,
struct piglit_gl_test_config *config);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif
--
2.11.0
More information about the Piglit
mailing list