radv/meta: refactor out some common shaders.
The vs vertex generate and fs noop shaders are used in a few places, so refactor them out. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
bdd98d950f
commit
03a2ca6356
|
@ -454,3 +454,38 @@ nir_ssa_def *radv_meta_gen_rect_vertices(nir_builder *vs_b)
|
||||||
{
|
{
|
||||||
return radv_meta_gen_rect_vertices_comp2(vs_b, nir_imm_float(vs_b, 0.0));
|
return radv_meta_gen_rect_vertices_comp2(vs_b, nir_imm_float(vs_b, 0.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* vertex shader that generates vertices */
|
||||||
|
nir_shader *
|
||||||
|
radv_meta_build_nir_vs_generate_vertices(void)
|
||||||
|
{
|
||||||
|
const struct glsl_type *vec4 = glsl_vec4_type();
|
||||||
|
|
||||||
|
nir_builder b;
|
||||||
|
nir_variable *v_position;
|
||||||
|
|
||||||
|
nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_VERTEX, NULL);
|
||||||
|
b.shader->info->name = ralloc_strdup(b.shader, "meta_vs_gen_verts");
|
||||||
|
|
||||||
|
nir_ssa_def *outvec = radv_meta_gen_rect_vertices(&b);
|
||||||
|
|
||||||
|
v_position = nir_variable_create(b.shader, nir_var_shader_out, vec4,
|
||||||
|
"gl_Position");
|
||||||
|
v_position->data.location = VARYING_SLOT_POS;
|
||||||
|
|
||||||
|
nir_store_var(&b, v_position, outvec, 0xf);
|
||||||
|
|
||||||
|
return b.shader;
|
||||||
|
}
|
||||||
|
|
||||||
|
nir_shader *
|
||||||
|
radv_meta_build_nir_fs_noop(void)
|
||||||
|
{
|
||||||
|
nir_builder b;
|
||||||
|
|
||||||
|
nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_FRAGMENT, NULL);
|
||||||
|
b.shader->info->name = ralloc_asprintf(b.shader,
|
||||||
|
"meta_noop_fs");
|
||||||
|
|
||||||
|
return b.shader;
|
||||||
|
}
|
||||||
|
|
|
@ -227,6 +227,8 @@ void radv_blit_to_prime_linear(struct radv_cmd_buffer *cmd_buffer,
|
||||||
|
|
||||||
nir_ssa_def *radv_meta_gen_rect_vertices(nir_builder *vs_b);
|
nir_ssa_def *radv_meta_gen_rect_vertices(nir_builder *vs_b);
|
||||||
nir_ssa_def *radv_meta_gen_rect_vertices_comp2(nir_builder *vs_b, nir_ssa_def *comp2);
|
nir_ssa_def *radv_meta_gen_rect_vertices_comp2(nir_builder *vs_b, nir_ssa_def *comp2);
|
||||||
|
nir_shader *radv_meta_build_nir_vs_generate_vertices(void);
|
||||||
|
nir_shader *radv_meta_build_nir_fs_noop(void);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -26,45 +26,8 @@
|
||||||
|
|
||||||
#include "radv_meta.h"
|
#include "radv_meta.h"
|
||||||
#include "radv_private.h"
|
#include "radv_private.h"
|
||||||
#include "nir/nir_builder.h"
|
|
||||||
#include "sid.h"
|
#include "sid.h"
|
||||||
|
|
||||||
/* vertex shader that generates vertices */
|
|
||||||
static nir_shader *
|
|
||||||
build_nir_vs(void)
|
|
||||||
{
|
|
||||||
const struct glsl_type *vec4 = glsl_vec4_type();
|
|
||||||
|
|
||||||
nir_builder b;
|
|
||||||
nir_variable *v_position;
|
|
||||||
|
|
||||||
nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_VERTEX, NULL);
|
|
||||||
b.shader->info->name = ralloc_strdup(b.shader, "meta_depth_decomp_vs");
|
|
||||||
|
|
||||||
nir_ssa_def *outvec = radv_meta_gen_rect_vertices(&b);
|
|
||||||
|
|
||||||
v_position = nir_variable_create(b.shader, nir_var_shader_out, vec4,
|
|
||||||
"gl_Position");
|
|
||||||
v_position->data.location = VARYING_SLOT_POS;
|
|
||||||
|
|
||||||
nir_store_var(&b, v_position, outvec, 0xf);
|
|
||||||
|
|
||||||
return b.shader;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* simple passthrough shader */
|
|
||||||
static nir_shader *
|
|
||||||
build_nir_fs(void)
|
|
||||||
{
|
|
||||||
nir_builder b;
|
|
||||||
|
|
||||||
nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_FRAGMENT, NULL);
|
|
||||||
b.shader->info->name = ralloc_asprintf(b.shader,
|
|
||||||
"meta_depth_decomp_noop_fs");
|
|
||||||
|
|
||||||
return b.shader;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult
|
static VkResult
|
||||||
create_pass(struct radv_device *device)
|
create_pass(struct radv_device *device)
|
||||||
{
|
{
|
||||||
|
@ -115,7 +78,7 @@ create_pipeline(struct radv_device *device,
|
||||||
VkDevice device_h = radv_device_to_handle(device);
|
VkDevice device_h = radv_device_to_handle(device);
|
||||||
|
|
||||||
struct radv_shader_module fs_module = {
|
struct radv_shader_module fs_module = {
|
||||||
.nir = build_nir_fs(),
|
.nir = radv_meta_build_nir_fs_noop(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!fs_module.nir) {
|
if (!fs_module.nir) {
|
||||||
|
@ -260,7 +223,7 @@ radv_device_init_meta_depth_decomp_state(struct radv_device *device)
|
||||||
|
|
||||||
zero(device->meta_state.depth_decomp);
|
zero(device->meta_state.depth_decomp);
|
||||||
|
|
||||||
struct radv_shader_module vs_module = { .nir = build_nir_vs() };
|
struct radv_shader_module vs_module = { .nir = radv_meta_build_nir_vs_generate_vertices() };
|
||||||
if (!vs_module.nir) {
|
if (!vs_module.nir) {
|
||||||
/* XXX: Need more accurate error */
|
/* XXX: Need more accurate error */
|
||||||
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||||
|
|
|
@ -26,45 +26,8 @@
|
||||||
|
|
||||||
#include "radv_meta.h"
|
#include "radv_meta.h"
|
||||||
#include "radv_private.h"
|
#include "radv_private.h"
|
||||||
#include "nir/nir_builder.h"
|
|
||||||
#include "sid.h"
|
#include "sid.h"
|
||||||
|
|
||||||
/* vertex shader that generates vertices */
|
|
||||||
static nir_shader *
|
|
||||||
build_nir_vs(void)
|
|
||||||
{
|
|
||||||
const struct glsl_type *vec4 = glsl_vec4_type();
|
|
||||||
|
|
||||||
nir_builder b;
|
|
||||||
nir_variable *v_position;
|
|
||||||
|
|
||||||
nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_VERTEX, NULL);
|
|
||||||
b.shader->info->name = ralloc_strdup(b.shader, "meta_fast_clear_vs");
|
|
||||||
|
|
||||||
nir_ssa_def *outvec = radv_meta_gen_rect_vertices(&b);
|
|
||||||
|
|
||||||
v_position = nir_variable_create(b.shader, nir_var_shader_out, vec4,
|
|
||||||
"gl_Position");
|
|
||||||
v_position->data.location = VARYING_SLOT_POS;
|
|
||||||
|
|
||||||
nir_store_var(&b, v_position, outvec, 0xf);
|
|
||||||
|
|
||||||
return b.shader;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* simple passthrough shader */
|
|
||||||
static nir_shader *
|
|
||||||
build_nir_fs(void)
|
|
||||||
{
|
|
||||||
nir_builder b;
|
|
||||||
|
|
||||||
nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_FRAGMENT, NULL);
|
|
||||||
b.shader->info->name = ralloc_asprintf(b.shader,
|
|
||||||
"meta_fast_clear_noop_fs");
|
|
||||||
|
|
||||||
return b.shader;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult
|
static VkResult
|
||||||
create_pass(struct radv_device *device)
|
create_pass(struct radv_device *device)
|
||||||
{
|
{
|
||||||
|
@ -119,7 +82,7 @@ create_pipeline(struct radv_device *device,
|
||||||
VkDevice device_h = radv_device_to_handle(device);
|
VkDevice device_h = radv_device_to_handle(device);
|
||||||
|
|
||||||
struct radv_shader_module fs_module = {
|
struct radv_shader_module fs_module = {
|
||||||
.nir = build_nir_fs(),
|
.nir = radv_meta_build_nir_fs_noop(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!fs_module.nir) {
|
if (!fs_module.nir) {
|
||||||
|
@ -305,7 +268,7 @@ radv_device_init_meta_fast_clear_flush_state(struct radv_device *device)
|
||||||
|
|
||||||
zero(device->meta_state.fast_clear_flush);
|
zero(device->meta_state.fast_clear_flush);
|
||||||
|
|
||||||
struct radv_shader_module vs_module = { .nir = build_nir_vs() };
|
struct radv_shader_module vs_module = { .nir = radv_meta_build_nir_vs_generate_vertices() };
|
||||||
if (!vs_module.nir) {
|
if (!vs_module.nir) {
|
||||||
/* XXX: Need more accurate error */
|
/* XXX: Need more accurate error */
|
||||||
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||||
|
|
|
@ -29,31 +29,7 @@
|
||||||
#include "nir/nir_builder.h"
|
#include "nir/nir_builder.h"
|
||||||
#include "sid.h"
|
#include "sid.h"
|
||||||
|
|
||||||
/* vertex shader that generates vertex data */
|
/* emit 0, 0, 0, 1 */
|
||||||
static nir_shader *
|
|
||||||
build_nir_vs(void)
|
|
||||||
{
|
|
||||||
const struct glsl_type *vec4 = glsl_vec4_type();
|
|
||||||
|
|
||||||
nir_builder b;
|
|
||||||
nir_variable *v_position;
|
|
||||||
|
|
||||||
nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_VERTEX, NULL);
|
|
||||||
b.shader->info->name = ralloc_strdup(b.shader, "meta_resolve_vs");
|
|
||||||
|
|
||||||
nir_ssa_def *outvec = radv_meta_gen_rect_vertices(&b);
|
|
||||||
|
|
||||||
v_position = nir_variable_create(b.shader, nir_var_shader_out, vec4,
|
|
||||||
"gl_Position");
|
|
||||||
v_position->data.location = VARYING_SLOT_POS;
|
|
||||||
|
|
||||||
|
|
||||||
nir_store_var(&b, v_position, outvec, 0xf);
|
|
||||||
|
|
||||||
return b.shader;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* simple passthrough shader */
|
|
||||||
static nir_shader *
|
static nir_shader *
|
||||||
build_nir_fs(void)
|
build_nir_fs(void)
|
||||||
{
|
{
|
||||||
|
@ -264,7 +240,7 @@ radv_device_init_meta_resolve_state(struct radv_device *device)
|
||||||
|
|
||||||
zero(device->meta_state.resolve);
|
zero(device->meta_state.resolve);
|
||||||
|
|
||||||
struct radv_shader_module vs_module = { .nir = build_nir_vs() };
|
struct radv_shader_module vs_module = { .nir = radv_meta_build_nir_vs_generate_vertices() };
|
||||||
if (!vs_module.nir) {
|
if (!vs_module.nir) {
|
||||||
/* XXX: Need more accurate error */
|
/* XXX: Need more accurate error */
|
||||||
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||||
|
|
Loading…
Reference in New Issue