mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 17:20:10 +01:00
d3d12: Retrieve shader image dimensions during shader compiles
Reviewed-by: Sil Vilerino <sivileri@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14342>
This commit is contained in:
parent
5e82a2ff2b
commit
def1f0743c
2 changed files with 17 additions and 5 deletions
|
|
@ -191,18 +191,26 @@ compile_nir(struct d3d12_context *ctx, struct d3d12_shader_selector *sel,
|
|||
// Non-ubo variables
|
||||
shader->begin_srv_binding = (UINT_MAX);
|
||||
nir_foreach_variable_with_modes(var, nir, nir_var_uniform) {
|
||||
auto type = glsl_without_array(var->type);
|
||||
if (glsl_type_is_texture(type)) {
|
||||
auto type_no_array = glsl_without_array(var->type);
|
||||
if (glsl_type_is_texture(type_no_array)) {
|
||||
unsigned count = glsl_type_is_array(var->type) ? glsl_get_aoa_size(var->type) : 1;
|
||||
for (unsigned i = 0; i < count; ++i) {
|
||||
shader->srv_bindings[var->data.binding + i].binding = var->data.binding;
|
||||
shader->srv_bindings[var->data.binding + i].dimension = resource_dimension(glsl_get_sampler_dim(type));
|
||||
shader->srv_bindings[var->data.binding + i].dimension = resource_dimension(glsl_get_sampler_dim(type_no_array));
|
||||
}
|
||||
shader->begin_srv_binding = MIN2(var->data.binding, shader->begin_srv_binding);
|
||||
shader->end_srv_binding = MAX2(var->data.binding + count, shader->end_srv_binding);
|
||||
}
|
||||
}
|
||||
|
||||
nir_foreach_image_variable(var, nir) {
|
||||
auto type_no_array = glsl_without_array(var->type);
|
||||
unsigned count = glsl_type_is_array(var->type) ? glsl_get_aoa_size(var->type) : 1;
|
||||
for (unsigned i = 0; i < count; ++i) {
|
||||
shader->uav_bindings[var->data.driver_location + i].format = var->data.image.format;
|
||||
shader->uav_bindings[var->data.driver_location + i].dimension = resource_dimension(glsl_get_sampler_dim(type_no_array));
|
||||
}
|
||||
}
|
||||
|
||||
// Ubo variables
|
||||
if(nir->info.num_ubos) {
|
||||
// Ignore state_vars ubo as it is bound as root constants
|
||||
|
|
|
|||
|
|
@ -136,12 +136,16 @@ struct d3d12_shader {
|
|||
bool state_vars_used;
|
||||
|
||||
struct {
|
||||
int binding;
|
||||
uint32_t dimension;
|
||||
} srv_bindings[PIPE_MAX_SHADER_SAMPLER_VIEWS];
|
||||
size_t begin_srv_binding;
|
||||
size_t end_srv_binding;
|
||||
|
||||
struct {
|
||||
enum pipe_format format;
|
||||
uint32_t dimension;
|
||||
} uav_bindings[PIPE_MAX_SHADER_IMAGES];
|
||||
|
||||
bool has_default_ubo0;
|
||||
unsigned pstipple_binding;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue