diff --git a/src/imagination/pco/pco.c b/src/imagination/pco/pco.c index edbfe1f8b96..d39453cf48a 100644 --- a/src/imagination/pco/pco.c +++ b/src/imagination/pco/pco.c @@ -305,10 +305,14 @@ pco_precomp_data pco_get_precomp_data(pco_shader *shader) { assert(pco_shader_binary_size(shader)); + unsigned size_dwords = pco_shader_binary_size(shader) / sizeof(uint32_t); + assert(size_dwords <= UINT16_MAX); + return (pco_precomp_data){ .temps = shader->data.common.temps, .vtxins = shader->data.common.vtxins, .coeffs = shader->data.common.coeffs, .shareds = shader->data.common.shareds, + .size_dwords = size_dwords, }; } diff --git a/src/imagination/pco/pco_data.h b/src/imagination/pco/pco_data.h index e694242bb7f..1fbcf007c5e 100644 --- a/src/imagination/pco/pco_data.h +++ b/src/imagination/pco/pco_data.h @@ -241,7 +241,11 @@ typedef struct PACKED _pco_precomp_data { uint16_t coeffs : 12; uint16_t shareds : 12; - uint8_t pad[3]; + uint16_t size_dwords; + + uint8_t pad[1]; + + uint32_t binary[]; } pco_precomp_data; static_assert(sizeof(pco_precomp_data) == 8, "sizeof(pco_precomp_data) != 8");