소스 검색

glsl: fix shader cache for packed param list

Some types of params such as some builtins are always padded. We
need to keep track of this so we can restore the list correctly.

Here we also remove a couple of cache entries that are not actually
required as they get rebuilt by the _mesa_add_parameter() calls.

This patch fixes a bunch of arb_texture_multisample and
arb_sample_shading piglit tests for the radeonsi NIR backend.

Fixes: edded12376 ("mesa: rework ParameterList to allow packing")

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
tags/19.1-branchpoint
Timothy Arceri 6 년 전
부모
커밋
7536af670b
3개의 변경된 파일11개의 추가작업 그리고 11개의 파일을 삭제
  1. 4
    11
      src/compiler/glsl/serialize.cpp
  2. 1
    0
      src/mesa/program/prog_parameter.c
  3. 6
    0
      src/mesa/program/prog_parameter.h

+ 4
- 11
src/compiler/glsl/serialize.cpp 파일 보기

@@ -996,15 +996,14 @@ write_shader_parameters(struct blob *metadata,
struct gl_program_parameter_list *params)
{
blob_write_uint32(metadata, params->NumParameters);
blob_write_uint32(metadata, params->NumParameterValues);
uint32_t i = 0;

while (i < params->NumParameters) {
struct gl_program_parameter *param = &params->Parameters[i];

blob_write_uint32(metadata, param->Type);
blob_write_string(metadata, param->Name);
blob_write_uint32(metadata, param->Size);
blob_write_uint32(metadata, param->Padded);
blob_write_uint32(metadata, param->DataType);
blob_write_bytes(metadata, param->StateIndexes,
sizeof(param->StateIndexes));
@@ -1015,9 +1014,6 @@ write_shader_parameters(struct blob *metadata,
blob_write_bytes(metadata, params->ParameterValues,
sizeof(gl_constant_value) * params->NumParameterValues);

blob_write_bytes(metadata, params->ParameterValueOffset,
sizeof(uint32_t) * params->NumParameters);

blob_write_uint32(metadata, params->StateFlags);
}

@@ -1028,28 +1024,25 @@ read_shader_parameters(struct blob_reader *metadata,
gl_state_index16 state_indexes[STATE_LENGTH];
uint32_t i = 0;
uint32_t num_parameters = blob_read_uint32(metadata);
uint32_t num_parameters_values = blob_read_uint32(metadata);

_mesa_reserve_parameter_storage(params, num_parameters);
while (i < num_parameters) {
gl_register_file type = (gl_register_file) blob_read_uint32(metadata);
const char *name = blob_read_string(metadata);
unsigned size = blob_read_uint32(metadata);
bool padded = blob_read_uint32(metadata);
unsigned data_type = blob_read_uint32(metadata);
blob_copy_bytes(metadata, (uint8_t *) state_indexes,
sizeof(state_indexes));

_mesa_add_parameter(params, type, name, size, data_type,
NULL, state_indexes, false);
NULL, state_indexes, padded);

i++;
}

blob_copy_bytes(metadata, (uint8_t *) params->ParameterValues,
sizeof(gl_constant_value) * num_parameters_values);

blob_copy_bytes(metadata, (uint8_t *) params->ParameterValueOffset,
sizeof(uint32_t) * num_parameters);
sizeof(gl_constant_value) * params->NumParameterValues);

params->StateFlags = blob_read_uint32(metadata);
}

+ 1
- 0
src/mesa/program/prog_parameter.c 파일 보기

@@ -275,6 +275,7 @@ _mesa_add_parameter(struct gl_program_parameter_list *paramList,
p->Name = strdup(name ? name : "");
p->Type = type;
p->Size = size;
p->Padded = pad_and_align;
p->DataType = datatype;

paramList->ParameterValueOffset[oldNum] = oldValNum;

+ 6
- 0
src/mesa/program/prog_parameter.h 파일 보기

@@ -104,6 +104,12 @@ struct gl_program_parameter
* A sequence of STATE_* tokens and integers to identify GL state.
*/
gl_state_index16 StateIndexes[STATE_LENGTH];

/**
* We need to keep track of whether the param is padded for use in the
* shader cache.
*/
bool Padded;
};



Loading…
취소
저장