summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2017-05-16 02:04:48 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2017-07-05 12:32:36 +0200
commite187191756e2a7f7cea5b42f33c63da465679c70 (patch)
treed07d0c4f91dd47f1bfbc1ab4e4af6bc2bc4e5121
parentba7d79bf58de962df8d05894d8328c9918f5c670 (diff)
radeonsi: implement pipe_screen::get_compiler_options for NIR
-rw-r--r--src/gallium/drivers/radeonsi/si_pipe.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index 00cd211f38..beadb88c68 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -34,6 +34,8 @@
#include "vl/vl_decoder.h"
#include "../ddebug/dd_util.h"
+#include "compiler/nir/nir.h"
+
/*
* pipe_context
*/
@@ -783,6 +785,36 @@ static int si_get_shader_param(struct pipe_screen* pscreen,
return 0;
}
+static const struct nir_shader_compiler_options nir_options = {
+ .vertex_id_zero_based = true,
+ .lower_scmp = true,
+ .lower_flrp32 = true,
+ .lower_fsat = true,
+ .lower_fdiv = true,
+ .lower_sub = true,
+ .lower_pack_snorm_2x16 = true,
+ .lower_pack_snorm_4x8 = true,
+ .lower_pack_unorm_2x16 = true,
+ .lower_pack_unorm_4x8 = true,
+ .lower_unpack_snorm_2x16 = true,
+ .lower_unpack_snorm_4x8 = true,
+ .lower_unpack_unorm_2x16 = true,
+ .lower_unpack_unorm_4x8 = true,
+ .lower_extract_byte = true,
+ .lower_extract_word = true,
+ .max_unroll_iterations = 32,
+ .native_integers = true,
+};
+
+static const void *
+si_get_compiler_options(struct pipe_screen *screen,
+ enum pipe_shader_ir ir,
+ enum pipe_shader_type shader)
+{
+ assert(ir == PIPE_SHADER_IR_NIR);
+ return &nir_options;
+}
+
static void si_destroy_screen(struct pipe_screen* pscreen)
{
struct si_screen *sscreen = (struct si_screen *)pscreen;
@@ -934,6 +966,7 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
sscreen->b.b.destroy = si_destroy_screen;
sscreen->b.b.get_param = si_get_param;
sscreen->b.b.get_shader_param = si_get_shader_param;
+ sscreen->b.b.get_compiler_options = si_get_compiler_options;
sscreen->b.b.resource_create = r600_resource_create_common;
si_init_screen_state_functions(sscreen);