vrend,tweaks: Add skeleton to set tweak flags

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
macos/master
Gert Wollny 6 years ago
parent ad673ed56b
commit 0f251aa0b2
  1. 2
      src/Makefile.am
  2. 6
      src/virgl_protocol.h
  3. 6
      src/vrend_renderer.c
  4. 2
      src/vrend_renderer.h
  5. 75
      src/vrend_tweaks.c
  6. 49
      src/vrend_tweaks.h

@ -35,6 +35,8 @@ libvrend_la_SOURCES = \
vrend_blitter.c \ vrend_blitter.c \
vrend_blitter.h \ vrend_blitter.h \
vrend_strbuf.h \ vrend_strbuf.h \
vrend_tweaks.c \
vrend_tweaks.h \
iov.c iov.c
if HAVE_EPOXY_EGL if HAVE_EPOXY_EGL

@ -592,4 +592,8 @@ enum virgl_context_cmd {
#define VIRGL_COPY_TRANSFER3D_SRC_RES_OFFSET 13 #define VIRGL_COPY_TRANSFER3D_SRC_RES_OFFSET 13
#define VIRGL_COPY_TRANSFER3D_SYNCHRONIZED 14 #define VIRGL_COPY_TRANSFER3D_SYNCHRONIZED 14
#endif enum vrend_tweak_type {
virgl_tweak_undefined
};
#endif

@ -593,6 +593,7 @@ struct vrend_sub_context {
struct vrend_abo abo[PIPE_MAX_HW_ATOMIC_BUFFERS]; struct vrend_abo abo[PIPE_MAX_HW_ATOMIC_BUFFERS];
uint32_t abo_used_mask; uint32_t abo_used_mask;
struct vrend_context_tweaks tweaks;
}; };
struct vrend_context { struct vrend_context {
@ -667,6 +668,11 @@ static inline bool vrend_format_is_ds(enum virgl_formats format)
return tex_conv_table[format].bindings & VIRGL_BIND_DEPTH_STENCIL; return tex_conv_table[format].bindings & VIRGL_BIND_DEPTH_STENCIL;
} }
struct vrend_context_tweaks *vrend_get_context_tweaks(struct vrend_context *ctx)
{
return &ctx->sub->tweaks;
}
bool vrend_format_is_emulated_alpha(enum virgl_formats format) bool vrend_format_is_emulated_alpha(enum virgl_formats format)
{ {
if (vrend_state.use_gles || !vrend_state.use_core_profile) if (vrend_state.use_gles || !vrend_state.use_core_profile)

@ -395,6 +395,8 @@ void vrend_renderer_get_rect(int resource_id, struct iovec *iov, unsigned int nu
void vrend_renderer_attach_res_ctx(int ctx_id, int resource_id); void vrend_renderer_attach_res_ctx(int ctx_id, int resource_id);
void vrend_renderer_detach_res_ctx(int ctx_id, int resource_id); void vrend_renderer_detach_res_ctx(int ctx_id, int resource_id);
struct vrend_context_tweaks *vrend_get_context_tweaks(struct vrend_context *ctx);
struct vrend_renderer_resource_info { struct vrend_renderer_resource_info {
uint32_t handle; uint32_t handle;
uint32_t format; uint32_t format;

@ -0,0 +1,75 @@
/**************************************************************************
*
* Copyright (C) 2018 Collabora Ltd
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
#include <string.h>
#include <stdlib.h>
#include "vrend_tweaks.h"
#include "vrend_debug.h"
#include "virgl_protocol.h"
inline static void get_tf3_samples_passed_factor(struct vrend_context_tweaks *ctx, void *params)
{
*(uint32_t *)params = ctx->tf3_samples_passed_factor;
}
bool vrend_get_tweak_is_active_with_params(struct vrend_context_tweaks *ctx, enum vrend_tweak_type t, void *params)
{
if (!(ctx->active_tweaks & (1u << t)))
return false;
return true;
}
bool vrend_get_tweak_is_active(struct vrend_context_tweaks *ctx, enum vrend_tweak_type t)
{
return (ctx->active_tweaks & (1u << t)) ? true : false;
}
const char *tweak_debug_table[] = {
[virgl_tweak_undefined] = "Undefined tweak"
};
static void set_tweak_and_params(struct vrend_context_tweaks *ctx,
enum vrend_tweak_type t, uint32_t value)
{
ctx->active_tweaks |= 1u << t;
}
static void set_tweak_and_params_from_string(struct vrend_context_tweaks *ctx,
enum vrend_tweak_type t, const char *value)
{
ctx->active_tweaks |= 1u << t;
(void)value;
}
/* we expect a string like tweak1:value,tweak2:value */
void vrend_set_active_tweaks(struct vrend_context_tweaks *ctx, uint32_t tweak_id, uint32_t value)
{
if (tweak_id < virgl_tweak_undefined) {
VREND_DEBUG(dbg_tweak, NULL, "Apply tweak '%s' = %u\n", tweak_debug_table[tweak_id], value);
set_tweak_and_params(ctx, tweak_id, value);
} else {
VREND_DEBUG(dbg_tweak, NULL, "Unknown tweak %d = %d sent\n", tweak_id, value);
}
}

@ -0,0 +1,49 @@
/**************************************************************************
*
* Copyright (C) 2018 Collabora Ltd
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
#ifndef VREND_TWEAKS_H
#define VREND_TWEAKS_H
#include "virgl_protocol.h"
#include <stdint.h>
#include <stdbool.h>
struct vrend_context_tweaks {
uint32_t active_tweaks;
int32_t tf3_samples_passed_factor;
};
bool vrend_get_tweak_is_active(struct vrend_context_tweaks *ctx,
enum vrend_tweak_type t);
bool vrend_get_tweak_is_active_with_params(struct vrend_context_tweaks *ctx,
enum vrend_tweak_type t, void *params);
void vrend_set_active_tweaks(struct vrend_context_tweaks *ctx, uint32_t tweak_id, uint32_t tweak_value);
void vrend_set_tweak_from_env(struct vrend_context_tweaks *ctx);
#endif // VREND_TWEAKS_H
Loading…
Cancel
Save