#include "main/api_validate.h"
#include "main/state.h"
+#include "util/format_srgb.h"
+
#include "vbo/vbo_context.h"
#include "drivers/common/meta.h"
struct gl_buffer_object *buf_obj;
struct gl_vertex_array_object *array_obj;
GLuint vao;
- GLuint vbo;
GLuint shader_prog;
GLint color_location;
};
memset(clear, 0, sizeof *clear);
_mesa_GenVertexArrays(1, &clear->vao);
_mesa_BindVertexArray(clear->vao);
- _mesa_CreateBuffers(1, &clear->vbo);
- clear->buf_obj = _mesa_lookup_bufferobj(ctx, clear->vbo);
- assert(clear->buf_obj != NULL);
+ clear->buf_obj = ctx->Driver.NewBufferObject(ctx, 0xDEADBEEF);
+ if (clear->buf_obj == NULL)
+ return false;
+
clear->array_obj = _mesa_lookup_vao(ctx, clear->vao);
assert(clear->array_obj != NULL);
_mesa_make_current(&brw->ctx, NULL, NULL);
_mesa_DeleteVertexArrays(1, &clear->vao);
- _mesa_DeleteBuffers(1, &clear->vbo);
+ _mesa_reference_buffer_object(&brw->ctx, &clear->buf_obj, NULL);
_mesa_DeleteProgram(clear->shader_prog);
free(clear);
override_color.f[3] = 1.0f;
}
+ /* Handle linear→SRGB conversion */
+ if (brw->ctx.Color.sRGBEnabled &&
+ _mesa_get_srgb_format_linear(mt->format) != mt->format) {
+ for (int i = 0; i < 3; i++) {
+ override_color.f[i] =
+ util_format_linear_to_srgb_float(override_color.f[i]);
+ }
+ }
+
if (brw->gen >= 9) {
mt->gen9_fast_clear_color = override_color;
} else {
struct rect fast_clear_rect)
{
assert(brw->gen >= 9);
- struct gl_context *ctx = &brw->ctx;
brw_bind_rep_write_shader(brw, (float *) fast_clear_color);
_mesa_meta_drawbuffers_from_bitfield(1 << index);
- brw_draw_rectlist(ctx, &fast_clear_rect, MAX2(1, fb->MaxNumLayers));
+ brw_draw_rectlist(brw, &fast_clear_rect, MAX2(1, fb->MaxNumLayers));
/* Now set the mcs we cleared to INTEL_FAST_CLEAR_STATE_CLEAR so we'll
* resolve them eventually.