mesa: move gl_program::is_arb_asm to shader_info

This will be used from radeonsi in the next commit.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11972>
This commit is contained in:
Pierre-Eric Pelloux-Prayer
2021-07-16 11:42:42 +02:00
committed by Marge Bot
parent bff8a948f7
commit 8cd2e82c89
7 changed files with 21 additions and 18 deletions

View File

@@ -103,7 +103,7 @@ init_gl_program(struct gl_program *prog, bool is_arb_asm, gl_shader_stage stage)
{ {
prog->RefCount = 1; prog->RefCount = 1;
prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB; prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB;
prog->is_arb_asm = is_arb_asm; prog->info.is_arb_asm = is_arb_asm;
prog->info.stage = stage; prog->info.stage = stage;
} }

View File

@@ -271,6 +271,11 @@ typedef struct shader_info {
*/ */
bool workgroup_size_variable:1; bool workgroup_size_variable:1;
/**
* Is this an ARB assembly-style program.
*/
bool is_arb_asm;
union { union {
struct { struct {
/* Which inputs are doubles */ /* Which inputs are doubles */

View File

@@ -124,7 +124,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
memset(&prog_data, 0, sizeof(prog_data)); memset(&prog_data, 0, sizeof(prog_data));
/* Use ALT floating point mode for ARB programs so that 0^0 == 1. */ /* Use ALT floating point mode for ARB programs so that 0^0 == 1. */
if (vp->program.is_arb_asm) if (vp->program.info.is_arb_asm)
stage_prog_data->use_alt_mode = true; stage_prog_data->use_alt_mode = true;
mem_ctx = ralloc_context(NULL); mem_ctx = ralloc_context(NULL);
@@ -134,7 +134,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
brw_assign_common_binding_table_offsets(devinfo, &vp->program, brw_assign_common_binding_table_offsets(devinfo, &vp->program,
&prog_data.base.base, 0); &prog_data.base.base, 0);
if (!vp->program.is_arb_asm) { if (!vp->program.info.is_arb_asm) {
brw_nir_setup_glsl_uniforms(mem_ctx, nir, &vp->program, brw_nir_setup_glsl_uniforms(mem_ctx, nir, &vp->program,
&prog_data.base.base, &prog_data.base.base,
compiler->scalar_stage[MESA_SHADER_VERTEX]); compiler->scalar_stage[MESA_SHADER_VERTEX]);
@@ -173,7 +173,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
} }
if (INTEL_DEBUG & DEBUG_VS) { if (INTEL_DEBUG & DEBUG_VS) {
if (vp->program.is_arb_asm) if (vp->program.info.is_arb_asm)
brw_dump_arb_asm("vertex", &vp->program); brw_dump_arb_asm("vertex", &vp->program);
} }
@@ -191,12 +191,12 @@ brw_codegen_vs_prog(struct brw_context *brw,
params.shader_time = true; params.shader_time = true;
params.shader_time_index = params.shader_time_index =
brw_get_shader_time_index(brw, &vp->program, ST_VS, brw_get_shader_time_index(brw, &vp->program, ST_VS,
!vp->program.is_arb_asm); !vp->program.info.is_arb_asm);
} }
program = brw_compile_vs(compiler, mem_ctx, &params); program = brw_compile_vs(compiler, mem_ctx, &params);
if (program == NULL) { if (program == NULL) {
if (!vp->program.is_arb_asm) { if (!vp->program.info.is_arb_asm) {
vp->program.sh.data->LinkStatus = LINKING_FAILURE; vp->program.sh.data->LinkStatus = LINKING_FAILURE;
ralloc_strcat(&vp->program.sh.data->InfoLog, params.error_str); ralloc_strcat(&vp->program.sh.data->InfoLog, params.error_str);
} }

View File

@@ -86,12 +86,12 @@ brw_codegen_wm_prog(struct brw_context *brw,
memset(&prog_data, 0, sizeof(prog_data)); memset(&prog_data, 0, sizeof(prog_data));
/* Use ALT floating point mode for ARB programs so that 0^0 == 1. */ /* Use ALT floating point mode for ARB programs so that 0^0 == 1. */
if (fp->program.is_arb_asm) if (fp->program.info.is_arb_asm)
prog_data.base.use_alt_mode = true; prog_data.base.use_alt_mode = true;
assign_fs_binding_table_offsets(devinfo, &fp->program, key, &prog_data); assign_fs_binding_table_offsets(devinfo, &fp->program, key, &prog_data);
if (!fp->program.is_arb_asm) { if (!fp->program.info.is_arb_asm) {
brw_nir_setup_glsl_uniforms(mem_ctx, nir, &fp->program, brw_nir_setup_glsl_uniforms(mem_ctx, nir, &fp->program,
&prog_data.base, true); &prog_data.base, true);
if (brw->can_push_ubos) { if (brw->can_push_ubos) {
@@ -126,19 +126,19 @@ brw_codegen_wm_prog(struct brw_context *brw,
params.shader_time = true; params.shader_time = true;
params.shader_time_index8 = params.shader_time_index8 =
brw_get_shader_time_index(brw, &fp->program, ST_FS8, brw_get_shader_time_index(brw, &fp->program, ST_FS8,
!fp->program.is_arb_asm); !fp->program.info.is_arb_asm);
params.shader_time_index16 = params.shader_time_index16 =
brw_get_shader_time_index(brw, &fp->program, ST_FS16, brw_get_shader_time_index(brw, &fp->program, ST_FS16,
!fp->program.is_arb_asm); !fp->program.info.is_arb_asm);
params.shader_time_index32 = params.shader_time_index32 =
brw_get_shader_time_index(brw, &fp->program, ST_FS32, brw_get_shader_time_index(brw, &fp->program, ST_FS32,
!fp->program.is_arb_asm); !fp->program.info.is_arb_asm);
} }
program = brw_compile_fs(brw->screen->compiler, mem_ctx, &params); program = brw_compile_fs(brw->screen->compiler, mem_ctx, &params);
if (program == NULL) { if (program == NULL) {
if (!fp->program.is_arb_asm) { if (!fp->program.info.is_arb_asm) {
fp->program.sh.data->LinkStatus = LINKING_FAILURE; fp->program.sh.data->LinkStatus = LINKING_FAILURE;
ralloc_strcat(&fp->program.sh.data->InfoLog, params.error_str); ralloc_strcat(&fp->program.sh.data->InfoLog, params.error_str);
} }
@@ -164,7 +164,7 @@ brw_codegen_wm_prog(struct brw_context *brw,
brw_alloc_stage_scratch(brw, &brw->wm.base, prog_data.base.total_scratch); brw_alloc_stage_scratch(brw, &brw->wm.base, prog_data.base.total_scratch);
if (((INTEL_DEBUG & DEBUG_WM) && fp->program.is_arb_asm)) if (((INTEL_DEBUG & DEBUG_WM) && fp->program.info.is_arb_asm))
fprintf(stderr, "\n"); fprintf(stderr, "\n");
/* The param and pull_param arrays will be freed by the shader cache. */ /* The param and pull_param arrays will be freed by the shader cache. */

View File

@@ -2138,8 +2138,6 @@ struct gl_program
void *driver_cache_blob; void *driver_cache_blob;
size_t driver_cache_blob_size; size_t driver_cache_blob_size;
bool is_arb_asm; /** Is this an ARB assembly-style program */
/** Is this program written to on disk shader cache */ /** Is this program written to on disk shader cache */
bool program_written_to_cache; bool program_written_to_cache;

View File

@@ -2500,7 +2500,7 @@ _mesa_associate_uniform_storage(struct gl_context *ctx,
unsigned columns = 0; unsigned columns = 0;
int dmul; int dmul;
if (ctx->Const.PackedDriverUniformStorage && !prog->is_arb_asm) { if (ctx->Const.PackedDriverUniformStorage && !prog->info.is_arb_asm) {
dmul = storage->type->vector_elements * sizeof(float); dmul = storage->type->vector_elements * sizeof(float);
} else { } else {
dmul = 4 * sizeof(float); dmul = 4 * sizeof(float);
@@ -2593,7 +2593,7 @@ _mesa_associate_uniform_storage(struct gl_context *ctx,
* initializers in the source code to be copied over. * initializers in the source code to be copied over.
*/ */
unsigned array_elements = MAX2(1, storage->array_elements); unsigned array_elements = MAX2(1, storage->array_elements);
if (ctx->Const.PackedDriverUniformStorage && !prog->is_arb_asm && if (ctx->Const.PackedDriverUniformStorage && !prog->info.is_arb_asm &&
(storage->is_bindless || !storage->type->contains_opaque())) { (storage->is_bindless || !storage->type->contains_opaque())) {
const int dmul = storage->type->is_64bit() ? 2 : 1; const int dmul = storage->type->is_64bit() ? 2 : 1;
const unsigned components = const unsigned components =

View File

@@ -194,7 +194,7 @@ _mesa_init_gl_program(struct gl_program *prog, gl_shader_stage stage,
prog->RefCount = 1; prog->RefCount = 1;
prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB; prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB;
prog->info.stage = stage; prog->info.stage = stage;
prog->is_arb_asm = is_arb_asm; prog->info.is_arb_asm = is_arb_asm;
/* Uniforms that lack an initializer in the shader code have an initial /* Uniforms that lack an initializer in the shader code have an initial
* value of zero. This includes sampler uniforms. * value of zero. This includes sampler uniforms.