#include "si_public.h"
#include "sid.h"
+#include "radeon/radeon_llvm_emit.h"
#include "radeon/radeon_uvd.h"
#include "util/u_memory.h"
#include "vl/vl_decoder.h"
+#include <llvm-c/Target.h>
+#include <llvm-c/TargetMachine.h>
+
/*
* pipe_context
*/
case SI:
case CIK:
si_init_state_functions(sctx);
+ si_init_shader_functions(sctx);
si_init_config(sctx);
break;
default:
case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
case PIPE_CAP_SAMPLER_VIEW_TARGET:
+ case PIPE_CAP_VERTEXID_NOBASE:
return 0;
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
return;
r600_destroy_common_screen(&sscreen->b);
+
+#if HAVE_LLVM >= 0x0306
+ LLVMDisposeTargetMachine(sscreen->tm);
+#endif
}
#define SI_TILE_MODE_COLOR_2D_8BPP 14
struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
{
struct si_screen *sscreen = CALLOC_STRUCT(si_screen);
+ LLVMTargetRef r600_target;
+#if HAVE_LLVM >= 0x0306
+ const char *triple = "amdgcn--";
+#else
+ const char *triple = "r600--";
+#endif
if (sscreen == NULL) {
return NULL;
}
/* Create the auxiliary context. This must be done last. */
sscreen->b.aux_context = sscreen->b.b.context_create(&sscreen->b.b, NULL);
+#if HAVE_LLVM >= 0x0306
+ /* Initialize LLVM TargetMachine */
+ r600_target = radeon_llvm_get_r600_target(triple);
+ sscreen->tm = LLVMCreateTargetMachine(r600_target, triple,
+ r600_get_llvm_processor_name(sscreen->b.family),
+ "+DumpCode", LLVMCodeGenLevelDefault, LLVMRelocDefault,
+ LLVMCodeModelDefault);
+#endif
return &sscreen->b.b;
}