mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
v3dv/uniforms: fill up texture size-related uniforms
Needed for textureQueryLevels and textureSize Gets tests like the following working: dEQP-VK.glsl.texture_functions.query.texturequerylevels.isampler2d_fragment Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
parent
9b98d36522
commit
b94946c23b
1 changed files with 52 additions and 0 deletions
|
|
@ -200,6 +200,46 @@ write_ubo_ssbo_uniforms(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
}
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
get_texture_size(struct v3dv_cmd_buffer *cmd_buffer,
|
||||
struct v3dv_pipeline *pipeline,
|
||||
enum quniform_contents contents,
|
||||
uint32_t data)
|
||||
{
|
||||
int unit = v3d_unit_data_get_unit(data);
|
||||
uint32_t texture_idx;
|
||||
struct v3dv_descriptor_state *descriptor_state =
|
||||
&cmd_buffer->state.descriptor_state;
|
||||
|
||||
v3dv_pipeline_combined_index_key_unpack(pipeline->combined_index_to_key_map[unit],
|
||||
&texture_idx,
|
||||
NULL);
|
||||
|
||||
struct v3dv_image_view *image_view =
|
||||
v3dv_descriptor_map_get_image_view(descriptor_state, &pipeline->texture_map,
|
||||
pipeline->layout, texture_idx);
|
||||
|
||||
assert(image_view);
|
||||
|
||||
switch(contents) {
|
||||
case QUNIFORM_TEXTURE_WIDTH:
|
||||
/* We don't u_minify the values, as we are using the image_view
|
||||
* extents
|
||||
*/
|
||||
return image_view->extent.width;
|
||||
case QUNIFORM_TEXTURE_HEIGHT:
|
||||
return image_view->extent.height;
|
||||
case QUNIFORM_TEXTURE_DEPTH:
|
||||
return image_view->extent.depth;
|
||||
case QUNIFORM_TEXTURE_ARRAY_SIZE:
|
||||
return image_view->last_layer - image_view->first_layer + 1;
|
||||
case QUNIFORM_TEXTURE_LEVELS:
|
||||
return image_view->max_level - image_view->base_level + 1;
|
||||
default:
|
||||
unreachable("Bad texture size field");
|
||||
}
|
||||
}
|
||||
|
||||
struct v3dv_cl_reloc
|
||||
v3dv_write_uniforms(struct v3dv_cmd_buffer *cmd_buffer,
|
||||
struct v3dv_pipeline_stage *p_stage)
|
||||
|
|
@ -269,6 +309,18 @@ v3dv_write_uniforms(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
write_tmu_p1(cmd_buffer, pipeline, &uniforms, data);
|
||||
break;
|
||||
|
||||
case QUNIFORM_TEXTURE_WIDTH:
|
||||
case QUNIFORM_TEXTURE_HEIGHT:
|
||||
case QUNIFORM_TEXTURE_DEPTH:
|
||||
case QUNIFORM_TEXTURE_ARRAY_SIZE:
|
||||
case QUNIFORM_TEXTURE_LEVELS:
|
||||
cl_aligned_u32(&uniforms,
|
||||
get_texture_size(cmd_buffer,
|
||||
pipeline,
|
||||
uinfo->contents[i],
|
||||
data));
|
||||
break;
|
||||
|
||||
default:
|
||||
unreachable("unsupported quniform_contents uniform type\n");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue