mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 07:58:07 +02:00
i965: Add compiler options to brw_compiler
This creates the options at screen cration time and then we just copy them into the context at context creation time. We also move is_scalar to the brw_compiler structure. We also end up manually setting some values that the core would have set by default for us. Fortunately, there are only two non-zero shader compiler option defaults that we aren't overriding anyway so this isn't a big deal. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
This commit is contained in:
parent
073294d3ef
commit
6e255a3299
6 changed files with 57 additions and 46 deletions
|
|
@ -50,6 +50,7 @@
|
|||
|
||||
#include "brw_context.h"
|
||||
#include "brw_defines.h"
|
||||
#include "brw_shader.h"
|
||||
#include "brw_draw.h"
|
||||
#include "brw_state.h"
|
||||
|
||||
|
|
@ -68,8 +69,6 @@
|
|||
#include "tnl/t_pipeline.h"
|
||||
#include "util/ralloc.h"
|
||||
|
||||
#include "glsl/nir/nir.h"
|
||||
|
||||
/***************************************
|
||||
* Mesa's Driver Functions
|
||||
***************************************/
|
||||
|
|
@ -558,48 +557,12 @@ brw_initialize_context_constants(struct brw_context *brw)
|
|||
ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 128;
|
||||
}
|
||||
|
||||
static const nir_shader_compiler_options nir_options = {
|
||||
.native_integers = true,
|
||||
/* In order to help allow for better CSE at the NIR level we tell NIR
|
||||
* to split all ffma instructions during opt_algebraic and we then
|
||||
* re-combine them as a later step.
|
||||
*/
|
||||
.lower_ffma = true,
|
||||
.lower_sub = true,
|
||||
};
|
||||
|
||||
/* We want the GLSL compiler to emit code that uses condition codes */
|
||||
for (int i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
ctx->Const.ShaderCompilerOptions[i].MaxIfDepth = brw->gen < 6 ? 16 : UINT_MAX;
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitCondCodes = true;
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoNoise = true;
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoMainReturn = true;
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectInput = true;
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectOutput =
|
||||
(i == MESA_SHADER_FRAGMENT);
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectTemp =
|
||||
(i == MESA_SHADER_FRAGMENT);
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectUniform = false;
|
||||
ctx->Const.ShaderCompilerOptions[i].LowerClipDistance = true;
|
||||
ctx->Const.ShaderCompilerOptions[i] =
|
||||
brw->intelScreen->compiler->glsl_compiler_options[i];
|
||||
}
|
||||
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].OptimizeForAOS = true;
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_GEOMETRY].OptimizeForAOS = true;
|
||||
|
||||
if (brw->scalar_vs) {
|
||||
/* If we're using the scalar backend for vertex shaders, we need to
|
||||
* configure these accordingly.
|
||||
*/
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitNoIndirectOutput = true;
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitNoIndirectTemp = true;
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].OptimizeForAOS = false;
|
||||
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].NirOptions = &nir_options;
|
||||
}
|
||||
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_FRAGMENT].NirOptions = &nir_options;
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_COMPUTE].NirOptions = &nir_options;
|
||||
|
||||
/* ARB_viewport_array */
|
||||
if (brw->gen >= 6 && ctx->API == API_OPENGL_CORE) {
|
||||
ctx->Const.MaxViewports = GEN6_NUM_VIEWPORTS;
|
||||
|
|
@ -826,9 +789,6 @@ brwCreateContext(gl_api api,
|
|||
if (INTEL_DEBUG & DEBUG_PERF)
|
||||
brw->perf_debug = true;
|
||||
|
||||
if (brw->gen >= 8 && !(INTEL_DEBUG & DEBUG_VEC4VS))
|
||||
brw->scalar_vs = true;
|
||||
|
||||
brw_initialize_context_constants(brw);
|
||||
|
||||
ctx->Const.ResetStrategy = notify_reset
|
||||
|
|
|
|||
|
|
@ -1137,7 +1137,6 @@ struct brw_context
|
|||
bool has_pln;
|
||||
bool no_simd8;
|
||||
bool use_rep_send;
|
||||
bool scalar_vs;
|
||||
|
||||
/**
|
||||
* Some versions of Gen hardware don't do centroid interpolation correctly
|
||||
|
|
|
|||
|
|
@ -84,6 +84,54 @@ brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo)
|
|||
brw_fs_alloc_reg_sets(compiler);
|
||||
brw_vec4_alloc_reg_set(compiler);
|
||||
|
||||
if (devinfo->gen >= 8 && !(INTEL_DEBUG & DEBUG_VEC4VS))
|
||||
compiler->scalar_vs = true;
|
||||
|
||||
nir_shader_compiler_options *nir_options =
|
||||
rzalloc(compiler, nir_shader_compiler_options);
|
||||
nir_options->native_integers = true;
|
||||
/* In order to help allow for better CSE at the NIR level we tell NIR
|
||||
* to split all ffma instructions during opt_algebraic and we then
|
||||
* re-combine them as a later step.
|
||||
*/
|
||||
nir_options->lower_ffma = true;
|
||||
nir_options->lower_sub = true;
|
||||
|
||||
/* We want the GLSL compiler to emit code that uses condition codes */
|
||||
for (int i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
compiler->glsl_compiler_options[i].MaxUnrollIterations = 32;
|
||||
compiler->glsl_compiler_options[i].MaxIfDepth =
|
||||
devinfo->gen < 6 ? 16 : UINT_MAX;
|
||||
|
||||
compiler->glsl_compiler_options[i].EmitCondCodes = true;
|
||||
compiler->glsl_compiler_options[i].EmitNoNoise = true;
|
||||
compiler->glsl_compiler_options[i].EmitNoMainReturn = true;
|
||||
compiler->glsl_compiler_options[i].EmitNoIndirectInput = true;
|
||||
compiler->glsl_compiler_options[i].EmitNoIndirectOutput =
|
||||
(i == MESA_SHADER_FRAGMENT);
|
||||
compiler->glsl_compiler_options[i].EmitNoIndirectTemp =
|
||||
(i == MESA_SHADER_FRAGMENT);
|
||||
compiler->glsl_compiler_options[i].EmitNoIndirectUniform = false;
|
||||
compiler->glsl_compiler_options[i].LowerClipDistance = true;
|
||||
}
|
||||
|
||||
compiler->glsl_compiler_options[MESA_SHADER_VERTEX].OptimizeForAOS = true;
|
||||
compiler->glsl_compiler_options[MESA_SHADER_GEOMETRY].OptimizeForAOS = true;
|
||||
|
||||
if (compiler->scalar_vs) {
|
||||
/* If we're using the scalar backend for vertex shaders, we need to
|
||||
* configure these accordingly.
|
||||
*/
|
||||
compiler->glsl_compiler_options[MESA_SHADER_VERTEX].EmitNoIndirectOutput = true;
|
||||
compiler->glsl_compiler_options[MESA_SHADER_VERTEX].EmitNoIndirectTemp = true;
|
||||
compiler->glsl_compiler_options[MESA_SHADER_VERTEX].OptimizeForAOS = false;
|
||||
|
||||
compiler->glsl_compiler_options[MESA_SHADER_VERTEX].NirOptions = nir_options;
|
||||
}
|
||||
|
||||
compiler->glsl_compiler_options[MESA_SHADER_FRAGMENT].NirOptions = nir_options;
|
||||
compiler->glsl_compiler_options[MESA_SHADER_COMPUTE].NirOptions = nir_options;
|
||||
|
||||
return compiler;
|
||||
}
|
||||
|
||||
|
|
@ -139,7 +187,7 @@ is_scalar_shader_stage(struct brw_context *brw, int stage)
|
|||
case MESA_SHADER_FRAGMENT:
|
||||
return true;
|
||||
case MESA_SHADER_VERTEX:
|
||||
return brw->scalar_vs;
|
||||
return brw->intelScreen->compiler->scalar_vs;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@ struct brw_compiler {
|
|||
|
||||
void (*shader_debug_log)(void *, const char *str, ...) PRINTFLIKE(2, 3);
|
||||
void (*shader_perf_log)(void *, const char *str, ...) PRINTFLIKE(2, 3);
|
||||
|
||||
bool scalar_vs;
|
||||
struct gl_shader_compiler_options glsl_compiler_options[MESA_SHADER_STAGES];
|
||||
};
|
||||
|
||||
enum PACKED register_file {
|
||||
|
|
|
|||
|
|
@ -1882,7 +1882,7 @@ brw_vs_emit(struct brw_context *brw,
|
|||
if (unlikely(INTEL_DEBUG & DEBUG_VS))
|
||||
brw_dump_ir("vertex", prog, &shader->base, &c->vp->program.Base);
|
||||
|
||||
if (brw->scalar_vs) {
|
||||
if (brw->intelScreen->compiler->scalar_vs) {
|
||||
if (!c->vp->program.Base.nir) {
|
||||
/* Normally we generate NIR in LinkShader() or
|
||||
* ProgramStringNotify(), but Mesa's fixed-function vertex program
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "swrast/s_renderbuffer.h"
|
||||
#include "util/ralloc.h"
|
||||
#include "brw_shader.h"
|
||||
#include "glsl/nir/nir.h"
|
||||
|
||||
#include "utils.h"
|
||||
#include "xmlpool.h"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue