radv/meta: refactor out some common shaders.
authorDave Airlie <airlied@redhat.com>
Tue, 18 Apr 2017 23:13:06 +0000 (09:13 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 19 Apr 2017 00:03:05 +0000 (10:03 +1000)
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>
src/amd/vulkan/radv_meta.c
src/amd/vulkan/radv_meta.h
src/amd/vulkan/radv_meta_decompress.c
src/amd/vulkan/radv_meta_fast_clear.c
src/amd/vulkan/radv_meta_resolve.c

index 3584396b727573680ead7259f96b3ce0f98a8e19..aed2607c22cb138e8b733dfa21fbf48fe25ffc31 100644 (file)
@@ -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));
 }
+
+/* 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;
+}
index 5cf5d62098c93e70fb2f9473010b2b0c1183d879..2a6b0243e8c2fa53f9ab755a169dbb70e5c29ae2 100644 (file)
@@ -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_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
 }
 #endif
index 3566fa7f7315b9bb0d19ae959d55bc1df72ef24c..b003abba9833598bda62a4f580e3456df4ccf2a2 100644 (file)
 
 #include "radv_meta.h"
 #include "radv_private.h"
-#include "nir/nir_builder.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
 create_pass(struct radv_device *device)
 {
@@ -115,7 +78,7 @@ create_pipeline(struct radv_device *device,
        VkDevice device_h = radv_device_to_handle(device);
 
        struct radv_shader_module fs_module = {
-               .nir = build_nir_fs(),
+               .nir = radv_meta_build_nir_fs_noop(),
        };
 
        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);
 
-       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) {
                /* XXX: Need more accurate error */
                res = VK_ERROR_OUT_OF_HOST_MEMORY;
index 5f792f1f8946af6b20bda083358328ec12b9f216..254964287d737810e92ed6dfb208c3975737048f 100644 (file)
 
 #include "radv_meta.h"
 #include "radv_private.h"
-#include "nir/nir_builder.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
 create_pass(struct radv_device *device)
 {
@@ -119,7 +82,7 @@ create_pipeline(struct radv_device *device,
        VkDevice device_h = radv_device_to_handle(device);
 
        struct radv_shader_module fs_module = {
-               .nir = build_nir_fs(),
+               .nir = radv_meta_build_nir_fs_noop(),
        };
 
        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);
 
-       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) {
                /* XXX: Need more accurate error */
                res = VK_ERROR_OUT_OF_HOST_MEMORY;
index 70dcc30bee637cb191415a7a6d8913ab200f48c9..460a0bcb5178d649725002a402883934b8f782c4 100644 (file)
 #include "nir/nir_builder.h"
 #include "sid.h"
 
-/* vertex shader that generates vertex data */
-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 */
+/* emit 0, 0, 0, 1 */
 static nir_shader *
 build_nir_fs(void)
 {
@@ -264,7 +240,7 @@ radv_device_init_meta_resolve_state(struct radv_device *device)
 
        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) {
                /* XXX: Need more accurate error */
                res = VK_ERROR_OUT_OF_HOST_MEMORY;