meson/gallium: Add an option to not use LLVM for gallium draw module
We'd like to use one Mesa build environment which builds our CL compiler stack (which needs Clang/LLVM) and which builds our GL driver. The GL driver doesn't really need LLVM support, and since we're statically linking LLVM, removing it from the driver drastically reduces our DLL size on disk. Acked-by: Eric Anholt <eric@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9259>
This commit is contained in:
parent
3adac6affc
commit
3955dd077b
|
@ -97,7 +97,7 @@ endif
|
||||||
define mesa-build-with-llvm
|
define mesa-build-with-llvm
|
||||||
$(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \
|
$(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \
|
||||||
$(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \
|
$(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \
|
||||||
$(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DLLVM_IS_SHARED=1 -DMESA_LLVM_VERSION_STRING=\"3.9\") \
|
$(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DDRAW_LLVM_AVAILABLE -DLLVM_IS_SHARED=1 -DMESA_LLVM_VERSION_STRING=\"3.9\") \
|
||||||
$(eval LOCAL_SHARED_LIBRARIES += libLLVM)
|
$(eval LOCAL_SHARED_LIBRARIES += libLLVM)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
|
@ -1574,6 +1574,7 @@ endif
|
||||||
|
|
||||||
dep_llvm = null_dep
|
dep_llvm = null_dep
|
||||||
with_llvm = false
|
with_llvm = false
|
||||||
|
draw_with_llvm = get_option('draw-use-llvm')
|
||||||
if _llvm != 'disabled'
|
if _llvm != 'disabled'
|
||||||
dep_llvm = dependency(
|
dep_llvm = dependency(
|
||||||
'llvm',
|
'llvm',
|
||||||
|
@ -1596,6 +1597,12 @@ if with_llvm
|
||||||
pre_args += '-DMESA_LLVM_VERSION_STRING="@0@"'.format(dep_llvm.version())
|
pre_args += '-DMESA_LLVM_VERSION_STRING="@0@"'.format(dep_llvm.version())
|
||||||
pre_args += '-DLLVM_IS_SHARED=@0@'.format(_shared_llvm.to_int())
|
pre_args += '-DLLVM_IS_SHARED=@0@'.format(_shared_llvm.to_int())
|
||||||
|
|
||||||
|
if draw_with_llvm
|
||||||
|
pre_args += '-DDRAW_LLVM_AVAILABLE'
|
||||||
|
elif with_gallium_swr
|
||||||
|
error('SWR requires LLVM draw support.')
|
||||||
|
endif
|
||||||
|
|
||||||
# LLVM can be built without rtti, turning off rtti changes the ABI of C++
|
# LLVM can be built without rtti, turning off rtti changes the ABI of C++
|
||||||
# programs, so we need to build all C++ code in mesa without rtti as well to
|
# programs, so we need to build all C++ code in mesa without rtti as well to
|
||||||
# ensure that linking works.
|
# ensure that linking works.
|
||||||
|
@ -1627,6 +1634,8 @@ elif with_gallium_opencl
|
||||||
error('The OpenCL "Clover" state tracker requires LLVM, but LLVM is disabled.')
|
error('The OpenCL "Clover" state tracker requires LLVM, but LLVM is disabled.')
|
||||||
elif with_microsoft_clc
|
elif with_microsoft_clc
|
||||||
error('The Microsoft CLC compiler requires LLVM, but LLVM is disabled.')
|
error('The Microsoft CLC compiler requires LLVM, but LLVM is disabled.')
|
||||||
|
else
|
||||||
|
draw_with_llvm = false
|
||||||
endif
|
endif
|
||||||
|
|
||||||
with_opencl_spirv = (_opencl != 'disabled' and get_option('opencl-spirv')) or with_microsoft_clc
|
with_opencl_spirv = (_opencl != 'disabled' and get_option('opencl-spirv')) or with_microsoft_clc
|
||||||
|
|
|
@ -321,6 +321,12 @@ option(
|
||||||
choices : ['auto', 'true', 'false', 'enabled', 'disabled'],
|
choices : ['auto', 'true', 'false', 'enabled', 'disabled'],
|
||||||
description : 'Whether to link LLVM shared or statically.'
|
description : 'Whether to link LLVM shared or statically.'
|
||||||
)
|
)
|
||||||
|
option(
|
||||||
|
'draw-use-llvm',
|
||||||
|
type : 'boolean',
|
||||||
|
value : 'true',
|
||||||
|
description : 'Whether to use LLVM for the Gallium draw module, if LLVM is included.'
|
||||||
|
)
|
||||||
option(
|
option(
|
||||||
'valgrind',
|
'valgrind',
|
||||||
type : 'combo',
|
type : 'combo',
|
||||||
|
|
|
@ -341,6 +341,7 @@ def generate(env):
|
||||||
|
|
||||||
# Define LLVM_AVAILABLE macro to guard code blocks, and MESA_LLVM_VERSION_STRING
|
# Define LLVM_AVAILABLE macro to guard code blocks, and MESA_LLVM_VERSION_STRING
|
||||||
env.Prepend(CPPDEFINES = [('LLVM_AVAILABLE', 1)])
|
env.Prepend(CPPDEFINES = [('LLVM_AVAILABLE', 1)])
|
||||||
|
env.Prepend(CPPDEFINES = [('DRAW_LLVM_AVAILABLE', 1)])
|
||||||
env.Prepend(CPPDEFINES = [('MESA_LLVM_VERSION_STRING=\\"%s\\"' % llvm_version)])
|
env.Prepend(CPPDEFINES = [('MESA_LLVM_VERSION_STRING=\\"%s\\"' % llvm_version)])
|
||||||
|
|
||||||
def exists(env):
|
def exists(env):
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
#include "draw_gs.h"
|
#include "draw_gs.h"
|
||||||
#include "draw_tess.h"
|
#include "draw_tess.h"
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
#include "gallivm/lp_bld_init.h"
|
#include "gallivm/lp_bld_init.h"
|
||||||
#include "gallivm/lp_bld_limits.h"
|
#include "gallivm/lp_bld_limits.h"
|
||||||
#include "draw_llvm.h"
|
#include "draw_llvm.h"
|
||||||
|
@ -67,7 +67,7 @@ draw_get_option_use_llvm(void)
|
||||||
bool
|
bool
|
||||||
draw_has_llvm(void)
|
draw_has_llvm(void)
|
||||||
{
|
{
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
return draw_get_option_use_llvm();
|
return draw_get_option_use_llvm();
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
|
@ -88,7 +88,7 @@ draw_create_context(struct pipe_context *pipe, void *context,
|
||||||
/* we need correct cpu caps for disabling denorms in draw_vbo() */
|
/* we need correct cpu caps for disabling denorms in draw_vbo() */
|
||||||
util_cpu_detect();
|
util_cpu_detect();
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (try_llvm && draw_get_option_use_llvm()) {
|
if (try_llvm && draw_get_option_use_llvm()) {
|
||||||
draw->llvm = draw_llvm_create(draw, (LLVMContextRef)context);
|
draw->llvm = draw_llvm_create(draw, (LLVMContextRef)context);
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ draw_create(struct pipe_context *pipe)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct draw_context *
|
struct draw_context *
|
||||||
draw_create_with_llvm_context(struct pipe_context *pipe,
|
draw_create_with_llvm_context(struct pipe_context *pipe,
|
||||||
void *context)
|
void *context)
|
||||||
|
@ -233,7 +233,7 @@ void draw_destroy( struct draw_context *draw )
|
||||||
draw_pt_destroy( draw );
|
draw_pt_destroy( draw );
|
||||||
draw_vs_destroy( draw );
|
draw_vs_destroy( draw );
|
||||||
draw_gs_destroy( draw );
|
draw_gs_destroy( draw );
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->llvm)
|
if (draw->llvm)
|
||||||
draw_llvm_destroy( draw->llvm );
|
draw_llvm_destroy( draw->llvm );
|
||||||
#endif
|
#endif
|
||||||
|
@ -1140,7 +1140,7 @@ draw_set_samplers(struct draw_context *draw,
|
||||||
|
|
||||||
draw->num_samplers[shader_stage] = num;
|
draw->num_samplers[shader_stage] = num;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->llvm)
|
if (draw->llvm)
|
||||||
draw_llvm_set_sampler_state(draw, shader_stage);
|
draw_llvm_set_sampler_state(draw, shader_stage);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1180,7 +1180,7 @@ draw_set_mapped_texture(struct draw_context *draw,
|
||||||
uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS],
|
uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS],
|
||||||
uint32_t mip_offsets[PIPE_MAX_TEXTURE_LEVELS])
|
uint32_t mip_offsets[PIPE_MAX_TEXTURE_LEVELS])
|
||||||
{
|
{
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->llvm)
|
if (draw->llvm)
|
||||||
draw_llvm_set_mapped_texture(draw,
|
draw_llvm_set_mapped_texture(draw,
|
||||||
shader_stage,
|
shader_stage,
|
||||||
|
@ -1202,7 +1202,7 @@ draw_set_mapped_image(struct draw_context *draw,
|
||||||
uint32_t num_samples,
|
uint32_t num_samples,
|
||||||
uint32_t sample_stride)
|
uint32_t sample_stride)
|
||||||
{
|
{
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->llvm)
|
if (draw->llvm)
|
||||||
draw_llvm_set_mapped_image(draw,
|
draw_llvm_set_mapped_image(draw,
|
||||||
shader_stage,
|
shader_stage,
|
||||||
|
@ -1241,7 +1241,7 @@ int
|
||||||
draw_get_shader_param(enum pipe_shader_type shader, enum pipe_shader_cap param)
|
draw_get_shader_param(enum pipe_shader_type shader, enum pipe_shader_cap param)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw_get_option_use_llvm()) {
|
if (draw_get_option_use_llvm()) {
|
||||||
switch(shader) {
|
switch(shader) {
|
||||||
case PIPE_SHADER_VERTEX:
|
case PIPE_SHADER_VERTEX:
|
||||||
|
|
|
@ -69,7 +69,7 @@ bool draw_has_llvm(void);
|
||||||
|
|
||||||
struct draw_context *draw_create( struct pipe_context *pipe );
|
struct draw_context *draw_create( struct pipe_context *pipe );
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct draw_context *draw_create_with_llvm_context(struct pipe_context *pipe,
|
struct draw_context *draw_create_with_llvm_context(struct pipe_context *pipe,
|
||||||
void *context);
|
void *context);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
#include "draw_private.h"
|
#include "draw_private.h"
|
||||||
#include "draw_context.h"
|
#include "draw_context.h"
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
#include "draw_llvm.h"
|
#include "draw_llvm.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -222,7 +222,7 @@ static void tgsi_gs_run(struct draw_geometry_shader *shader,
|
||||||
out_prims[i] = machine->OutputPrimCount[i];
|
out_prims[i] = machine->OutputPrimCount[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
|
|
||||||
static void
|
static void
|
||||||
llvm_fetch_gs_input(struct draw_geometry_shader *shader,
|
llvm_fetch_gs_input(struct draw_geometry_shader *shader,
|
||||||
|
@ -622,7 +622,7 @@ int draw_geometry_shader_run(struct draw_geometry_shader *shader,
|
||||||
shader->input = input;
|
shader->input = input;
|
||||||
shader->input_info = input_info;
|
shader->input_info = input_info;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (shader->draw->llvm) {
|
if (shader->draw->llvm) {
|
||||||
for (i = 0; i < shader->num_vertex_streams; i++) {
|
for (i = 0; i < shader->num_vertex_streams; i++) {
|
||||||
shader->gs_output[i] = output_verts[i].verts;
|
shader->gs_output[i] = output_verts[i].verts;
|
||||||
|
@ -753,14 +753,14 @@ struct draw_geometry_shader *
|
||||||
draw_create_geometry_shader(struct draw_context *draw,
|
draw_create_geometry_shader(struct draw_context *draw,
|
||||||
const struct pipe_shader_state *state)
|
const struct pipe_shader_state *state)
|
||||||
{
|
{
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
boolean use_llvm = draw->llvm != NULL;
|
boolean use_llvm = draw->llvm != NULL;
|
||||||
struct llvm_geometry_shader *llvm_gs = NULL;
|
struct llvm_geometry_shader *llvm_gs = NULL;
|
||||||
#endif
|
#endif
|
||||||
struct draw_geometry_shader *gs;
|
struct draw_geometry_shader *gs;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (use_llvm) {
|
if (use_llvm) {
|
||||||
llvm_gs = CALLOC_STRUCT(llvm_geometry_shader);
|
llvm_gs = CALLOC_STRUCT(llvm_geometry_shader);
|
||||||
|
|
||||||
|
@ -796,7 +796,7 @@ draw_create_geometry_shader(struct draw_context *draw,
|
||||||
/* setup the defaults */
|
/* setup the defaults */
|
||||||
gs->max_out_prims = 0;
|
gs->max_out_prims = 0;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (use_llvm) {
|
if (use_llvm) {
|
||||||
/* TODO: change the input array to handle the following
|
/* TODO: change the input array to handle the following
|
||||||
vector length, instead of the currently hardcoded
|
vector length, instead of the currently hardcoded
|
||||||
|
@ -853,7 +853,7 @@ draw_create_geometry_shader(struct draw_context *draw,
|
||||||
gs->num_vertex_streams = gs->state.stream_output.output[i].stream + 1;
|
gs->num_vertex_streams = gs->state.stream_output.output[i].stream + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (use_llvm) {
|
if (use_llvm) {
|
||||||
int vector_size = gs->vector_length * sizeof(float);
|
int vector_size = gs->vector_length * sizeof(float);
|
||||||
gs->gs_input = align_malloc(sizeof(struct draw_gs_inputs), 16);
|
gs->gs_input = align_malloc(sizeof(struct draw_gs_inputs), 16);
|
||||||
|
@ -913,7 +913,7 @@ void draw_delete_geometry_shader(struct draw_context *draw,
|
||||||
if (!dgs) {
|
if (!dgs) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->llvm) {
|
if (draw->llvm) {
|
||||||
struct llvm_geometry_shader *shader = llvm_geometry_shader(dgs);
|
struct llvm_geometry_shader *shader = llvm_geometry_shader(dgs);
|
||||||
struct draw_gs_llvm_variant_list_item *li;
|
struct draw_gs_llvm_variant_list_item *li;
|
||||||
|
@ -955,7 +955,7 @@ void draw_delete_geometry_shader(struct draw_context *draw,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
void draw_gs_set_current_variant(struct draw_geometry_shader *shader,
|
void draw_gs_set_current_variant(struct draw_geometry_shader *shader,
|
||||||
struct draw_gs_llvm_variant *variant)
|
struct draw_gs_llvm_variant *variant)
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
struct draw_context;
|
struct draw_context;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct draw_gs_jit_context;
|
struct draw_gs_jit_context;
|
||||||
struct draw_gs_llvm_variant;
|
struct draw_gs_llvm_variant;
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ struct draw_geometry_shader {
|
||||||
|
|
||||||
unsigned num_invocations;
|
unsigned num_invocations;
|
||||||
unsigned invocation_id;
|
unsigned invocation_id;
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct draw_gs_inputs *gs_input;
|
struct draw_gs_inputs *gs_input;
|
||||||
struct draw_gs_jit_context *jit_context;
|
struct draw_gs_jit_context *jit_context;
|
||||||
struct draw_gs_llvm_variant *current_variant;
|
struct draw_gs_llvm_variant *current_variant;
|
||||||
|
@ -146,7 +146,7 @@ void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
|
||||||
int draw_gs_max_output_vertices(struct draw_geometry_shader *shader,
|
int draw_gs_max_output_vertices(struct draw_geometry_shader *shader,
|
||||||
unsigned pipe_prim);
|
unsigned pipe_prim);
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
void draw_gs_set_current_variant(struct draw_geometry_shader *shader,
|
void draw_gs_set_current_variant(struct draw_geometry_shader *shader,
|
||||||
struct draw_gs_llvm_variant *variant);
|
struct draw_gs_llvm_variant *variant);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -318,7 +318,7 @@ generate_aaline_fs(struct aaline_stage *aaline)
|
||||||
static boolean
|
static boolean
|
||||||
generate_aaline_fs_nir(struct aaline_stage *aaline)
|
generate_aaline_fs_nir(struct aaline_stage *aaline)
|
||||||
{
|
{
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct pipe_context *pipe = aaline->stage.draw->pipe;
|
struct pipe_context *pipe = aaline->stage.draw->pipe;
|
||||||
const struct pipe_shader_state *orig_fs = &aaline->fs->state;
|
const struct pipe_shader_state *orig_fs = &aaline->fs->state;
|
||||||
struct pipe_shader_state aaline_fs;
|
struct pipe_shader_state aaline_fs;
|
||||||
|
@ -644,7 +644,7 @@ aaline_create_fs_state(struct pipe_context *pipe,
|
||||||
aafs->state.type = fs->type;
|
aafs->state.type = fs->type;
|
||||||
if (fs->type == PIPE_SHADER_IR_TGSI)
|
if (fs->type == PIPE_SHADER_IR_TGSI)
|
||||||
aafs->state.tokens = tgsi_dup_tokens(fs->tokens);
|
aafs->state.tokens = tgsi_dup_tokens(fs->tokens);
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
else
|
else
|
||||||
aafs->state.ir.nir = nir_shader_clone(NULL, fs->ir.nir);
|
aafs->state.ir.nir = nir_shader_clone(NULL, fs->ir.nir);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -411,7 +411,7 @@ fail:
|
||||||
static boolean
|
static boolean
|
||||||
generate_aapoint_fs_nir(struct aapoint_stage *aapoint)
|
generate_aapoint_fs_nir(struct aapoint_stage *aapoint)
|
||||||
{
|
{
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct pipe_context *pipe = aapoint->stage.draw->pipe;
|
struct pipe_context *pipe = aapoint->stage.draw->pipe;
|
||||||
const struct pipe_shader_state *orig_fs = &aapoint->fs->state;
|
const struct pipe_shader_state *orig_fs = &aapoint->fs->state;
|
||||||
struct pipe_shader_state aapoint_fs;
|
struct pipe_shader_state aapoint_fs;
|
||||||
|
@ -748,7 +748,7 @@ aapoint_create_fs_state(struct pipe_context *pipe,
|
||||||
aafs->state.type = fs->type;
|
aafs->state.type = fs->type;
|
||||||
if (fs->type == PIPE_SHADER_IR_TGSI)
|
if (fs->type == PIPE_SHADER_IR_TGSI)
|
||||||
aafs->state.tokens = tgsi_dup_tokens(fs->tokens);
|
aafs->state.tokens = tgsi_dup_tokens(fs->tokens);
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
else
|
else
|
||||||
aafs->state.ir.nir = nir_shader_clone(NULL, fs->ir.nir);
|
aafs->state.ir.nir = nir_shader_clone(NULL, fs->ir.nir);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -144,7 +144,7 @@ generate_pstip_fs(struct pstip_stage *pstip)
|
||||||
if (pstip_fs.tokens == NULL)
|
if (pstip_fs.tokens == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else {
|
} else {
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
pstip_fs.ir.nir = nir_shader_clone(NULL, orig_fs->ir.nir);
|
pstip_fs.ir.nir = nir_shader_clone(NULL, orig_fs->ir.nir);
|
||||||
nir_lower_pstipple_fs(pstip_fs.ir.nir,
|
nir_lower_pstipple_fs(pstip_fs.ir.nir,
|
||||||
&pstip->fs->sampler_unit, 0, wincoord_file == TGSI_FILE_SYSTEM_VALUE);
|
&pstip->fs->sampler_unit, 0, wincoord_file == TGSI_FILE_SYSTEM_VALUE);
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
|
|
||||||
#include "tgsi/tgsi_scan.h"
|
#include "tgsi/tgsi_scan.h"
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct gallivm_state;
|
struct gallivm_state;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -200,7 +200,7 @@ boolean draw_pt_init( struct draw_context *draw )
|
||||||
if (!draw->pt.middle.general)
|
if (!draw->pt.middle.general)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->llvm)
|
if (draw->llvm)
|
||||||
draw->pt.middle.llvm = draw_pt_fetch_pipeline_or_emit_llvm( draw );
|
draw->pt.middle.llvm = draw_pt_fetch_pipeline_or_emit_llvm( draw );
|
||||||
#endif
|
#endif
|
||||||
|
@ -546,7 +546,7 @@ draw_vbo(struct draw_context *draw,
|
||||||
draw->pt.vertex_element,
|
draw->pt.vertex_element,
|
||||||
draw->pt.nr_vertex_elements,
|
draw->pt.nr_vertex_elements,
|
||||||
info);
|
info);
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (!draw->llvm)
|
if (!draw->llvm)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
*
|
*
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
#include "draw_tess.h"
|
#include "draw_tess.h"
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
#include "draw_llvm.h"
|
#include "draw_llvm.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ draw_tes_get_input_index(int semantic, int index,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
#define DEBUG_INPUTS 0
|
#define DEBUG_INPUTS 0
|
||||||
static void
|
static void
|
||||||
llvm_fetch_tcs_input(struct draw_tess_ctrl_shader *shader,
|
llvm_fetch_tcs_input(struct draw_tess_ctrl_shader *shader,
|
||||||
|
@ -188,7 +188,7 @@ int draw_tess_ctrl_shader_run(struct draw_tess_ctrl_shader *shader,
|
||||||
if (shader->draw->collect_statistics) {
|
if (shader->draw->collect_statistics) {
|
||||||
shader->draw->statistics.hs_invocations += num_patches;
|
shader->draw->statistics.hs_invocations += num_patches;
|
||||||
}
|
}
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
for (unsigned i = 0; i < num_patches; i++) {
|
for (unsigned i = 0; i < num_patches; i++) {
|
||||||
uint32_t vert_start = output_verts->count;
|
uint32_t vert_start = output_verts->count;
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ int draw_tess_ctrl_shader_run(struct draw_tess_ctrl_shader *shader,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
#define DEBUG_INPUTS 0
|
#define DEBUG_INPUTS 0
|
||||||
static void
|
static void
|
||||||
llvm_fetch_tes_input(struct draw_tess_eval_shader *shader,
|
llvm_fetch_tes_input(struct draw_tess_eval_shader *shader,
|
||||||
|
@ -350,7 +350,7 @@ int draw_tess_eval_shader_run(struct draw_tess_eval_shader *shader,
|
||||||
shader->input_vertex_stride = input_stride;
|
shader->input_vertex_stride = input_stride;
|
||||||
shader->input_info = input_info;
|
shader->input_info = input_info;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct pipe_tessellation_factors factors;
|
struct pipe_tessellation_factors factors;
|
||||||
struct pipe_tessellator_data data = { 0 };
|
struct pipe_tessellator_data data = { 0 };
|
||||||
struct pipe_tessellator *ptess = p_tess_init(shader->prim_mode,
|
struct pipe_tessellator *ptess = p_tess_init(shader->prim_mode,
|
||||||
|
@ -415,13 +415,13 @@ struct draw_tess_ctrl_shader *
|
||||||
draw_create_tess_ctrl_shader(struct draw_context *draw,
|
draw_create_tess_ctrl_shader(struct draw_context *draw,
|
||||||
const struct pipe_shader_state *state)
|
const struct pipe_shader_state *state)
|
||||||
{
|
{
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
boolean use_llvm = draw->llvm != NULL;
|
boolean use_llvm = draw->llvm != NULL;
|
||||||
struct llvm_tess_ctrl_shader *llvm_tcs = NULL;
|
struct llvm_tess_ctrl_shader *llvm_tcs = NULL;
|
||||||
#endif
|
#endif
|
||||||
struct draw_tess_ctrl_shader *tcs;
|
struct draw_tess_ctrl_shader *tcs;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (use_llvm) {
|
if (use_llvm) {
|
||||||
llvm_tcs = CALLOC_STRUCT(llvm_tess_ctrl_shader);
|
llvm_tcs = CALLOC_STRUCT(llvm_tess_ctrl_shader);
|
||||||
|
|
||||||
|
@ -447,7 +447,7 @@ draw_create_tess_ctrl_shader(struct draw_context *draw,
|
||||||
|
|
||||||
tcs->vector_length = 4;
|
tcs->vector_length = 4;
|
||||||
tcs->vertices_out = tcs->info.properties[TGSI_PROPERTY_TCS_VERTICES_OUT];
|
tcs->vertices_out = tcs->info.properties[TGSI_PROPERTY_TCS_VERTICES_OUT];
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (use_llvm) {
|
if (use_llvm) {
|
||||||
|
|
||||||
tcs->tcs_input = align_malloc(sizeof(struct draw_tcs_inputs), 16);
|
tcs->tcs_input = align_malloc(sizeof(struct draw_tcs_inputs), 16);
|
||||||
|
@ -484,7 +484,7 @@ void draw_delete_tess_ctrl_shader(struct draw_context *draw,
|
||||||
if (!dtcs)
|
if (!dtcs)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->llvm) {
|
if (draw->llvm) {
|
||||||
struct llvm_tess_ctrl_shader *shader = llvm_tess_ctrl_shader(dtcs);
|
struct llvm_tess_ctrl_shader *shader = llvm_tess_ctrl_shader(dtcs);
|
||||||
|
|
||||||
|
@ -508,7 +508,7 @@ void draw_delete_tess_ctrl_shader(struct draw_context *draw,
|
||||||
FREE(dtcs);
|
FREE(dtcs);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
void draw_tcs_set_current_variant(struct draw_tess_ctrl_shader *shader,
|
void draw_tcs_set_current_variant(struct draw_tess_ctrl_shader *shader,
|
||||||
struct draw_tcs_llvm_variant *variant)
|
struct draw_tcs_llvm_variant *variant)
|
||||||
{
|
{
|
||||||
|
@ -520,13 +520,13 @@ struct draw_tess_eval_shader *
|
||||||
draw_create_tess_eval_shader(struct draw_context *draw,
|
draw_create_tess_eval_shader(struct draw_context *draw,
|
||||||
const struct pipe_shader_state *state)
|
const struct pipe_shader_state *state)
|
||||||
{
|
{
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
boolean use_llvm = draw->llvm != NULL;
|
boolean use_llvm = draw->llvm != NULL;
|
||||||
struct llvm_tess_eval_shader *llvm_tes = NULL;
|
struct llvm_tess_eval_shader *llvm_tes = NULL;
|
||||||
#endif
|
#endif
|
||||||
struct draw_tess_eval_shader *tes;
|
struct draw_tess_eval_shader *tes;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (use_llvm) {
|
if (use_llvm) {
|
||||||
llvm_tes = CALLOC_STRUCT(llvm_tess_eval_shader);
|
llvm_tes = CALLOC_STRUCT(llvm_tess_eval_shader);
|
||||||
|
|
||||||
|
@ -570,7 +570,7 @@ draw_create_tess_eval_shader(struct draw_context *draw,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (use_llvm) {
|
if (use_llvm) {
|
||||||
|
|
||||||
tes->tes_input = align_malloc(sizeof(struct draw_tes_inputs), 16);
|
tes->tes_input = align_malloc(sizeof(struct draw_tes_inputs), 16);
|
||||||
|
@ -605,7 +605,7 @@ void draw_delete_tess_eval_shader(struct draw_context *draw,
|
||||||
if (!dtes)
|
if (!dtes)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->llvm) {
|
if (draw->llvm) {
|
||||||
struct llvm_tess_eval_shader *shader = llvm_tess_eval_shader(dtes);
|
struct llvm_tess_eval_shader *shader = llvm_tess_eval_shader(dtes);
|
||||||
struct draw_tes_llvm_variant_list_item *li;
|
struct draw_tes_llvm_variant_list_item *li;
|
||||||
|
@ -626,7 +626,7 @@ void draw_delete_tess_eval_shader(struct draw_context *draw,
|
||||||
FREE(dtes);
|
FREE(dtes);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
void draw_tes_set_current_variant(struct draw_tess_eval_shader *shader,
|
void draw_tes_set_current_variant(struct draw_tess_eval_shader *shader,
|
||||||
struct draw_tes_llvm_variant *variant)
|
struct draw_tes_llvm_variant *variant)
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include "draw_private.h"
|
#include "draw_private.h"
|
||||||
|
|
||||||
struct draw_context;
|
struct draw_context;
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
|
|
||||||
#define NUM_PATCH_INPUTS 32
|
#define NUM_PATCH_INPUTS 32
|
||||||
#define NUM_TCS_INPUTS (PIPE_MAX_SHADER_INPUTS - NUM_PATCH_INPUTS)
|
#define NUM_TCS_INPUTS (PIPE_MAX_SHADER_INPUTS - NUM_PATCH_INPUTS)
|
||||||
|
@ -64,7 +64,7 @@ struct draw_tess_ctrl_shader {
|
||||||
unsigned input_vertex_stride;
|
unsigned input_vertex_stride;
|
||||||
const float (*input)[4];
|
const float (*input)[4];
|
||||||
const struct tgsi_shader_info *input_info;
|
const struct tgsi_shader_info *input_info;
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct draw_tcs_inputs *tcs_input;
|
struct draw_tcs_inputs *tcs_input;
|
||||||
struct draw_tcs_outputs *tcs_output;
|
struct draw_tcs_outputs *tcs_output;
|
||||||
struct draw_tcs_jit_context *jit_context;
|
struct draw_tcs_jit_context *jit_context;
|
||||||
|
@ -91,7 +91,7 @@ struct draw_tess_eval_shader {
|
||||||
const float (*input)[4];
|
const float (*input)[4];
|
||||||
const struct tgsi_shader_info *input_info;
|
const struct tgsi_shader_info *input_info;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct draw_tes_inputs *tes_input;
|
struct draw_tes_inputs *tes_input;
|
||||||
struct draw_tes_jit_context *jit_context;
|
struct draw_tes_jit_context *jit_context;
|
||||||
struct draw_tes_llvm_variant *current_variant;
|
struct draw_tes_llvm_variant *current_variant;
|
||||||
|
@ -120,7 +120,7 @@ int draw_tess_eval_shader_run(struct draw_tess_eval_shader *shader,
|
||||||
struct draw_prim_info *output_prims,
|
struct draw_prim_info *output_prims,
|
||||||
ushort **elts_out);
|
ushort **elts_out);
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
void draw_tcs_set_current_variant(struct draw_tess_ctrl_shader *shader,
|
void draw_tcs_set_current_variant(struct draw_tess_ctrl_shader *shader,
|
||||||
struct draw_tcs_llvm_variant *variant);
|
struct draw_tcs_llvm_variant *variant);
|
||||||
void draw_tes_set_current_variant(struct draw_tess_eval_shader *shader,
|
void draw_tes_set_current_variant(struct draw_tess_eval_shader *shader,
|
||||||
|
|
|
@ -59,7 +59,7 @@ draw_create_vertex_shader(struct draw_context *draw,
|
||||||
tgsi_dump(shader->tokens, 0);
|
tgsi_dump(shader->tokens, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
if (draw->pt.middle.llvm) {
|
if (draw->pt.middle.llvm) {
|
||||||
vs = draw_create_vs_llvm(draw, shader);
|
vs = draw_create_vs_llvm(draw, shader);
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,7 @@ draw_create_vs_exec(struct draw_context *draw,
|
||||||
struct draw_vs_variant_key;
|
struct draw_vs_variant_key;
|
||||||
struct draw_vertex_shader;
|
struct draw_vertex_shader;
|
||||||
|
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
struct draw_vertex_shader *
|
struct draw_vertex_shader *
|
||||||
draw_create_vs_llvm(struct draw_context *draw,
|
draw_create_vs_llvm(struct draw_context *draw,
|
||||||
const struct pipe_shader_state *state);
|
const struct pipe_shader_state *state);
|
||||||
|
|
|
@ -345,7 +345,7 @@ if dep_libdrm.found()
|
||||||
)
|
)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if with_llvm
|
if draw_with_llvm
|
||||||
files_libgallium += files(
|
files_libgallium += files(
|
||||||
'gallivm/lp_bld_arit.c',
|
'gallivm/lp_bld_arit.c',
|
||||||
'gallivm/lp_bld_arit.h',
|
'gallivm/lp_bld_arit.h',
|
||||||
|
|
|
@ -29,7 +29,7 @@ struct nir_shader;
|
||||||
struct tgsi_shader_info;
|
struct tgsi_shader_info;
|
||||||
|
|
||||||
/* only llvmpipe uses this path, so handle draw not using llvm */
|
/* only llvmpipe uses this path, so handle draw not using llvm */
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
void nir_tgsi_scan_shader(const struct nir_shader *nir,
|
void nir_tgsi_scan_shader(const struct nir_shader *nir,
|
||||||
struct tgsi_shader_info *info,
|
struct tgsi_shader_info *info,
|
||||||
bool need_texcoord);
|
bool need_texcoord);
|
||||||
|
|
|
@ -114,7 +114,7 @@ driver_swrast = declare_dependency(
|
||||||
dependencies : [driver_swrast, dep_llvm, idep_mesautil],
|
dependencies : [driver_swrast, dep_llvm, idep_mesautil],
|
||||||
)
|
)
|
||||||
|
|
||||||
if with_tests and with_gallium_softpipe and with_llvm
|
if with_tests and with_gallium_softpipe and draw_with_llvm
|
||||||
foreach t : ['lp_test_format', 'lp_test_arit', 'lp_test_blend',
|
foreach t : ['lp_test_format', 'lp_test_arit', 'lp_test_blend',
|
||||||
'lp_test_conv', 'lp_test_printf']
|
'lp_test_conv', 'lp_test_printf']
|
||||||
test(
|
test(
|
||||||
|
|
|
@ -98,7 +98,7 @@ svga_get_name( struct pipe_screen *pscreen )
|
||||||
#else
|
#else
|
||||||
build = "build: RELEASE;";
|
build = "build: RELEASE;";
|
||||||
#endif
|
#endif
|
||||||
#ifdef LLVM_AVAILABLE
|
#ifdef DRAW_LLVM_AVAILABLE
|
||||||
llvm = "LLVM;";
|
llvm = "LLVM;";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ else
|
||||||
endif
|
endif
|
||||||
if with_gallium_softpipe
|
if with_gallium_softpipe
|
||||||
subdir('drivers/softpipe')
|
subdir('drivers/softpipe')
|
||||||
if with_llvm
|
if draw_with_llvm
|
||||||
subdir('drivers/llvmpipe')
|
subdir('drivers/llvmpipe')
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue