mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
llvmpipe: asst. clean-ups in lp_screen.[ch]
Signed-off-by: Brian Paul <brianp@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19289>
This commit is contained in:
parent
36df3d9b6f
commit
49ab7d19bd
2 changed files with 110 additions and 71 deletions
|
|
@ -1,8 +1,8 @@
|
|||
/**************************************************************************
|
||||
*
|
||||
*
|
||||
* Copyright 2008 VMware, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* 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
|
||||
|
|
@ -10,11 +10,11 @@
|
|||
* distribute, sub license, 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 (including the
|
||||
* next paragraph) 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 NON-INFRINGEMENT.
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
* 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.
|
||||
*
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
|
|
@ -57,16 +57,17 @@
|
|||
|
||||
#include "nir.h"
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
int LP_DEBUG = 0;
|
||||
|
||||
static const struct debug_named_value lp_debug_flags[] = {
|
||||
{ "pipe", DEBUG_PIPE, NULL },
|
||||
{ "tgsi", DEBUG_TGSI, NULL },
|
||||
{ "tex", DEBUG_TEX, NULL },
|
||||
{ "setup", DEBUG_SETUP, NULL },
|
||||
{ "rast", DEBUG_RAST, NULL },
|
||||
{ "query", DEBUG_QUERY, NULL },
|
||||
{ "pipe", DEBUG_PIPE, NULL },
|
||||
{ "tgsi", DEBUG_TGSI, NULL },
|
||||
{ "tex", DEBUG_TEX, NULL },
|
||||
{ "setup", DEBUG_SETUP, NULL },
|
||||
{ "rast", DEBUG_RAST, NULL },
|
||||
{ "query", DEBUG_QUERY, NULL },
|
||||
{ "screen", DEBUG_SCREEN, NULL },
|
||||
{ "counters", DEBUG_COUNTERS, NULL },
|
||||
{ "scene", DEBUG_SCENE, NULL },
|
||||
|
|
@ -265,7 +266,6 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
case PIPE_CAP_QUERY_SO_OVERFLOW:
|
||||
case PIPE_CAP_TGSI_DIV:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
return 0xFFFFFFFF;
|
||||
case PIPE_CAP_DEVICE_ID:
|
||||
|
|
@ -335,7 +335,6 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
* draw module's state, which is per-context.
|
||||
*/
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_GS_INVOCATIONS:
|
||||
return 32;
|
||||
case PIPE_CAP_MAX_SHADER_BUFFER_SIZE_UINT:
|
||||
|
|
@ -376,17 +375,19 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
llvmpipe_get_shader_param(struct pipe_screen *screen,
|
||||
enum pipe_shader_type shader,
|
||||
enum pipe_shader_cap param)
|
||||
{
|
||||
struct llvmpipe_screen *lscreen = llvmpipe_screen(screen);
|
||||
switch(shader)
|
||||
{
|
||||
switch (shader) {
|
||||
case PIPE_SHADER_COMPUTE:
|
||||
if ((lscreen->allow_cl) && param == PIPE_SHADER_CAP_SUPPORTED_IRS)
|
||||
return (1 << PIPE_SHADER_IR_TGSI) | (1 << PIPE_SHADER_IR_NIR) | (1 << PIPE_SHADER_IR_NIR_SERIALIZED);
|
||||
return ((1 << PIPE_SHADER_IR_TGSI) |
|
||||
(1 << PIPE_SHADER_IR_NIR) |
|
||||
(1 << PIPE_SHADER_IR_NIR_SERIALIZED));
|
||||
FALLTHROUGH;
|
||||
case PIPE_SHADER_FRAGMENT:
|
||||
if (param == PIPE_SHADER_CAP_PREFERRED_IR) {
|
||||
|
|
@ -395,7 +396,6 @@ llvmpipe_get_shader_param(struct pipe_screen *screen,
|
|||
else
|
||||
return PIPE_SHADER_IR_NIR;
|
||||
}
|
||||
|
||||
return gallivm_get_shader_param(param);
|
||||
case PIPE_SHADER_TESS_CTRL:
|
||||
case PIPE_SHADER_TESS_EVAL:
|
||||
|
|
@ -411,7 +411,6 @@ llvmpipe_get_shader_param(struct pipe_screen *screen,
|
|||
else
|
||||
return PIPE_SHADER_IR_NIR;
|
||||
}
|
||||
|
||||
switch (param) {
|
||||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
|
||||
/* At this time, the draw module and llvmpipe driver only
|
||||
|
|
@ -435,6 +434,7 @@ llvmpipe_get_shader_param(struct pipe_screen *screen,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
static float
|
||||
llvmpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
||||
{
|
||||
|
|
@ -443,7 +443,7 @@ llvmpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
|||
case PIPE_CAPF_MIN_LINE_WIDTH_AA:
|
||||
case PIPE_CAPF_MIN_POINT_SIZE:
|
||||
case PIPE_CAPF_MIN_POINT_SIZE_AA:
|
||||
return 1;
|
||||
return 1.0;
|
||||
case PIPE_CAPF_POINT_SIZE_GRANULARITY:
|
||||
case PIPE_CAPF_LINE_WIDTH_GRANULARITY:
|
||||
return 0.1;
|
||||
|
|
@ -471,6 +471,7 @@ llvmpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
|||
return 0.0;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
llvmpipe_get_compute_param(struct pipe_screen *_screen,
|
||||
enum pipe_shader_ir ir_type,
|
||||
|
|
@ -574,6 +575,7 @@ llvmpipe_get_compute_param(struct pipe_screen *_screen,
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
llvmpipe_get_driver_uuid(struct pipe_screen *pscreen, char *uuid)
|
||||
{
|
||||
|
|
@ -581,6 +583,7 @@ llvmpipe_get_driver_uuid(struct pipe_screen *pscreen, char *uuid)
|
|||
snprintf(uuid, PIPE_UUID_SIZE, "llvmpipeUUID");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
llvmpipe_get_device_uuid(struct pipe_screen *pscreen, char *uuid)
|
||||
{
|
||||
|
|
@ -588,6 +591,7 @@ llvmpipe_get_device_uuid(struct pipe_screen *pscreen, char *uuid)
|
|||
snprintf(uuid, PIPE_UUID_SIZE, "mesa" PACKAGE_VERSION);
|
||||
}
|
||||
|
||||
|
||||
static const struct nir_shader_compiler_options gallivm_nir_options = {
|
||||
.lower_scmp = true,
|
||||
.lower_flrp32 = true,
|
||||
|
|
@ -639,6 +643,7 @@ static const struct nir_shader_compiler_options gallivm_nir_options = {
|
|||
.use_scoped_barrier = true,
|
||||
};
|
||||
|
||||
|
||||
static char *
|
||||
llvmpipe_finalize_nir(struct pipe_screen *screen,
|
||||
void *nirptr)
|
||||
|
|
@ -648,6 +653,7 @@ llvmpipe_finalize_nir(struct pipe_screen *screen,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static inline const void *
|
||||
llvmpipe_get_compiler_options(struct pipe_screen *screen,
|
||||
enum pipe_shader_ir ir,
|
||||
|
|
@ -657,24 +663,24 @@ llvmpipe_get_compiler_options(struct pipe_screen *screen,
|
|||
return &gallivm_nir_options;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Query format support for creating a texture, drawing surface, etc.
|
||||
* \param format the format to test
|
||||
* \param type one of PIPE_TEXTURE, PIPE_SURFACE
|
||||
*/
|
||||
static bool
|
||||
llvmpipe_is_format_supported( struct pipe_screen *_screen,
|
||||
enum pipe_format format,
|
||||
enum pipe_texture_target target,
|
||||
unsigned sample_count,
|
||||
unsigned storage_sample_count,
|
||||
unsigned bind)
|
||||
llvmpipe_is_format_supported(struct pipe_screen *_screen,
|
||||
enum pipe_format format,
|
||||
enum pipe_texture_target target,
|
||||
unsigned sample_count,
|
||||
unsigned storage_sample_count,
|
||||
unsigned bind)
|
||||
{
|
||||
struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
|
||||
struct sw_winsys *winsys = screen->winsys;
|
||||
const struct util_format_description *format_desc;
|
||||
|
||||
format_desc = util_format_description(format);
|
||||
const struct util_format_description *format_desc =
|
||||
util_format_description(format);
|
||||
|
||||
assert(target == PIPE_BUFFER ||
|
||||
target == PIPE_TEXTURE_1D ||
|
||||
|
|
@ -694,9 +700,9 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
|
|||
/* this is a lie actually other formats COULD exist where we would fail */
|
||||
if (format_desc->nr_channels < 3)
|
||||
return false;
|
||||
}
|
||||
else if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_RGB)
|
||||
} else if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_RGB) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (format_desc->layout != UTIL_FORMAT_LAYOUT_PLAIN &&
|
||||
format != PIPE_FORMAT_R11G11B10_FLOAT)
|
||||
|
|
@ -781,7 +787,8 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
|
|||
*/
|
||||
int c = util_format_get_first_non_void_channel(format_desc->format);
|
||||
if (c >= 0) {
|
||||
if (format_desc->channel[c].pure_integer && format_desc->channel[c].size == 64)
|
||||
if (format_desc->channel[c].pure_integer &&
|
||||
format_desc->channel[c].size == 64)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -792,7 +799,7 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
|
|||
return false;
|
||||
|
||||
if (bind & PIPE_BIND_DISPLAY_TARGET) {
|
||||
if(!winsys->is_displaytarget_format_supported(winsys, bind, format))
|
||||
if (!winsys->is_displaytarget_format_supported(winsys, bind, format))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -823,8 +830,6 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void
|
||||
llvmpipe_flush_frontbuffer(struct pipe_screen *_screen,
|
||||
struct pipe_context *_pipe,
|
||||
|
|
@ -841,13 +846,16 @@ llvmpipe_flush_frontbuffer(struct pipe_screen *_screen,
|
|||
|
||||
if (texture->dt) {
|
||||
if (_pipe)
|
||||
llvmpipe_flush_resource(_pipe, resource, 0, true, true, false, "frontbuffer");
|
||||
winsys->displaytarget_display(winsys, texture->dt, context_private, sub_box);
|
||||
llvmpipe_flush_resource(_pipe, resource, 0, true, true,
|
||||
false, "frontbuffer");
|
||||
winsys->displaytarget_display(winsys, texture->dt,
|
||||
context_private, sub_box);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
llvmpipe_destroy_screen( struct pipe_screen *_screen )
|
||||
llvmpipe_destroy_screen(struct pipe_screen *_screen)
|
||||
{
|
||||
struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
|
||||
struct sw_winsys *winsys = screen->winsys;
|
||||
|
|
@ -861,10 +869,11 @@ llvmpipe_destroy_screen( struct pipe_screen *_screen )
|
|||
lp_jit_screen_cleanup(screen);
|
||||
|
||||
if (LP_DEBUG & DEBUG_CACHE_STATS)
|
||||
printf("disk shader cache: hits = %u, misses = %u\n", screen->num_disk_shader_cache_hits,
|
||||
printf("disk shader cache: hits = %u, misses = %u\n",
|
||||
screen->num_disk_shader_cache_hits,
|
||||
screen->num_disk_shader_cache_misses);
|
||||
disk_cache_destroy(screen->disk_shader_cache);
|
||||
if(winsys->destroy)
|
||||
if (winsys->destroy)
|
||||
winsys->destroy(winsys);
|
||||
|
||||
glsl_type_singleton_decref();
|
||||
|
|
@ -875,8 +884,6 @@ llvmpipe_destroy_screen( struct pipe_screen *_screen )
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Fence reference counting.
|
||||
*/
|
||||
|
|
@ -915,24 +922,30 @@ llvmpipe_fence_finish(struct pipe_screen *screen,
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
static uint64_t
|
||||
llvmpipe_get_timestamp(struct pipe_screen *_screen)
|
||||
{
|
||||
return os_time_get_nano();
|
||||
}
|
||||
|
||||
static void update_cache_sha1_cpu(struct mesa_sha1 *ctx)
|
||||
|
||||
static void
|
||||
update_cache_sha1_cpu(struct mesa_sha1 *ctx)
|
||||
{
|
||||
const struct util_cpu_caps_t *cpu_caps = util_get_cpu_caps();
|
||||
/*
|
||||
* Don't need the cpu cache affinity stuff. The rest
|
||||
* is contained in first 5 dwords.
|
||||
*/
|
||||
STATIC_ASSERT(offsetof(struct util_cpu_caps_t, num_L3_caches) == 5 * sizeof(uint32_t));
|
||||
STATIC_ASSERT(offsetof(struct util_cpu_caps_t, num_L3_caches)
|
||||
== 5 * sizeof(uint32_t));
|
||||
_mesa_sha1_update(ctx, cpu_caps, 5 * sizeof(uint32_t));
|
||||
}
|
||||
|
||||
static void lp_disk_cache_create(struct llvmpipe_screen *screen)
|
||||
|
||||
static void
|
||||
lp_disk_cache_create(struct llvmpipe_screen *screen)
|
||||
{
|
||||
struct mesa_sha1 ctx;
|
||||
unsigned gallivm_perf = gallivm_get_perf_flags();
|
||||
|
|
@ -952,25 +965,31 @@ static void lp_disk_cache_create(struct llvmpipe_screen *screen)
|
|||
screen->disk_shader_cache = disk_cache_create("llvmpipe", cache_id, 0);
|
||||
}
|
||||
|
||||
static struct disk_cache *lp_get_disk_shader_cache(struct pipe_screen *_screen)
|
||||
|
||||
static struct disk_cache *
|
||||
lp_get_disk_shader_cache(struct pipe_screen *_screen)
|
||||
{
|
||||
struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
|
||||
|
||||
return screen->disk_shader_cache;
|
||||
}
|
||||
|
||||
void lp_disk_cache_find_shader(struct llvmpipe_screen *screen,
|
||||
struct lp_cached_code *cache,
|
||||
unsigned char ir_sha1_cache_key[20])
|
||||
|
||||
void
|
||||
lp_disk_cache_find_shader(struct llvmpipe_screen *screen,
|
||||
struct lp_cached_code *cache,
|
||||
unsigned char ir_sha1_cache_key[20])
|
||||
{
|
||||
unsigned char sha1[CACHE_KEY_SIZE];
|
||||
|
||||
if (!screen->disk_shader_cache)
|
||||
return;
|
||||
disk_cache_compute_key(screen->disk_shader_cache, ir_sha1_cache_key, 20, sha1);
|
||||
disk_cache_compute_key(screen->disk_shader_cache, ir_sha1_cache_key,
|
||||
20, sha1);
|
||||
|
||||
size_t binary_size;
|
||||
uint8_t *buffer = disk_cache_get(screen->disk_shader_cache, sha1, &binary_size);
|
||||
uint8_t *buffer = disk_cache_get(screen->disk_shader_cache,
|
||||
sha1, &binary_size);
|
||||
if (!buffer) {
|
||||
cache->data_size = 0;
|
||||
p_atomic_inc(&screen->num_disk_shader_cache_misses);
|
||||
|
|
@ -981,18 +1000,23 @@ void lp_disk_cache_find_shader(struct llvmpipe_screen *screen,
|
|||
p_atomic_inc(&screen->num_disk_shader_cache_hits);
|
||||
}
|
||||
|
||||
void lp_disk_cache_insert_shader(struct llvmpipe_screen *screen,
|
||||
struct lp_cached_code *cache,
|
||||
unsigned char ir_sha1_cache_key[20])
|
||||
|
||||
void
|
||||
lp_disk_cache_insert_shader(struct llvmpipe_screen *screen,
|
||||
struct lp_cached_code *cache,
|
||||
unsigned char ir_sha1_cache_key[20])
|
||||
{
|
||||
unsigned char sha1[CACHE_KEY_SIZE];
|
||||
|
||||
if (!screen->disk_shader_cache || !cache->data_size || cache->dont_cache)
|
||||
return;
|
||||
disk_cache_compute_key(screen->disk_shader_cache, ir_sha1_cache_key, 20, sha1);
|
||||
disk_cache_put(screen->disk_shader_cache, sha1, cache->data, cache->data_size, NULL);
|
||||
disk_cache_compute_key(screen->disk_shader_cache, ir_sha1_cache_key,
|
||||
20, sha1);
|
||||
disk_cache_put(screen->disk_shader_cache, sha1, cache->data,
|
||||
cache->data_size, NULL);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
llvmpipe_screen_late_init(struct llvmpipe_screen *screen)
|
||||
{
|
||||
|
|
@ -1022,6 +1046,7 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a new pipe_screen object
|
||||
* Note: we're not presently subclassing pipe_screen (no llvmpipe_screen).
|
||||
|
|
@ -1079,16 +1104,20 @@ llvmpipe_create_screen(struct sw_winsys *winsys)
|
|||
|
||||
screen->allow_cl = !!getenv("LP_CL");
|
||||
screen->use_tgsi = (LP_DEBUG & DEBUG_TGSI_IR);
|
||||
screen->num_threads = util_get_cpu_caps()->nr_cpus > 1 ? util_get_cpu_caps()->nr_cpus : 0;
|
||||
screen->num_threads = util_get_cpu_caps()->nr_cpus > 1
|
||||
? util_get_cpu_caps()->nr_cpus : 0;
|
||||
#ifdef EMBEDDED_DEVICE
|
||||
screen->num_threads = MIN2(screen->num_threads, 2);
|
||||
#endif
|
||||
screen->num_threads = debug_get_num_option("LP_NUM_THREADS", screen->num_threads);
|
||||
screen->num_threads = debug_get_num_option("LP_NUM_THREADS",
|
||||
screen->num_threads);
|
||||
screen->num_threads = MIN2(screen->num_threads, LP_MAX_THREADS);
|
||||
|
||||
lp_build_init(); /* get lp_native_vector_width initialised */
|
||||
|
||||
snprintf(screen->renderer_string, sizeof(screen->renderer_string), "llvmpipe (LLVM " MESA_LLVM_VERSION_STRING ", %u bits)", lp_native_vector_width );
|
||||
snprintf(screen->renderer_string, sizeof(screen->renderer_string),
|
||||
"llvmpipe (LLVM " MESA_LLVM_VERSION_STRING ", %u bits)",
|
||||
lp_native_vector_width );
|
||||
|
||||
list_inithead(&screen->ctx_list);
|
||||
(void) mtx_init(&screen->ctx_mutex, mtx_plain);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**************************************************************************
|
||||
*
|
||||
*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* Copyright 2007 VMware, Inc.
|
||||
* All Rights Reserved.
|
||||
|
|
@ -11,11 +11,11 @@
|
|||
* distribute, sub license, 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 (including the
|
||||
* next paragraph) 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 NON-INFRINGEMENT.
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
* 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.
|
||||
*
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
/**
|
||||
|
|
@ -78,25 +78,35 @@ struct llvmpipe_screen
|
|||
unsigned num_disk_shader_cache_misses;
|
||||
};
|
||||
|
||||
void lp_disk_cache_find_shader(struct llvmpipe_screen *screen,
|
||||
struct lp_cached_code *cache,
|
||||
unsigned char ir_sha1_cache_key[20]);
|
||||
void lp_disk_cache_insert_shader(struct llvmpipe_screen *screen,
|
||||
struct lp_cached_code *cache,
|
||||
unsigned char ir_sha1_cache_key[20]);
|
||||
|
||||
bool llvmpipe_screen_late_init(struct llvmpipe_screen *screen);
|
||||
void
|
||||
lp_disk_cache_find_shader(struct llvmpipe_screen *screen,
|
||||
struct lp_cached_code *cache,
|
||||
unsigned char ir_sha1_cache_key[20]);
|
||||
|
||||
|
||||
void
|
||||
lp_disk_cache_insert_shader(struct llvmpipe_screen *screen,
|
||||
struct lp_cached_code *cache,
|
||||
unsigned char ir_sha1_cache_key[20]);
|
||||
|
||||
bool
|
||||
llvmpipe_screen_late_init(struct llvmpipe_screen *screen);
|
||||
|
||||
|
||||
static inline struct llvmpipe_screen *
|
||||
llvmpipe_screen( struct pipe_screen *pipe )
|
||||
llvmpipe_screen(struct pipe_screen *pipe)
|
||||
{
|
||||
return (struct llvmpipe_screen *)pipe;
|
||||
}
|
||||
|
||||
static inline unsigned lp_get_constant_buffer_stride(struct pipe_screen *_screen)
|
||||
|
||||
static inline unsigned
|
||||
lp_get_constant_buffer_stride(struct pipe_screen *_screen)
|
||||
{
|
||||
struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
|
||||
return screen->use_tgsi ? (sizeof(float) * 4) : sizeof(float);
|
||||
}
|
||||
|
||||
|
||||
#endif /* LP_SCREEN_H */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue