summaryrefslogtreecommitdiffstats
path: root/src/amd/vulkan
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2017-04-19 09:13:06 +1000
committerDave Airlie <[email protected]>2017-04-19 10:03:05 +1000
commit03a2ca63562b73d36658e43c0d7d77150421be60 (patch)
treeaea603afee4b7211f294b88f61dac4953cf7f4ae /src/amd/vulkan
parentbdd98d950fd7138b4625571964ad0cc76905d4f7 (diff)
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 <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/amd/vulkan')
-rw-r--r--src/amd/vulkan/radv_meta.c35
-rw-r--r--src/amd/vulkan/radv_meta.h2
-rw-r--r--src/amd/vulkan/radv_meta_decompress.c41
-rw-r--r--src/amd/vulkan/radv_meta_fast_clear.c41
-rw-r--r--src/amd/vulkan/radv_meta_resolve.c28
5 files changed, 43 insertions, 104 deletions
diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c
index 3584396b727..aed2607c22c 100644
--- a/src/amd/vulkan/radv_meta.c
+++ b/src/amd/vulkan/radv_meta.c
@@ -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;
+}
diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
index 5cf5d62098c..2a6b0243e8c 100644
--- a/src/amd/vulkan/radv_meta.h
+++ b/src/amd/vulkan/radv_meta.h
@@ -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
diff --git a/src/amd/vulkan/radv_meta_decompress.c b/src/amd/vulkan/radv_meta_decompress.c
index 3566fa7f731..b003abba983 100644
--- a/src/amd/vulkan/radv_meta_decompress.c
+++ b/src/amd/vulkan/radv_meta_decompress.c
@@ -26,45 +26,8 @@
#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;
diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c
index 5f792f1f894..254964287d7 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -26,45 +26,8 @@
#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;
diff --git a/src/amd/vulkan/radv_meta_resolve.c b/src/amd/vulkan/radv_meta_resolve.c
index 70dcc30bee6..460a0bcb517 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -29,31 +29,7 @@
#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;